2013-03-23 27 views
0

我正嘗試將我的web服務與android中的AsyncTask類連接這是我得到的錯誤Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 我無法弄清楚我的問題在這裏。這是我AsyncTaskAndroid中的AsyncTask類中的RuntimeException

private class LoginTask extends AsyncTask<Void, Void, Void>{ 
    private String user_email1=user_email.getText().toString(); 
    private String user_password1=user_password.getText().toString(); 
    private String returnedJson; 
    @Override 
    protected Void doInBackground(Void... params) { 


     if(isEmailValid(user_email1)){ 
      String authString=user_email1+"::"+user_password1; 
      try { 
       ConnectService con = new ConnectService("http://xx.xx.xx.xx:9000/loginUser",EncryptInfo.encrypt(authString)); 
       returnedJson = con.getCatJsonData(); 

      } catch (Exception e) { 
       System.out.println("Encryption ERROR : "+e.getMessage()); 
      } 
     } 
     else{ 
      showMessageBox("Email", "Email hatalı!",false); 
      login_task.cancel(true); 
     } 
     return null; 
    } 


    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     user_email1=user_email.getText().toString(); 
     user_password1=user_password.getText().toString(); 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 

     JSONObject json; 
     try { 
      json = new JSONObject(returnedJson); 
      JSONObject loginJson=json.getJSONObject("myHashMap"); 
      if(loginJson.getString("responsestatus").equals("OK")){ 
       login_editor.putString("useremail", user_email1); 
       login_editor.putString("userpassword", user_password1); 
       if(!login_editor.commit()){ 
        showMessageBox("LOGIN HATASI!", "Giriş işlemi gerçekleşirken hata oluştu. Lütfen tekrar deneyin.", true); 
       } 
       else{ 
        Toast.makeText(LoginActivity.this, "login başarılı", Toast.LENGTH_SHORT).show(); 
        //ÜRÜN ARAMA ACTİVİTESİNE GEÇ***********  
       } 
      } 
      else{ 
       if(loginJson.getString("errorcode").equals("8")){ 
        showMessageBox("LOGIN HATASI!", "Email ve password alanları boş.", true); 
       } 
       else if(loginJson.getString("errorcode").equals("9")){ 
        showMessageBox("LOGIN HATASI!", "Geçersiz Email adresi.", true); 
       } 
       else if(loginJson.getString("errorcode").equals("10")){ 
        showMessageBox("LOGIN HATASI!", "Şifre minimum 6 karakter olmalı.", true);      
       } 
       else if(loginJson.getString("errorcode").equals("11")){ 
        showMessageBox("LOGIN HATASI!", "Girilen hesap sistemde kayıtlı değil.", true); 
       } 
       else if(loginJson.getString("errorcode").equals("12")){ 
        showMessageBox("LOGIN HATASI!", "Şifre hatalı.", true); 
       } 
      } 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 


    protected boolean isEmailValid(CharSequence email) { 
     return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches(); 
    } 

} 

回答

1

好吧,我懷疑你則會因爲showMessageBox()方法中,你是最有可能設法應付像麪包什麼的UI此異常。 如果是這種情況,那麼在doInBackground(Void... params)方法中,您不能調用showMessageBox(),因爲它在單獨的線程上運行。

+0

啊。謝謝你們的快速回答。是的它現在起作用了。我的錯。我試圖在doInBack上顯示警告對話框。 – demlik 2013-03-23 19:37:57

0

這裏你想顯示從後臺線程主線程的東西,嘗試運行RunonUiThread這個代碼()。

else { 
    showMessageBox("Email", "Email hatalı!",false); 
    login_task.cancel(true); 
}