问:我在登录活动上单击登录按钮时遇到了一个问题。下面是我提到的调试日志:
04-15 15:07:45.924 2533-2533 / volleyjson.androidhive.info.myapplication E / AndroidRuntime:致命例外:主
进程:volleyjson.androidhive.info.myapplication,PID:2533
java.lang。NullPointerException:尝试调用虚拟方法'boolean
上的空对象引用android.app.ProgressDialog.isShowing()”
在volleyjson.androidhive.info.myapplication.login.showProgressDialog(login.java:55)
在volleyjson.androidhive.info.myapplication.login.makeJsonObjReq(login.java :64),
位于volleyjson.androidhive.info.myapplication.login.onClick(login.java:120),
位于android.view.View.performClick(View.java:5637)
在android.os.Handler.dispatchMessage(Handler.java:95)
在android.os.Handler.handleCallback(Handler.java:751)在android.view.View $ PerformClick.run
(View.java:22429 在android。
android.app.ActivityThread.main上的os.Looper.loop(Looper.java:154)(ActivityThread.java:6119)
在
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:886)的java.lang.reflect.Method.invoke(本机方法)
处在com.android.internal.os.ZygoteInit.main(ZygoteInit。 java:776)
这是我的login.java:
软件包volleyjson.androidhive.info.myapplication;
导入android.app.Activity;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.View;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.TextView;
导入com.android.volley.AuthFailureError;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.VolleyLog;
导入com.android.volley.toolbox.JsonObjectRequest;
导入volleyjson.androidhive.info.myapplication.app.AppController;
导入org.json.JSONObject;
导入java.util.HashMap;
导入java.util.Map;
@SuppressWarnings(“ ALL”)
公共类登录扩展活动实现View.OnClickListener {
私有最终字符串TAG = login.class.getSimpleName();
私有静态最终字符串LOGIN_URL =“ http://www.nishkarsh.co.in/api/login”;
私有静态最终字符串KEY_EMAIL =“ email”;
私有ProgressDialog pDialog;
私人TextView t1;
私人TextView t2;
私人TextView t3;
私人EditText ed1;
私人按钮b1;
私人字符串电子邮件;
@Override
受保护的无效onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.login_dialogue);
t1 =(TextView)findViewById(R.id.textView1);
t2 =(TextView)findViewById(R.id.textView2);
t3 =(TextView)findViewById(R.id.textView3);
ed1 =(EditText)findViewById(R.id.RegEmail);
b1 =(按钮)findViewById(R.id.btnLogin);
b1.setOnClickListener(this);
ProgressDialog pDialog =新的ProgressDialog(this);
pDialog.setMessage(“ Loading ...”);
pDialog.setCancelable(false);
}
私人无效showProgressDialog(){
如果(!pDialog.isShowing())
pDialog.show();
}
私人void hideProgressDialog(){
如果(pDialog.isShowing())
pDialog.hide();
}
私人无效makeJsonObjReq(){
showProgressDialog();
JsonObjectRequest jsonObjReq =新的JsonObjectRequest(Request.Method.POST,
LOGIN_URL,空,
新的Response.Listener <JSONObject>(){
@Override
公共无效onResponse(JSONObject response){
Log.d(TAG,response.toString());
openProfile();
pDialog.hide();
}
},新的Response.ErrorListener(){
@Override
公共无效onErrorResponse(VolleyError错误){
VolleyLog.d(TAG,“ Error:” + error.getMessage());
hideProgressDialog();
}
}){
/ **
*传递一些请求头
* * /
@Override
公共Map <String,String> getHeaders()抛出AuthFailureError {
HashMap <String,String>标头=新的HashMap <>();
headers.put(“ Content-Type”,“ application / json”);
返回标题;
}
@Override
受保护的Map <String,String> getParams(){
Map <String,String>参数= new HashMap <>();
params.put(KEY_EMAIL,电子邮件);
返回参数
}
};
//将请求添加到请求队列
字符串tag_json_obj =“ jsonObjReq”;
AppController.getInstance()。addToRequestQueue(jsonObjReq,
tag_json_obj);
//取消请求
// ApplicationController.getInstance()。getRequestQueue()。cancelAll(tag_json_obj);
}
私人void openProfile(){
Intent intent = new Intent(login.this,MainActivity.class);
intent.putExtra(KEY_EMAIL,email);
startActivity(intent);
}
@Override
public void onClick(View v){
makeJsonObjReq();
}
}
答:ProgressDialog pDialog = new ProgressDialog(this);
pDialog.setMessage(“ Loading ...”);
pDialog.setCancelable(false);
重新声明pDialog有一个局部变量,使实例变量黯然失色并阻止对其进行初始化。因此,解决方案只能对其进行初始化。
pDialog =新的ProgressDialog(this);
pDialog.setMessage(“ Loading ...”);
pDialog.setCancelable(false);