尝试解析json文件时出现空指针异常

时间:2019-07-15 12:51:38

标签: android android-volley

我正在尝试从android studio中的json文件中解析一些信息。我已经按照教程进行操作,但是在尝试从json文件中获取某些信息时遇到了空指针异常错误。

这是我的parseJson函数:

 private void parseJson() {
    String url = "https://api.myjson.com/bins/108hcz";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("results");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject person = jsonArray.getJSONObject(i);

                    String name = person.getString("gender");
                    Log.e ("NAME:", name);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    mQueue.add(request);
}

这是我收到的错误:

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.pogolemotoproektce/com.example.pogolemotoproektce.Activities.HomeActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'com.android.volley.Request com.android.volley.RequestQueue.add(com.android.volley.Request)' on a null object reference

此行的原因:

mQueue.add(request);

我的JSON文件: http://myjson.com/108hcz

这是什么问题?

1 个答案:

答案 0 :(得分:1)

mQueue未初始化,这就是为什么您会得到空指针异常的原因,因此请在使用前初始化mQueue

 mQueue = Volley.newRequestQueue(your_context);

或者您可以直接通过

调用添加
Volley.newRequestQueue(your_context).add(request);

我已经像下面那样使用

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String url = "https://api.myjson.com/bins/108hcz";
    JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("results");
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject person = jsonArray.getJSONObject(i);

                    String name = person.getString("gender");
                    Log.e("NAME:", name);
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });

    Volley.newRequestQueue(this).add(request);
}
}