2012-09-14 63 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

編輯答案。希望這會有所幫助。 –