Android Studio JSON解析错误会引发JSONException

时间:2017-06-29 23:59:36

标签: java android json parsing

我正在尝试解析此JSON并在从jsonBranch返回到for语句时抛出JSONException错误 我不知道是什么导致该错误导致应用程序崩溃。 我尝试更改for句子的参数,但它确实有效。

JSON

[
   {
      "idBranchRestaurant":1,
      "idRestaurant":1,
      "restaurant":{
         "idRestaurant":1,
         "name":"Don Julio",
         "description":"La mejor parrilla para cualquier turista",
         "socialNetwork":[
            {
               "idSocialNetworkRestaurant":1,
               "idRestaurant":1,
               "idTypeSocialNetwork":1,
               "value":"www.donjulio.com.ar",
               "type":{
                  "idTypeSocialNetwork":1,
                  "name":"Website",
                  "icon":"website_ic.jpg"
               }
            }
         ]
      },
      "idRangePriceBranch":1,
      "RangePrice":{
         "idRangePriceBranch":1,
         "idBranchRestaurant":1,
         "minimum":300,
         "maximum":600
      },
      "name":"Paraguay",
      "photo":[
         {
            "idBranchPhoto":4,
            "idBranchRestaurant":1,
            "idUser":0,
            "photo":"entradaDonJulio.jpg"
         }
      ],
      "cuisine":[
         {
            "idCousine":1,
            "name":"Parrilla"
         }
      ],
      "menu":[
         {
            "idTypeMenu":1,
            "name":"Mediodia",
            "idBranchRestaurant":1,
            "plates":null
         },
         {
            "idTypeMenu":2,
            "name":"Noche",
            "idBranchRestaurant":1,
            "plates":null
         }
      ],
      "filter":[
         {
            "idTypeFilter":2,
            "name":"Family",
            "icon":"family_ic.jpg"
         }
      ],
      "service":[
         {
            "idService":2,
            "name":"Comida para celiacos"
         },
         {
            "idService":1,
            "name":"Wifi"
         }
      ],
      "timetable":[
         {
            "idTimetableBranch":11,
            "idBranchRestaurant":1,
            "idDay":2,
            "openingHour":"19 hs",
            "closingHour":"24 hs",
            "day":{
               "idDay":2,
               "name":"Tuesday"
            }
         },
         {
            "idTimetableBranch":10,
            "idBranchRestaurant":1,
            "idDay":2,
            "openingHour":"12 hs",
            "closingHour":"16 hs",
            "day":{
               "idDay":2,
               "name":"Tuesday"
            }
         },
         {
            "idTimetableBranch":9,
            "idBranchRestaurant":1,
            "idDay":1,
            "openingHour":"19 hs",
            "closingHour":"24 hs",
            "day":{
               "idDay":1,
               "name":"Monday"
            }
         },
         {
            "idTimetableBranch":8,
            "idBranchRestaurant":1,
            "idDay":1,
            "openingHour":"12 hs ",
            "closingHour":"16 hs",
            "day":{
               "idDay":1,
               "name":"Monday"
            }
         },
         {
            "idTimetableBranch":12,
            "idBranchRestaurant":1,
            "idDay":3,
            "openingHour":"12 hs",
            "closingHour":"16 hs",
            "day":{
               "idDay":3,
               "name":"Wednesday"
            }
         },
         {
            "idTimetableBranch":13,
            "idBranchRestaurant":1,
            "idDay":3,
            "openingHour":"19 hs ",
            "closingHour":"24 hs",
            "day":{
               "idDay":3,
               "name":"Wednesday"
            }
         },
         {
        "idTimetableBranch":14,
        "idBranchRestaurant":1,
        "idDay":4,
        "openingHour":"12 hs",
        "closingHour":"16 hs",
        "day":{
           "idDay":4,
           "name":"Thursday"
        }
     },
     {
        "idTimetableBranch":15,
        "idBranchRestaurant":1,
        "idDay":4,
        "openingHour":"19 hs",
        "closingHour":"24 hs",
        "day":{
           "idDay":4,
           "name":"Thursday"
        }
     },
     {
        "idTimetableBranch":16,
        "idBranchRestaurant":1,
        "idDay":5,
        "openingHour":"12 hs",
        "closingHour":"16 hs ",
        "day":{
           "idDay":5,
           "name":"Friday"
        }
     },
     {
        "idTimetableBranch":17,
        "idBranchRestaurant":1,
        "idDay":5,
        "openingHour":"19 hs ",
        "closingHour":"2 hs",
        "day":{
           "idDay":5,
           "name":"Friday"
        }
     }
  ],
  "latitude":"87654322",
  "longitude":"23456789",
  "averageCalification":4.0,
  "promotion":[
     {
        "idPromotion":3,
        "idTypePromotion":2,
        "code":"DIADELPADRE",
        "name":"Dia Del Padre Regalo",
        "startDate":"2017-06-26T00:00:00",
        "expireDate":"2017-06-18T00:00:00",
        "description":"postre de regalo",
        "value":100,
        "type":{
           "idTypePromotion":2,
           "name":"Gift"
        }
     }
  ]


 }
]

