2013-03-23 3 views
0

Я пытаюсь подключить свой веб-сервис к классу AsyncTask в android. Это ошибка, которую я получаю. Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() Я не могу понять, в чем моя проблема. Это мой AsyncTask классRuntimeException в классе AsyncTask в Android

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

Ahh. Спасибо вам за ваш быстрый ответ. Да, теперь это сработало. Виноват. Я пытался показать диалоговое окно предупреждения в doInBack .. – demlik

0

здесь вы пытаетесь показать что-то на главном потоке от фонового потока, попробуйте запустить этот код в RunonUiThread().

else { 
    showMessageBox("Email", "Email hatalı!",false); 
    login_task.cancel(true); 
} 
Смежные вопросы