我是Android编程的新手,我使用Google Volley库来调用API,现在我的Android代码存在一些问题。发生了JSON错误 here
这是我的代码:
private void loadJson()
{
pd.setMessage("Mengambil Data");
pd.setCancelable(false);
pd.show();
JsonArrayRequest reqData = new JsonArrayRequest(Request.Method.POST, ServerAPI.URL_DATA,null,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
pd.cancel();
Log.d("volley","response : " + response.toString());
for(int i = 0 ; i < response.length(); i++)
{
try {
JSONObject data = response.getJSONObject(i);
ModelData md = new ModelData();
md.setNpm(data.getString("npm"));
md.setNama(data.getString("nama"));
md.setProdi(data.getString("prodi"));
md.setFakultas(data.getString("fakultas"));
mItems.add(md);
} catch (JSONException e) {
e.printStackTrace();
}
}
mAdapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pd.cancel();
Log.d("volley", "error : " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(reqData);
}
答案 0 :(得分:2)
您在JSONArryRequest中传递了错误的参数,您需要传递URL(String)和您的响应侦听器。
JsonArrayRequest request = new JsonArrayRequest(Request.Method.POST,"http://example.com/feed.json",
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray jsonArray) {
//Your code
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Toast.makeText(MainActivity.this, "Unable to fetch data: " + volleyError.getMessage(), Toast.LENGTH_SHORT).show();
}
});
答案 1 :(得分:0)
删除Request.Method.POST
的第一个参数。 JsonArrayRequest
对象在构造函数中有三个参数。 URL
,Listener
,ErrorListener
。
JsonArrayRequest req = new JsonArrayRequest(url,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
答案 2 :(得分:0)
您似乎将错误的参数传递给JsonArrayRequest()
。
根据找到的文档here,方法签名为public JsonArrayRequest(String url, Response.Listener<JSONArray> listener, Response.ErrorListener errorListener)
,您正在通过(int, String, null, Response.Listener<JSONArray>, Response.ErrorListener)
。
删除Request.Method.POST
和null
,你应该好好去。
答案 3 :(得分:0)
JsonArrayRequest中的参数是错误的(您必须为URL传递一个String)。 尝试这样的事情:
private void loadJson()
{
pd.setMessage("Mengambil Data");
pd.setCancelable(false);
pd.show();
JsonArrayRequest reqData = new JsonArrayRequest(ServerAPI.URL_DATA,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
pd.cancel();
Log.d("volley","response : " + response.toString());
for(int i = 0 ; i < response.length(); i++)
{
try {
JSONObject data = response.getJSONObject(i);
ModelData md = new ModelData();
md.setNpm(data.getString("npm"));
md.setNama(data.getString("nama"));
md.setProdi(data.getString("prodi"));
md.setFakultas(data.getString("fakultas"));
mItems.add(md);
} catch (JSONException e) {
e.printStackTrace();
}
}
mAdapter.notifyDataSetChanged();
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pd.cancel();
Log.d("volley", "error : " + error.getMessage());
}
});
AppController.getInstance().addToRequestQueue(reqData);
}