Java Android Studio 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

我一直在学习Volley库解析JSON的基础知识,我试图通过输入两个参数来使用JSON对象解析进行登录,但最终得到了NullPointerException, 这是我的代码:

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