2017-02-27 120 views
1

我想显示数据从SqlServer使用改进我的自定义可扩展列表视图。我的Json应该如何实现以下类参数?

这是我目前的Json;

{"item":{"category":"electronics","items":{"title":"Ilara Milk","price":"Ksh 50","url":"http:\/\/supa.swagshop.co.ke\/Images\/coke.jpg"}}} 

以下是我ShopItem类,需要字符串和类单项在列表

public class ShopItem { 
    private String category; 
    public List<SingleItem> items = new ArrayList<SingleItem>(); 

    public ShopItem(String category, List<SingleItem> items) { 
     this.category = category; 
     this.items = items; 
    } 

    public String getCategory() { 
     return category; 
    } 

    public void setCategory(String category) { 
     this.category = category; 
    } 

    public List<SingleItem> getItems() { 
     return items; 
    } 

    public void setItems(List<SingleItem> items) { 
     this.items = items; 
    } 
} 

这里是我的单项类。

public class SingleItem { 
    private String title; 
    private String price; 
    private String url; 
    private Bitmap itemimage; 

    public SingleItem(String title, String price, String url, Bitmap itemimage) { 
     this.title = title; 
     this.price = price; 
     this.url = url; 
     this.itemimage = itemimage; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getPrice() { 
     return price; 
    } 

    public void setPrice(String price) { 
     this.price = price; 
    } 

    public String getUrl() { 
     return url; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public Bitmap getItemimage() { 
     return itemimage; 
    } 

    public void setItemimage(Bitmap itemimage) { 
     this.itemimage = itemimage; 
    } 
} 

以下是我的主要碎片,在那里我检索数据并当误差在你的JSON描述items使用ExpandableListAdapter

public class MainFragment extends Fragment { 
    private BannerSlider bannerSlider; 

    private ExpandableListView CategoriesListView; 
    private ArrayList<ShopItem> items = new ArrayList<ShopItem>(); 

    private ExpandableListAdapter categoryAdapter; 


    public MainFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_main, container, false); 

     bannerSlider = (BannerSlider) view.findViewById(R.id.banner_slider1); 

     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 

     CategoriesListView = (ExpandableListView) view.findViewById(R.id.list_items); 

     getdata(); 

     CategoriesListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
      int previousGroup = -1; 

      @Override 
      public void onGroupExpand(int groupPosition) { 
       if ((previousGroup != -1) && (groupPosition != previousGroup)) { 
        CategoriesListView.collapseGroup(previousGroup); 
       } 
       previousGroup = groupPosition; 
      } 
     }); 
     return view; 
    } 

    private void getdata() { 
     final ProgressDialog progressDialog = new ProgressDialog(getContext()); 
     progressDialog.setMessage("Loading Items..."); 
     progressDialog.show(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     InterfaceRequest request = retrofit.create(InterfaceRequest.class); 
     Call<JSONResponse> call = request.getJSON(); 
     call.enqueue(new Callback<JSONResponse>() { 

      @Override 
      public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 

       if (response.isSuccessful()){ 
        JSONResponse jsonResponse = response.body(); 
        items = new ArrayList<>(Arrays.asList(jsonResponse.getItem())); 
        categoryAdapter = new ShopItemAdapter(getContext(),items); 
        CategoriesListView.setAdapter(categoryAdapter); 
       } else { 
        Toasty.warning(getContext(),"Oops! Items did not load correctly", Toast.LENGTH_LONG,true).show(); 
       } 
       progressDialog.dismiss(); 

      } 

      @Override 
      public void onFailure(Call<JSONResponse> call, Throwable t) { 
       Toasty.error(getContext(),t.getLocalizedMessage(), Toast.LENGTH_SHORT,true).show(); 
       Log.d(Constants.TAG,t.getMessage()); 
       progressDialog.dismiss(); 
      } 
     }); 
    } 

    public void showData() { 
     categoryAdapter = new ShopItemAdapter(getContext(),items); 
     CategoriesListView.setAdapter(categoryAdapter); 
    } 
} 

回答

0

根据你的模型班,我假设你想要一个类别和一个项目列表。所以,你应该修改你的回应是这样的方式像

 
{ 
    "item": { 
     "category": "electronics", 
     "items": [ 
      { 
       "title": "Ilara Milk", 
       "price": "Ksh 50", 
       "url": "http://supa.swagshop.co.ke/Images/coke.jpg" 
      } 
     ] 
    } 
} 

如果你可以发布你的PHP代码一点点,那

+0

仍然有一个错误先生,预计BEGIN_ARRAY,但是BEGIN_OBJECT行1列11路径$ .item,但现在它在colimn 11而不是10 –

+0

你可以发布你的JSON响应? –

0

在ExpandableListView显示它是一个对象items:{..}但你正试图将其转换为list

JSON的应该是像items: [item1, item2, ...]

+0

你可以使用我的项目,我们可以帮助你过来,以上解释这@arjun –

相关问题