2012-09-14 57 views
0

我想在WebView中打开一个URL,但我无法这样做,我认为这是因为会话不被维护。 我正在将活动中的用户名,密码和用户标识发送到服务器。这里的代码..Android:登录应用程序后无法保持会话

public class ServiceActivity extends Activity { 
private Button button_back; 

private Button button_submit_user_pass; 
private EditText edit_id_code; 
private String contents; 
private String format; 
private String username; 
private String password; 
private String id; 
public static HttpClient client; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.qr_code_view); 

    edit_id_code = (EditText) findViewById(R.id.editText_id); 

    button_back = (Button) findViewById(R.id.button_back); 
    button_submit_user_pass = (Button) findViewById(R.id.button_submit_user_pass); 

    Intent user_pass = getIntent(); 

    username = user_pass.getStringExtra("user"); 
    password = user_pass.getStringExtra("pass"); 


    button_submit_user_pass 
      .setOnClickListener(user_pass_qr_submit_listener); 
    button_back.setOnClickListener(back_listener); 

} 

private View.OnClickListener user_pass_qr_submit_listener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     try { 
      id = edit_id_code.getText().toString(); 

      client = new DefaultHttpClient(); 
      HttpPost post1 = new HttpPost(
        "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
      List<NameValuePair> nvp = new ArrayList<NameValuePair>(); 
      nvp.add(new BasicNameValuePair("uname", username)); 
      nvp.add(new BasicNameValuePair("password", password)); 
      nvp.add(new BasicNameValuePair("id", id)); 
      post1.setEntity(new UrlEncodedFormEntity(nvp)); 
      HttpResponse resp = client.execute(post1); 
      String responseText = inputStreamTOString(
        resp.getEntity().getContent()).toString(); 
      Log.i("response", responseText); 
      int num = Integer.parseInt(responseText); 

      if (num == 0) { 
       Toast.makeText(getApplicationContext(), 
         "Response" + responseText, 0).show(); 
      } else if (num == 1) { 
       Intent survey = new Intent(ServiceActivity.this, 
         WebViewActivity.class); 
       startActivity(survey); 
      } 
     } catch (Exception e) { 
      Log.e("error", "ERROR" + e); 
     } 

    } 

}; 
private View.OnClickListener back_listener = new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
    } 
}; 

private StringBuilder inputStreamTOString(InputStream is) { 
    String line = ""; 
    StringBuilder total = new StringBuilder(); 

    // read response until the end 
    try { 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is, 
       "iso-8859-1"), 8); 
     while ((line = rd.readLine()) != null) { 
      total.append(line); 

     } 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
    return total; 

} 
} 

在此之后,如果从服务器端的响应是“1”我打开一个新的活动中,我需要显示的用户在这里WebView内容是代码

public class WebViewActivity extends Activity{ 
private WebView web; 
@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.web_view); 

    web = (WebView) findViewById(R.id.webView); 


    web.getSettings().setJavaScriptEnabled(true); 


    web.loadUrl("xxxxxxxxxxxxxxxxxxxxxxxxxxxx"); 
} 

} 

但我无法加载相应的URL对应的用户,我得到的PHP错误的webviewactivity,这是因为我无法维护登录用户的会话。请建议我一些解决方案这个。

回答

0

你需要做的是保存使用PHP,让您的会话跟踪的cookie当它从你正在POST请求返回,将其用于以下请求。取决于您如何处理发布请求,有几种方法可以完成此操作。

此答案描述如何处理cookie:https://stackoverflow.com/a/687453/1525300

0

尝试使用SharedPreferences保持应用程序的会话。

为了节省价值。

SharedPreferences prefs; 
prefs = PreferenceManager.getDefaultSharedPreferences(this); 
Editor editor = prefs.edit(); 
editor.putString("key", value); 
editor.commit(); 

以检索其他活动

SharedPreferences prefs; 
prefs = PreferenceManager.getDefaultSharedPreferences(this); 
String variable = prefs.getString("key","default value"); 
+0

如何做到这一点?请详细说明。 –

+0

这不是一个答案,这应该是一个评论。 –

+0

编辑答案。希望这会有所帮助。 –