2015-10-14 102 views
-1

我是android开发中的新手。我面临的一个错误,如: - JSON对象不能在jsonArray被转换: -JSONObject无法转换为Android中的JSONArray

我ProductInner.java:

public class ProductInner extends AppCompatActivity { 

TextView textView; 
ImageView imageView; 
LinearLayout linearLayout; 
String s,s1; 
List<String> mainImage = new ArrayList<>(); 
List<String> outerlist = new ArrayList<>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.product_inner); 

    textView = (TextView)findViewById(R.id.product_inner_page_product_name); 
    imageView = (ImageView)findViewById(R.id.product_inner_page_product_main_image); 
    linearLayout = (LinearLayout)findViewById(R.id.sub_images_show_section); 

    new ProductInnerDisplay().execute("http://opencart.codeniques.com/shopping/?route=feed/web_api/product&id=80&key=test123$"); 
} 

public class ProductInnerDisplay extends AsyncTask<String,Void,Void>{ 

    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     dialog = new ProgressDialog(ProductInner.this); 
     dialog.show(); 
    } 

    @Override 
    protected Void doInBackground(String... params) { 
     try { 
      HttpClient client = new DefaultHttpClient(); 
      HttpPost post = new HttpPost(params[0]); 
      HttpResponse response = client.execute(post); 

      int status = response.getStatusLine().getStatusCode(); 

      if(status==200){ 

       HttpEntity entity = response.getEntity(); 
       String data = EntityUtils.toString(entity); 

       JSONObject jsonObject = new JSONObject(data); 
       JSONArray jsonArray = jsonObject.getJSONArray("rproducts"); 
       JSONArray jsonArray1 = jsonObject.getJSONArray("productdata"); 


       for(int i=0;i<jsonArray.length();i++){ 

        JSONObject jsonObject1 = jsonArray.getJSONObject(i); 
        List<String> list = new ArrayList<>(); 
        list.add(jsonObject1.getString("product_id")); 
        list.add(jsonObject1.getString("thumb")); 
        list.add(jsonObject1.getString("name")); 
        list.add(jsonObject1.getString("price")); 
        list.add(jsonObject1.getString("rating")); 
        list.add(jsonObject1.getString("reviews")); 
        list.add(jsonObject1.getString("href")); 

        Log.d("json parse",""); 
       } 
       for(int i=0;i<jsonArray1.length();i++){ 
        Log.d("length of",jsonArray1.length()+""); 

        JSONObject jsonObject1 = jsonArray1.getJSONObject(i); 

        List<String> list = new ArrayList<>(); 

        list.add(jsonObject1.getString("id")); 
        // list.add(jsonObject1.getString("name")); 
        s=jsonObject1.getString("name"); 
        list.add(jsonObject1.getString("model")); 
        list.add(jsonObject1.getString("reward")); 
        list.add(jsonObject1.getString("points")); 
      //  list.add(jsonObject1.getString("image")); 
        outerlist.add(jsonObject1.getString("image")); 
        JSONArray jsonArray2 = jsonObject1.getJSONArray("images"); 

        for(int j=0;j<jsonArray2.length();j++){ 

         List<String> list1 = new ArrayList<>(); 
         Log.d("i am here",""); 
         mainImage.add(jsonArray2.getString(j)); 
         Log.d("i am here next", ""); 

         // list1.add(jsonArray2.getString(j)); 
        } 
        list.add(jsonObject1.getString("price")); 
        Log.d("i am here 1", ""); 

        JSONArray jsonArray3 = jsonObject1.getJSONArray("options"); 

        for(int j=0;j<jsonArray3.length();j++){ 

         JSONObject jsonObject2 = jsonArray3.getJSONObject(j); 

         List<String> list1 = new ArrayList<>(); 

         list1.add(jsonObject2.getString("product_option_id")); 
         list1.add(jsonObject2.getString("option_id")); 
         list1.add(jsonObject2.getString("name")); 
         list1.add(jsonObject2.getString("type")); 

         JSONArray jsonArray4 = jsonObject2.getJSONArray("option_value"); 

         for(int k=0;k<jsonArray4.length();k++){ 

          JSONObject jsonObject3 = jsonArray4.getJSONObject(k); 

          List<String> list2 = new ArrayList<>(); 

          list2.add(jsonObject3.getString("product_option_value_id")); 
          list2.add(jsonObject3.getString("option_value_id")); 
          list2.add(jsonObject3.getString("name")); 
          list2.add(jsonObject3.getString("image")); 
          list2.add(jsonObject3.getString("price")); 
          list2.add(jsonObject3.getString("price_prefix")); 
         } 
         list1.add(jsonObject2.getString("required")); 
        } 
        list.add(jsonObject1.getString("minimum")); 
        list.add(jsonObject1.getString("newprice")); 
        list.add(jsonObject1.getString("qty")); 
        list.add(jsonObject1.getString("rating")); 
        list.add(jsonObject1.getString("description")); 

        JSONArray jsonArray4 = jsonObject1.getJSONArray("attribute_groups"); 

        for(int j=0;j<jsonArray4.length();j++){ 

         JSONObject jsonObject2 = jsonArray4.getJSONObject(j); 

         List<String> list1 = new ArrayList<>(); 

         list1.add(jsonObject2.getString("attribute_group_id")); 
         list1.add(jsonObject2.getString("name")); 

         JSONArray jsonArray5 = jsonObject2.getJSONArray("attribute"); 

         for(int k=0;k<jsonArray5.length();k++){ 

          JSONObject jsonObject3 = jsonArray5.getJSONObject(k); 

          List<String> list2 = new ArrayList<>(); 

          list2.add(jsonObject3.getString("attribute_id")); 
          list2.add(jsonObject3.getString("name")); 
          list2.add(jsonObject3.getString("text")); 
         } 
        } 
       } 
      } 
     }catch (IOException |JSONException e){ 
      Log.e("Error",e.getMessage()); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
     dialog.dismiss(); 
     // super.onPostExecute(aVoid); 
     // new SetImageView(image).execute(thumbDiscount.get(j)); 
     textView.setText(s); 
     new SetImage(imageView).execute(s1); 
     for(int i=0;i<mainImage.size();i++){ 

      ImageView imageView = new ImageView(ProductInner.this); 
      new SetImage(imageView).execute(mainImage.get(i)); 

      linearLayout.addView(imageView, i); 
     } 
    } 
} 

