我正在尝试从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
这是什么问题?
答案 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);
}
}