我是Android的新手,我正在尝试从服务器上的json字符串填充列表视图。
我收到以下错误:
com.android.volley.ParseError:org.json.JSONException:类型为org.json.JSONArray的值...无法转换为JSONObject
尝试解析以下数组时:
[{
"id": "7",
"day": "Thursday",
"offertitle": "Buy One Get One Free",
"offerdesc": "Validity: Everyday ",
"imagename": "bogof",
"offercode": "none",
"status": "YES"
}, {
"id": "11",
"day": "Thursday",
"offertitle": "2-4-1 Cocktails ",
"offerdesc": "Validity: Everyday",
"imagename": "cocktails",
"offercode": "none",
"status": "YES"
}]
我正在使用此代码来解析json:
JSONArray jsonarray = new JSONArray(response);
for (int i=0; i<jsonarray.length(); i++){
JSONObject jsonProductObject = jsonarray.getJSONObject(i);
String name = jsonProductObject.getString("offertitle");
myFamily.add(name);
}
任何帮助表示赞赏
完整方法:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_offers);
final String PREFS_NAME = "userDefaults";
final ListView myListView = (ListView) findViewById(R.id.listViewOffers);
SharedPreferences settings_get = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
final String smartCode2 = settings_get.getString("smartCode2", "");
final ArrayList<String> myFamily = new ArrayList<>();
RequestQueue queue = Volley.newRequestQueue(offers.this);
String url = "http://www.barfibrenetwork.co.uk/backend/androidoffers.php?smartcode="+smartCode2;
// Request a string response from the provided URL.
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i("Response: ", response.toString());
try {
JSONArray jsonarray = new JSONArray(response);
for (int i=0; i<jsonarray.length(); i++){
JSONObject jsonProductObject = jsonarray.getJSONObject(i);
String name = jsonProductObject.getString("offertitle");
myFamily.add(name);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i("volley Request", error.toString());
}
});
// Add the request to the RequestQueue.
queue.add(jsObjRequest);
Log.i("REPLY:", myFamily.toString());
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myFamily);
myListView.setAdapter(arrayAdapter);
}
完整LogCat:
03-09 21:01:11.529 12696-12696 / com。**** I / volley请求:com.android.volley.ParseError:org.json.JSONException:Value [{“id”:“7” ,“day”:“星期四”,“offertitle”:“买一送一(下午12点到晚上8点)”,“offerdesc”:“有效期:每天下午12点到晚上8点,当你在酒吧显示这个页面。哪个喝过你给你免费获得相同的饮料。一些产品系列不在此促销活动中。由管理层自行决定排除某些日期。“,”imagename“:”bogof“,”offercode“:”none“,”status“:”YES“ },{“id”:“11”,“day”:“Thursday”,“offertitle”:“2-4-1 Cocktails”,“offerdesc”:“有效期:每天下午5-8点,当你在吧。你买过的饮料,你可以免费获得同样的饮料。包含的鸡尾酒标有*。不包括管理自行决定的某些日期。“,”imagename“:”鸡尾酒“,”offercode“:”none“,”status“: “是”},{“id”:“18”,“day”:“Thursday”,“offertitle”:“本周葡萄酒£21”,“offerdesc”:“有效期:每周选择的葡萄酒请向工作人员询问详细信息管理自由裁量权的日期。“,”imagename“:”wine“,”offercode“:”none“,”status“:”YES“},{”id“:”25“,”day“:”Thursday“,” offertitle“:”无限咖啡£5“,”offerdesc“:”有效期:一杯咖啡5英镑,晚上7点前可获无限量咖啡。每位客户每天有效一次。不可转让。“,”imagename“:”coffee“,”offercode“:”none“,”status“:”YES“},{”id“:”32“,”day“:”Thursday“,”offertitle“ :“单伏特加Redbull£5”,“offerdesc”:“有效期:每周7天,全天,整夜。仅限Smirnoff Vodka,不能与任何其他优惠同时使用。“,”imagename“:”redbull“,”offercode“:”none“,”status“:”YES“}]类型org.json.JSONArray不能转换为JSONObject
答案 0 :(得分:1)
您正在使用JsonObjectRequest,但json中没有JSONObject。
试一试。 我希望它有所帮助:D
代码:
pow
答案 1 :(得分:0)
Volley
图书馆已弃用我的建议是切换到OkHttp
图书馆
Volley
的
查看示例,此方法采用Url和Fetch Json响应。
public static String JsonResponse(URL url) throws IOException {
OkHttpClient client = new OkHttpClient();
okhttp3.Request request = new okhttp3.Request.Builder()
.url(url)
.build();
Response response = client.newCall(request).execute();
return response.body().string();
}
注意:强>
此库在主线程中工作,因此您应使用AsyncTask
<强>更新强>
查看官方存储库Here