Java Android Studio JSON解析使用截取:获取NullPointerException
我一直在学习Volley库解析JSON的基础知识,我试图通过输入两个参数来使用JSON对象解析进行登录,但最终得到了NullPointerException, 这是我的代码:Java Android Studio JSON解析使用截取:获取NullPointerException,java,android,json,android-volley,Java,Android,Json,Android Volley,我一直在学习Volley库解析JSON的基础知识,我试图通过输入两个参数来使用JSON对象解析进行登录,但最终得到了NullPointerException, 这是我的代码: public class MainActivity extends Activity { // json object response url private String urlJsonObj = "agendamaid.com/api/v1/login"; // json array re
public class MainActivity extends Activity {
// json object response url
private String urlJsonObj = "agendamaid.com/api/v1/login";
// json array response url
private String urlJsonArry = "http://api.androidhive.info/volley/person_array.json";
private static String TAG = MainActivity.class.getSimpleName();
private Button btnMakeObjectRequest, btnMakeArrayRequest;
// Progress dialog
private ProgressDialog pDialog;
private TextView txtResponse;
// temporary string to show the parsed response
private String jsonResponse;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMakeObjectRequest = (Button) findViewById(R.id.btnObjRequest);
btnMakeArrayRequest = (Button) findViewById(R.id.btnArrayRequest);
txtResponse = (TextView) findViewById(R.id.txtResponse);
pDialog = new ProgressDialog(this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
btnMakeObjectRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// making json object request
makeJsonObjectRequest();
}
});
btnMakeArrayRequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// making json array request
makeJsonArrayRequest();
}
});
}
/**
* Method to make json object request where json response starts wtih {
* */
private void makeJsonObjectRequest() {
showpDialog();
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
urlJsonObj, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, response.toString());
try {
// Parsing json object response
// response will be a json object
JSONObject payload = response.getJSONObject("payload");
String key = payload.getString("key");
String userID= payload.getString("userID");
jsonResponse = "";
jsonResponse += "Key: " + key + "\n\n";
jsonResponse += "userID: " + userID + "\n\n";
txtResponse.setText(jsonResponse);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
hidepDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
// hide the progress dialog
hidepDialog();
}
}){
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("email", "aldi@gmail.com");
params.put("password", "testingpassword");
return params;
}
};
// Adding request to request queue
AppController.getInstance().addToRequestQueue(jsonObjReq);
}
/**
* Method to make json array request where response starts with [
* */
private void makeJsonArrayRequest() {
showpDialog();
JsonArrayRequest req = new JsonArrayRequest(urlJsonArry,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString());
try {
// Parsing json array response
// loop through each json object
jsonResponse = "";
for (int i = 0; i < response.length(); i++) {
JSONObject person = (JSONObject) response
.get(i);
String name = person.getString("name");
String email = person.getString("email");
JSONObject phone = person
.getJSONObject("phone");
String home = phone.getString("home");
String mobile = phone.getString("mobile");
jsonResponse += "Name: " + name + "\n\n";
jsonResponse += "Email: " + email + "\n\n";
jsonResponse += "Home: " + home + "\n\n";
jsonResponse += "Mobile: " + mobile + "\n\n\n";
}
txtResponse.setText(jsonResponse);
} catch (JSONException e) {
e.printStackTrace();
Toast.makeText(getApplicationContext(),
"Error: " + e.getMessage(),
Toast.LENGTH_LONG).show();
}
hidepDialog();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
VolleyLog.d(TAG, "Error: " + error.getMessage());
Toast.makeText(getApplicationContext(),
error.getMessage(), Toast.LENGTH_SHORT).show();
hidepDialog();
}
});
// Adding request to request queue
AppController.getInstance().addToRequestQueue(req);
}
private void showpDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hidepDialog() {
if (pDialog.isShowing())
pDialog.dismiss();
}
公共类MainActivity扩展活动{
//json对象响应url
私有字符串urlJsonObj=“agendamaid.com/api/v1/login”;
//json数组响应url
专用字符串urlJsonArry=”http://api.androidhive.info/volley/person_array.json";
私有静态字符串标记=MainActivity.class.getSimpleName();
专用按钮btnMakeObjectRequest、btnMakeArrayRequest;
//进度对话框
私人对话;
私有文本视图txtResponse;
//显示已解析响应的临时字符串
私有字符串jsonResponse;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnMakeObjectRequest=(按钮)findViewById(R.id.btnObjRequest);
btnMakeArrayRequest=(按钮)findViewById(R.id.btnArrayRequest);
txtResponse=(TextView)findViewById(R.id.txtResponse);
pDialog=新建进度对话框(此对话框);
setMessage(“请稍候…”);
pDialog.setCancelable(假);
btnMakeObjectRequest.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//发出json对象请求
makeJsonObjectRequest();
}
});
btnMakeArrayRequest.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//发出json数组请求
makeJsonArrayRequest();
}
});
}
/**
*方法在json响应启动时发出json对象请求{
* */
私有void makeJsonObjectRequest(){
showpDialog();
JsonObjectRequest JSONObjectReq=新的JsonObjectRequest(Method.POST,
urlJsonObj,null,新响应。侦听器(){
@凌驾
公共void onResponse(JSONObject响应){
Log.d(TAG,response.toString());
试一试{
//解析json对象响应
//响应将是一个json对象
JSONObject有效载荷=response.getJSONObject(“有效载荷”);
String key=payload.getString(“key”);
字符串userID=payload.getString(“userID”);
jsonResponse=“”;
jsonResponse+=“键:”+Key+“\n\n”;
jsonResponse+=“userID:+userID+”\n\n;
setText(jsonResponse);
}捕获(JSONException e){
e、 printStackTrace();
Toast.makeText(getApplicationContext(),
“错误:”+e.getMessage(),
Toast.LENGTH_LONG).show();
}
hidepDialog();
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
d(标记“Error:+Error.getMessage());
Toast.makeText(getApplicationContext(),
错误.getMessage(),Toast.LENGTH_SHORT).show();
//隐藏进度对话框
hidepDialog();
}
}){
@凌驾
受保护的映射getParams(){
Map params=新的HashMap();
参数put(“电子邮件”)aldi@gmail.com");
参数put(“密码”、“测试密码”);
返回参数;
}
};
//将请求添加到请求队列
AppController.getInstance().addToRequestQueue(JSONOBJEQ);
}
/**
*方法发出json数组请求,其中响应以[
* */
私有void makeJsonArrayRequest(){
showpDialog();
JsonArrayRequest req=新的JsonArrayRequest(urlJsonArry,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
Log.d(TAG,response.toString());
试一试{
//解析json数组响应
//循环遍历每个json对象
jsonResponse=“”;
对于(int i=0;i> 10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: FATAL EXCEPTION: main
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: java.lang.NullPointerException
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at com.android.volley.Request.<init>(Request.java:136)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at com.android.volley.toolbox.JsonRequest.<init>(JsonRequest.java:58)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at com.android.volley.toolbox.JsonObjectRequest.<init>(JsonObjectRequest.java:47)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at vin.cobavolley.MainActivity$5.<init>(MainActivity.java:129)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at vin.cobavolley.MainActivity.makeJsonObjectRequest(MainActivity.java:88)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at vin.cobavolley.MainActivity.access$000(MainActivity.java:29)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at vin.cobavolley.MainActivity$1.onClick(MainActivity.java:66)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.view.View.performClick(View.java:4204)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.view.View$PerformClick.run(View.java:17355)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:725)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:92)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.os.Looper.loop(Looper.java:137)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5041)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:511)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
10-18 02:38:49.637 4154-4154/vin.cobavolley E/AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
10-18 02:43:49.673 4154-4154/? I/Process: Sending signal. PID: 4154 SIG: 9