2015-10-05 70 views
1

我的應用程序總是崩潰,如果我在我的Loginscreen中輸入了錯誤的密碼,並且我不知道如何處理此異常。在我的代碼下面。應用程序在輸入錯誤的密碼後崩潰

public class Login extends AppCompatActivity implements View.OnClickListener{ 

    private EditText eUsername, ePasswort; 
    private Button bAnmelden, bRegestrieren; 
    private ProgressDialog pDialog; 


    //Encoder 
    JSONParser jsonParser = new JSONParser(); 

    private static final String TAG_SUCCESS = "success"; 
    private static final String TAG_MESSAGE = "Du bist jetzt eingeloggt"; 
    private static final String TAG_USERNAME_PREF = "BENUTZERNAME"; 


    // Verbindung zum Server 
    private static final String LOGIN_URL = "http://192.168.77.1:80/webservice/login.php"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login_); 

     // Editfelder 
     eUsername = (EditText)findViewById(R.id.FELD_username); 
     ePasswort = (EditText)findViewById(R.id.FELD_passwort); 

     //Button 
     bAnmelden = (Button)findViewById(R.id.BUTTON_anmelden); 
     bRegestrieren= (Button)findViewById(R.id.BUTTON_regestrieren); 

     //Hier werden die Button mit einen Klicklistener ausgestattet 
     bAnmelden.setOnClickListener(this); 
     bRegestrieren.setOnClickListener(this); 

    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()){ 
      case R.id.BUTTON_anmelden: 

       new VersuchLogin().execute(); 

      break; 

      case R.id.BUTTON_regestrieren: 
       Intent i = new Intent(this, Register.class); 
       startActivity(i); 
       break; 

      default: 
       break; 
     } 
    } 
    // 
    class VersuchLogin extends AsyncTask<String,String,String>{ 

     // Hier wird schon ausgeführt 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(Login.this); 
      pDialog.setMessage("Versucht einzuloggen..."); 
      //unbestimmt 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 

     @Override 
     protected String doInBackground(String... args) { 
      // Checkt erfogreichen Tag 
      int erfolgreich; 
      String username = eUsername.getText().toString(); 
      String passwort = ePasswort.getText().toString(); 

      try{ 
      // Hier werden die Parameter gebildet 
       List<NameValuePair> parameter = new ArrayList<NameValuePair>(); 
       parameter.add(new BasicNameValuePair("username",username)); 
       parameter.add(new BasicNameValuePair("password", passwort)); 

       //Holt sich die Daten beim anfragen des HTTP 
       JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL,"POST",parameter); 


       //Json erfolgreich entcondiert 
       erfolgreich = json.getInt(TAG_SUCCESS); 
       if (erfolgreich ==1){ 

        //Teile die Userdaten 
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Login.this); 
        SharedPreferences.Editor editor = sharedPreferences.edit(); 
        editor.putString(TAG_USERNAME_PREF,eUsername.getText().toString()); 
        editor.commit(); 


        Intent i = new Intent(Login.this,MainActivity.class); 
        finish(); 
        startActivity(i); 
        overridePendingTransition(0,0); 

        return (TAG_MESSAGE); 

       } else { 
        return json.getString(TAG_MESSAGE); 
       } 

      } catch (JSONException e) { 

       e.printStackTrace(); 
      } 

      return null; 
     } 


     @Override 
     protected void onPostExecute(String file_url) { 
      //bendet den Dialog 
      pDialog.dismiss(); 
      if(file_url != null); 
      Toast.makeText(Login.this, file_url, Toast.LENGTH_LONG).show(); 

     } 
    } 

} 
+0

請發表您的logcat – Aakash

+2

您在doInBackground方法開始活動,然後調用pDialog.dismiss(); ??邏輯上崩潰,你如何處理沒有視圖的對話?發佈logcat以獲取更多建議。 –

+0

你在這一行有一個不需要的分號 - if(file_url!= null);並且將解僱移到toast.maketext下方 –

回答

0

您的問題是解析錯誤消息,我想。錯誤消息不是有效的Json字符串或不是Json字符串。

您可以檢查Web服務的響應消息。 如果沒有錯誤,請解析您的json字符串。 否則,使用您獲得的錯誤消息顯示Toast消息。

這只是衆多解決方案之一。你可以做很多事情。您也可以使用響應中的錯誤代碼。

0

我想你在登錄時得到空響應?你是否檢查密碼錯誤時會出現什麼反應?

另外,你應該把if條件這樣

JSONObject json = jsonParser.makeHttpRequest(LOGIN_URL,"POST",parameter); 
     if(json!=null){ 
      //Json erfolgreich entcondiert 
      erfolgreich = json.getInt(TAG_SUCCESS); 
     }