2017-03-18 6 views
1

sorry ich AsyncTask zu verwenden, nur zu lernen, aber ich habe ein Problem haben, wenn mein Code ausgeführt wird ..FATALE AUSNAHME: AsyncTask # 1, wie beheben?

Ich habe drei Klasse Die erste Klasse für RestClient

public class LoginPembayaran { 

private static final String urlServer = "https://webservicetagihan.herokuapp.com"; 

RestTemplate restTemplate = new RestTemplate(); 

public void login(String username, String password) throws GagalLoginException{ 
    Map<String, String> logindata = new HashMap<>(); 
    logindata.put("username",username); 
    logindata.put("password",password); 

    Map<String,Object> hasil = restTemplate.postForObject(urlServer + "/api/login",logindata,Map.class,new Object[]{}); 

    if (hasil == null){ 
     throw new GagalLoginException("Respon valid"); 
    } 

    if (!(Boolean)hasil.get("sukses")){ 
     throw new GagalLoginException("user name/password salah"); 
    } 


} 

Klasse zwei für AsyncTask ..

public class loginAktifity extends Fragment { 
private LoginPembayaran loginPembayaran = new LoginPembayaran(); 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    final View fragment = inflater.inflate(R.layout.fr_login,container,false); 

    Button button = (Button)fragment.findViewById(R.id.BtnLogin); 
    button.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        String username = ((EditText)fragment.findViewById(R.id.Etusernama)).getText().toString(); 
        String password = ((EditText)fragment.findViewById(R.id.EtPassword)).getText().toString(); 

        new AsyncTask<String,Void,Boolean>(){ 

         String ErrorMassage; 
         @Override 
         protected Boolean doInBackground(String... params) { 

          try { 
           loginPembayaran.login(params[0], params[1]); 
           return true; 
          }catch (GagalLoginException err){ 
           ErrorMassage = err.getMessage(); 
           return false; 
          } 
         }; 


         @Override 
         protected void onPostExecute(Boolean sukses) { 
          if(sukses){ 
           Intent intent = new Intent(getContext(),SesudahLoginActivity.class); 
           startActivity(intent); 
          } 
          else { 
           Toast.makeText(getContext(),ErrorMassage,Toast.LENGTH_LONG).show(); 
          } 
         } 
        }.execute(username,password); 


       } 
      } 
    ); 
    return fragment; 
} 

}

Klasse Baum für Exception

public class GagalLoginException extends Exception { 
public GagalLoginException(String message) { 
    super(message); 
} 

}

mein logcat ..

03-18 09:57:35.780 30964-31227/com.khoiron.apptagihan E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
    Process: com.khoiron.apptagihan, PID: 30964 
    java.lang.RuntimeException: An error occured while executing doInBackground() 
     at android.os.AsyncTask$3.done(AsyncTask.java:300) 
     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) 
     at java.util.concurrent.FutureTask.setException(FutureTask.java:222) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
     at java.lang.Thread.run(Thread.java:841) 
    Caused by: java.lang.NullPointerException 
     at com.khoiron.apptagihan.RestClient.LoginPembayaran.login(LoginPembayaran.java:31) 
     at com.khoiron.apptagihan.Fragment.loginAktifity$1$1.doInBackground(loginAktifity.java:48) 
     at com.khoiron.apptagihan.Fragment.loginAktifity$1$1.doInBackground(loginAktifity.java:41) 
     at android.os.AsyncTask$2.call(AsyncTask.java:288) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)  
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)  
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)  
     12q 
     at java.lang.Thread.run(Thread.java:841) 

Bitte hilf mir n me Bitte führen ....

+1

Mögliches Duplikat [Was für eine Nullpointer ist, und wie kann ich es beheben?] (Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix -) –

+0

siehe auch http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this für weitere Vorschläge, wie dieses Problem zu lösen. –

Antwort

0

Wenn es Linie 31

if (!(boolean)hasil.get("sukses")){ 

Sie also hat einen Tippfehler mit label gemacht, get() gibt null zurück und wirft ihn auf boolean, verursacht NPE.

0

Vom Ausnahmeprotokoll können Sie sehen, dass die Ausnahme von LoginPembayaran.login, Linie entstanden ist 31.

Caused by: java.lang.NullPointerException 
     at com.khoiron.apptagihan.RestClient.LoginPembayaran.login(LoginPembayaran.java:31) 

Wie bereits in der anderen Antwort erwähnt, ist es möglich, dass die Karte hasil nicht das Schlüssel-Item enthalten sukses, daher die Ausnahme.

dieses Problem zu debuggen, können Sie Android Studio-Debugger (siehe official guide) verwenden und einen Haltepunkt in Zeile 31, setzen die Karte zu prüfen, ob hasil in der Tat den Schlüssel sukses enthält.

Verwandte Themen