大佬教程收集整理的这篇文章主要介绍了android – org.json.JSONArray无法转换为JSONObject(从webservice填充微调器),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经查看了与此异常相关的相关问题,但我仍然无法提出解决方案.
这是来自webservice的Json数组
[ { "created_at":"2013-03-18T21:30:19Z","id":1,"name":"latte","price":"5","updated_at":"2013-03-18T21:30:19Z" },{ "created_at":"2013-03-18T21:30:41Z","id":11,"name":"black","price":"2","updated_at":"2013-03-18T21:30:41Z" },{ "created_at":"2013-03-19T09:38:31Z","id":21,"name":"Tea","updated_at":"2013-03-19T09:39:02Z" } ]
这是使用解析器作为后台任务的类的相关部分
public class SpinnerDemo extends Activity { //JSON node names private static final String TAG_DATA = "data"; private static final String TAG_CREATED_AT = "created_at"; private static final String TAG_ID_DRINK = "id"; private static final String TAG_NAME = "name"; private static final String TAG_PRICE = "price"; private static final String TAG_updatED_AT = "updated_at"; private static final String MAP_API_URL = "http://notTheActualURl.com/drinks.json"; private BACkGroundTask bgt; Spinner drinkField; ArrayList<Drink> drinkList = new ArrayList<Drink>(); /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.spinner_main); buildDrinkDropDown(); } private void buildDrinkDropDown() { List<NameValuePair> apiParams = new ArrayList<NameValuePair>(1); apiParams.add(new BasicNameValuePair("call","drinkList")); bgt = new BACkGroundTask(MAP_API_URL,"GET",apiParams); try { JSONObject drinkJSON = bgt.execute().get(); // GetTing Array of drinks JSONArray drinks = drinkJSON.getJSONArray(tag_DATA); // looping through All drinks for (int i = 0; i < drinks.length(); i++) { JSONObject d = drinks.getJSONObject(i); // Storing each json item in variable String id = d.getString(tag_ID_DRINK); String createdAt = d.getString(tag_CREATED_AT); String updatedAt = d.getString(tag_updatED_AT); String price = d.getString(tag_PRICE); String name = d.getString(tag_Name); // add drink drinkList.add(new Drink( createdAt,id,name,price,updatedAt )); }
这是进行解析的实际类
package com.android.main; import java.io.bufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import org.apache.http.httpentity; import org.apache.http.httpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.httpGet; import org.apache.http.client.methods.httpPost; import org.apache.http.client.utilS.URLEncodedUtils; import org.apache.http.impl.client.DefaulthttpClient; import org.json.JSONException; import org.json.JSONObject; import android.os.AsyncTask; import android.util.Log; public class BACkGroundTask extends AsyncTask<String,String,JSONObject> { List<NameValuePair> postparams = new ArrayList<NameValuePair>(); String URL = null; String method = null; static InputStream is = null; static JSONObject jObj = null; static String json = ""; public BACkGroundTask(String url,String method,List<NameValuePair> params) { thiS.URL = url; this.postparams = params; this.method = method; } @Override protected JSONObject doInBACkground(String... params) { // TODO Auto-generated method stub // Making http request try { // Making http request // check for request method if (method.equals("POST")) { // request method is POST // defaulthttpClient DefaulthttpClient httpClient = new DefaulthttpClient(); httpPost httpPost = new httpPost(URL); httpPost.setEntity(new UrlEncodedFormEntity(postparams)); httpResponse httpResponse = httpClient.execute(httpPost); httpentity httpentity = httpResponse.getEntity(); is = httpentity.getContent(); } else if (method == "GET") { // request method is GET DefaulthttpClient httpClient = new DefaulthttpClient(); String paramString = URLEncodedUtils .format(postparams,"utf-8"); URL += "?" + paramString; httpGet httpGet = new httpGet(URL); httpResponse httpResponse = httpClient.execute(httpGet); httpentity httpentity = httpResponse.getEntity(); is = httpentity.getContent(); } } catch (UnsupportedEncodingException E) { e.printStackTrace(); } catch (ClientProtocolException E) { e.printStackTrace(); } catch (IOException E) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is,"utf-8"),8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception E) { Log.e("Buffer Error","Error converTing result " + e.toString()); } // try parse the String to a JSON object try { jObj = new JSONObject(json); } catch (JSONException E) { Log.e("JSON Parser","Error parsing data TEST " + e.toString()); } // return JSON String return jObj; } }
这是log cat的例外
03-26 11:32:49.637: E/JSON Parser(714): Error parsing data TEST org.json.JSONException: Value [{"id":1,"created_at":"2013-03-18T21:30:19Z","updated_at":"2013-03-18T21:30:19Z","name":"latte"},{"id":11,"created_at":"2013-03-18T21:30:41Z","updated_at":"2013-03-18T21:30:41Z","name":"black"},{"id":21,"created_at":"2013-03-19T09:38:31Z","updated_at":"2013-03-19T09:39:02Z","name":"Tea"}] of type org.json.JSONArray cAnnot be converted to JSONObject
另一个错误显示spinnerDemo类中的空点异常,尽管我认为这是前一个异常的结果
03-26 11:32:49.707: E/AndroidRuntime(714): java.lang.RuntimeException: Unable to start activity ComponenTinfo{Com.android.main/com.android.main.SpinnerDemo}: java.lang.NullPointerException
任何建议或帮助将非常感谢
以上是大佬教程为你收集整理的android – org.json.JSONArray无法转换为JSONObject(从webservice填充微调器)全部内容,希望文章能够帮你解决android – org.json.JSONArray无法转换为JSONObject(从webservice填充微调器)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。