哎,原諒我的笨。今天寫代碼碰到個很愚蠢的問題,在登錄界面點擊登錄按鈕後,需要網絡請求,請求成功或者失敗之前會有個一直轉圈的dialog在轉,當請求成功或者失敗之後這個dialog會消失掉。但是我的代碼一直會出現,輸入錯誤的密碼後,點擊登錄按鈕,沒有進入主頁面(這很正常),再次點擊登錄按鈕,就會出現當前頁面閃退。並且報了這個錯:java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.ProgressDialog.setMessage(java.lang.CharSequence)' on a null object reference。就這個問題糾結了我半天。
相關代碼如下:
ProgressDialog mProgressDialog;
private void showProgressBar() { mProgressDialog.setMessage("登錄中......"); mProgressDialog.show(); }
RequestParams params=new RequestParams(); params.put("phonenumber", name); params.put("password", Encrypt.EncoderByMd5(password)); AsyncUtils.get(GlobalURL.LOGIN_URL, params, new AsyncHttpResponseHandler() { @Override public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { String response = new String(responseBody); String result = null; String response1=null; try { JSONObject object = new JSONObject(response); result = object.optString("result"); response1=object.optString("message"); } catch (JSONException e) { e.printStackTrace(); } if (result.equals("success")) { startActivity(new Intent(LoginActivity.this,MainActivity.class)); finish(); } else if(result.equals("failed")){ ToastUtils.set(LoginActivity.this,response1); dismissDialog(); } } @Override public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) { LogUtils.MyLogE("=====fail:"+new String(responseBody)); dismissDialog(); } });
public void dismissDialog(){ if (mProgressDialog!=null){ mProgressDialog.dismiss(); mProgressDialog=null; } }
@Override protected void onDestroy() { dismissDialog(); super.onDestroy(); }
查了相關資料才發現,只有在該頁面消失的時候才能將dialog的引用置爲空,也就是說只有在onDestory中才能將
mProgressDialog=null,其他地方都不能調用這句代碼。所以將以上代碼變成:
public void dismissDialog(){ if (mProgressDialog!=null){ mProgressDialog.dismiss(); } }
@Override protected void onDestroy() {
if (mProgressDialog!=null){ mProgressDialog.dismiss(); mProgressDialog=null; }super.onDestroy();}就行了。哎,自己太笨了。