哎,原谅我的笨。今天写代码碰到个很愚蠢的问题,在登录界面点击登录按钮后,需要网络请求,请求成功或者失败之前会有个一直转圈的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; }}@Overrideprotected void onDestroy() { dismissDialog(); super.onDestroy();}查了相关资料才发现,只有在该页面消失的时候才能将dialog的引用置为空,也就是说只有在onDestory中才能将mProgressDialog=null,其他地方都不能调用这句代码。所以将以上代码变成:public void dismissDialog(){ if (mProgressDialog!=null){ mProgressDialog.dismiss(); }}@Overrideprotected void onDestroy() {if (mProgressDialog!=null){ mProgressDialog.dismiss(); mProgressDialog=null; } super.onDestroy();}就行了。哎,自己太笨了。
新闻热点
疑难解答