【发布时间】:2017-03-09 20:51:09
【问题描述】:
我对 Android 很陌生,正在尝试从我的服务器上的 json 字符串填充列表视图。
我收到以下错误:
com.android.volley.ParseError: org.json.JSONException: Value ... of type 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":"Thursday","offertitle":"买一送一 (12pm-8pm)","offerdesc":"有效期:每天 12pm-8pm 当您在酒吧出示此页面时。谁喝过您买你就可以免费获得相同的饮料。某些产品线被排除在此促销活动之外。管理员自行决定排除某些日期。","imagename":"bogof","offercode":"none","status":"YES" },{"id":"11","day":"Thursday","offertitle":"2-4-1 Cocktails ","offerdesc":"有效期:每天下午 5-8 点,当您在酒吧。无论您购买哪种饮料,您都可以免费获得相同的饮料。包括的鸡尾酒用 * 表示。管理人员自行决定排除某些日期。","imagename":"cocktails","offercode":"none","status": "YES"},{"id":"18","day":"Thursday","offertitle":"本周葡萄酒 £21","offerdesc":"有效期:每周所选葡萄酒的每一天. 详情请咨询工作人员tes at 自行决定。","imagename":"wine","offercode":"none","status":"YES"},{"id":"25","day":"Thursday"," offertitle":"Unlimited Coffee £5","offerdesc":"有效期:5 英镑一杯咖啡,晚上 7 点前无限量喝咖啡。每位客户每天有效一次。不可转让。","imagename":"coffee","offercode":"none","status":"YES"},{"id":"32","day":"Thursday","offertitle" :"Single Vodka Redbull £5","offerdesc":"有效期:一周 7 天,全天,整夜。仅限 Smirnoff 伏特加,不能与任何其他优惠一起使用。","imagename":"redbull","offercode":"none","status":"YES"}] 类型为 org.json.JSONArray 不能转换为 JSONObject
【问题讨论】:
-
你确定 JSON 是正确的吗?
new JSONArray(response);应该没问题 -
嗨,是的,我很确定它是正确的,我对其进行了一些编辑以使其更易于阅读,但这是我从中提取的网址:barfibrenetwork.co.uk/backend/andriodoffers.php
-
您的代码运行良好,如果您打印 myFamily,您将获得 [买一送一,2-4-1 鸡尾酒]
-
请显示完整的 logcat 和方法定义