I am trying to parse this JSON and throws an JSONException error when it goes back to the for sentence from the jsonBranch I dont know what is throwing the that error an crash the app. I tried changing the parameter of the for sentence but it doenst work.
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;
}
}
}
Stack trace
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)