public class SetImage extends AsyncTask<String,Void,Bitmap>{ 

    ImageView bitmap; 


    public SetImage(ImageView bitmap){ 
     this.bitmap = bitmap; 
    } 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

    } 

    @Override 
    protected Bitmap doInBackground(String... params) { 

     String urldisplay = params[0]; 
     Bitmap bitmap = null; 
     try{ 
      InputStream in = new java.net.URL(urldisplay).openStream(); 
      bitmap = BitmapFactory.decodeStream(in); 
     }catch (IOException e) { 
      e.getMessage(); 
      // Log.e("Error :",e.getMessage()); 
     } 
     return bitmap; 
    } 

    @Override 
    protected void onPostExecute(Bitmap result) { 
     bitmap.setImageBitmap(result); 
     //super.onPostExecute(bitmap); 
    } 

} 

}

My Json Array Link is here

我的logcat显示此错误: -

E/Error: Value {"id":"80","name":"Bag_80","model":"
","reward":"0","points":"0","image":"http://opencart.codeniques.com/shopping/image/cache/data/product/bag_81_1-1000x1000.JPG","images":["http://opencart.codeniques.com/shopping/image/cache/data/product/bag_80_2-80x80.JPG"],"price":1175,"minimum":"1","newprice":1163.25,"qty":4,"rating":0,"description":""} at productdata of type org.json.JSONObject cannot be converted to JSONArray`

+0

你能告诉堆栈跟踪? – erosb

+0

JSON中的productdata'键在哪里? –

+0

第二个数组名称是产品数据 –

回答

2

productdata不是JSONArray而是一个JSONObject,所以你必须改变

JSONArray jsonArray1 = jsonObject.getJSONArray("productdata"); 

JSONObject jsonObject1 = jsonObject.getJSONObjct("productdata"); 
+0

我发现我的错误非常感谢@Maloubobola –

+0

不客气;) – ThomasThiebaud

1

如日志:

productdata of type org.json.JSONObject cannot be converted to JSONArray 

意味着productdata密钥用于JSONObject响应服务器json而不是JSONArray

因此,获得productdata关键值的JSONObject代替JSONArray:

JSONObject jsonObject1 = jsonObject.getJSONObject("productdata"); 
0

您正在将productData作为JSONArray获取,而它是JsonObje CT其中包含图像的JsonArray我可以在JSON链接看到您提供

JSONArray jsonArray1 = jsonObject.getJSONArray("productdata"); 

该行代码应该是一个JSONObject

相关问题