哎,原谅我的笨。今天写代码碰到个很愚蠢的问题,在登录界面点击登录按钮后,需要网络请求,请求成功或者失败之前会有个一直转圈的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();}