Android Class

private class BranchGetAll extends AsyncTask<String, Void, ArrayList<Branch>> {

    protected void onPostExecute(ArrayList<Branch> datos) {
        super.onPostExecute(datos);
        if (datos != null){
            listRestaurant.setVisibility(View.VISIBLE);
            resAdapter.setmRestaurantData(datos);

        } else {
            Toast.makeText(main,"Error connection database", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected ArrayList<Branch> doInBackground(String... parametros) {
        String url = parametros[0] + parametros[1] + "/" + parametros[2];
        int limit = Integer.parseInt(parametros[1]);

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        String resultado;
        try {
            Response response = client.newCall(request).execute();  // Llamo al API Rest servicio1 en ejemplo.com
            resultado = response.body().string();
        } catch (IOException e) {
            Log.d("Error",e.getMessage());             // Error de Network
            return null;
        }

        try{
            ArrayList<Branch> branchList = new ArrayList<>();
            JSONArray jsonBranch = new JSONArray(resultado);

            Branch b = new Branch();

            // se traba al realizar segunda vuelta
            for (int i = 0; i < jsonBranch.length(); i++){
                JSONObject obj = jsonBranch.getJSONObject(i);
                b.idBranch = obj.getInt("idBranchRestaurant");
                JSONObject resto = obj.getJSONObject("restaurant");
                b.restaurant.idRestaurant = resto.getInt("idRestaurant");
                b.restaurant.name = resto.getString("name");
                b.restaurant.description = resto.getString("description");
                JSONArray socialNetwork = resto.getJSONArray("socialNetwork");
                ArrayList<SocialNetwork> list = new ArrayList<SocialNetwork>();
                for (int j = 0; j < socialNetwork.length(); j++){
                    JSONObject social = socialNetwork.getJSONObject(j);
                    SocialNetwork sn = new SocialNetwork();
                    sn.idSocialNetwork = social.getInt("idSocialNetworkRestaurant");
                    JSONObject typeSocial = social.getJSONObject("type");
                    sn.name = typeSocial.getString("name");
                    sn.value = social.getString("value");
                    list.add(sn);
                }
                b.restaurant.social = list;
                JSONObject rangeObj = obj.getJSONObject("RangePrice");
                b.range.idRangePrice = rangeObj.getInt("idRangePriceBranch");
                b.range.maximum = rangeObj.getInt("maximum");
                b.range.minimum = rangeObj.getInt("minimum");
                b.name = obj.getString("name");
                JSONArray photo = obj.getJSONArray("photo");
                ArrayList<PhotoBranch> listPhoto = new ArrayList<PhotoBranch>();
                for (int k = 0; k < photo.length(); k++){
                    JSONObject photoObj = photo.getJSONObject(k);
                    PhotoBranch p = new PhotoBranch();
                    p.idPhoto = photoObj.getInt("idBranchPhoto");
                    p.idUser = photoObj.getInt("idUser");
                    p.photo = photoObj.getString("photo");
                    listPhoto.add(p);
                }
                b.photo = listPhoto;
                JSONArray cuisine = obj.getJSONArray("cuisine");
                ArrayList<Cuisine> listCuisine = new ArrayList<Cuisine>();
                for (int c = 0; c < cuisine.length(); c++){
                    JSONObject cuisineObj = cuisine.getJSONObject(c);
                    Cuisine cn = new Cuisine();
                    cn.idCuisine = cuisineObj.getInt("idCousine");
                    cn.name = cuisineObj.getString("name");
                    listCuisine.add(cn);
                }
                b.cuisine = listCuisine;
                JSONArray menu = obj.getJSONArray("menu");
                ArrayList<Menu> listMenu = new ArrayList<Menu>();
                for (int m = 0; m < menu.length(); m++){
                    JSONObject menuObj = menu.getJSONObject(m);
                    Menu mn = new Menu();
                    mn.idMenu = menuObj.getInt("idTypeMenu");
                    mn.type = menuObj.getString("name");
                }
                JSONArray filter = obj.getJSONArray("filter");
                ArrayList<Filter> listFilter = new ArrayList<Filter>();
                for (int f = 0; f < filter.length(); f++){
                    JSONObject filterObj = filter.getJSONObject(f);
                    Filter ft = new Filter();
                    ft.idFilter = filterObj.getInt("idTypeFilter");
                    ft.name = filterObj.getString("name");
                    ft.icon = filterObj.getString("icon");
                    listFilter.add(ft);
                }
                b.filter = listFilter;
                JSONArray service = obj.getJSONArray("service");
                ArrayList<Service> listService = new ArrayList<Service>();
                for (int s = 0; s < service.length(); s++) {
                    JSONObject svObj = service.getJSONObject(s);
                    Service sv = new Service();
                    sv.idService = svObj.getInt("idService");
                    sv.name = svObj.getString("name");
                    listService.add(sv);
                }
                b.service = listService;
                JSONArray timetable = obj.getJSONArray("timetable");
                ArrayList<Timetable> listTimetable = new ArrayList<Timetable>();
                for(int t = 0; t < timetable.length(); t++) {
                    JSONObject ttObj = timetable.getJSONObject(t);
                    Timetable tt = new Timetable();
                    tt.idTimetable = ttObj.getInt("idTimetableBranch");
                    tt.openingHours = ttObj.getString("openingHour");
                    tt.closingHours = ttObj.getString("closingHour");
                    JSONObject dayObj = ttObj.getJSONObject("day");
                    tt.Day = dayObj.getString("name");
                    listTimetable.add(tt);
                }
                b.timetable = listTimetable;
                b.latitude = obj.getString("latitude");
                b.longitude = obj.getString("longitude");
                b.averageCalification = obj.getInt("averageCalification");
                JSONArray promotion = obj.getJSONArray("promotion");
                ArrayList<Promotion> listPromotion = new ArrayList<Promotion>();
                for (int p = 0; p < promotion.length(); p++){
                    JSONObject pObj = promotion.getJSONObject(p);
                    Promotion prom = new Promotion();
                    prom.idPromotion = pObj.getInt("idPromotion");
                    prom.code = pObj.getString("code");
                    prom.name = pObj.getString("name");
                    prom.startDate = Utility.convertStringToCalendar(pObj.getString("startDate"));
                    prom.expireDate = Utility.convertStringToCalendar(pObj.getString("expireDate"));
                    prom.description = pObj.getString("description");
                    prom.value = pObj.getInt("value");
                    JSONObject type = pObj.getJSONObject("type");
                    prom.TypePromotion = type.getString("name");
                    listPromotion.add(prom);
                }
                b.promotion = listPromotion;
                branchList.add(b);
            }
            return branchList;
        }catch (JSONException e) {
            Log.d("error", e.getMessage());
            return null;
        }
    }

}

堆栈跟踪

06-29 21:51:00.934 7533-7533/com.morfando.android.morfando E/AndroidRuntime: FATAL EXCEPTION: main
                                                                             Process: com.morfando.android.morfando, PID: 7533
                                                                             java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.util.ArrayList.get(int)' on a null object reference
                                                                                 at com.morfando.android.morfando.Restaurant.Adapter.RestaurantAdapter$NumberViewHolder.bind(RestaurantAdapter.java:97)
                                                                                 at com.morfando.android.morfando.Restaurant.Adapter.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:61)
                                                                                 at com.morfando.android.morfando.Restaurant.Adapter.RestaurantAdapter.onBindViewHolder(RestaurantAdapter.java:23)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6356)
                                                                                 at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6389)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5335)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5598)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5440)
                                                                                 at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5436)
                                                                                 at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2224)
                                                                                 at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1551)
                                                                                 at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511)
                                                                                 at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:595)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
                                                                                 at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
                                                                                 at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
                                                                                 at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
                                                                                 at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                                                                                 at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                                                                                 at com.android.internal.policy.DecorView.onLayout(DecorView.java:726)
                                                                                 at android.view.View.layout(View.java:17637)
                                                                                 at android.view.ViewGroup.layout(ViewGroup.java:5575)
06-29 21:51:00.946 7533-7533/com.morfando.android.morfando E/AndroidRuntime:     at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346)
                                                                                 at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068)
                                                                                 at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254)
                                                                                 at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6337)
                                                                                 at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874)
                                                                                 at android.view.Choreographer.doCallbacks(Choreographer.java:686)
                                                                                 at android.view.Choreographer.doFrame(Choreographer.java:621)
                                                                                 at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860)
                                                                                 at android.os.Handler.handleCallback(Handler.java:751)
                                                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                 at android.os.Looper.loop(Looper.java:154)
                                                                                 at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

1 个答案:

答案 0 :(得分:0)

您可能想要查看名为GSON的库。

GSON自动将JSON转换为Java POJO。