FATAL EXCEPTION: main
Process: com.sam.makeanoffer, PID: 13067
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.get(ArrayList.java:411)
at com.sam.makeanoffer.adapters.PinnedListAdapter.getView(PinnedListAdapter.java:78)
at com.sam.makeanoffer.pinnedlistLib.AdapterWrapper.getView(AdapterWrapper.java:154)
at com.sam.makeanoffer.pinnedlistLib.AdapterWrapper.getView(AdapterWrapper.java:16)
at android.widget.AbsListView.obtainView(AbsListView.java:2367)
at android.widget.ListView.makeAndAddView(ListView.java:1972)
at android.widget.ListView.fillDown(ListView.java:704)
at android.widget.ListView.fillFromTop(ListView.java:765)
at android.widget.ListView.layoutChildren(ListView.java:1716)
at com.sam.makeanoffer.pinnedlistLib.WrapperViewList.layoutChildren(WrapperViewList.java:193)
at android.widget.AbsListView.onLayout(AbsListView.java:2161)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at com.sam.makeanoffer.pinnedlistLib.StickyListHeadersListView.onLayout(StickyListHeadersListView.java:265)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
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:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
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:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
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:724)
at android.view.View.layout(View.java:17535)
at android.view.ViewGroup.layout(ViewGroup.java:5616)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2354)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2081)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1258)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6348)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
at android.view.Choreographer.doCallbacks(Choreographer.java:683)
at android.view.Choreographer.doFrame(Choreographer.java:619)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
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:6123)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
我使用PinnedSectionListView这对于头的自定义布局以及儿童。我在这里面临的问题是,所有的孩子布局被附加到第一个头,而第二个头没有显示。在我的jsonarray中,我有2个标题,每个都有单独的孩子。我试图调试代码,发现'j'for循环正在工作两次,而没有进入'i'for循环。这就是为什么两个孩子布局都被附加到第一个标题。
public class PinnedListAdapter extends BaseAdapter implements StickyListHeadersAdapter, SectionIndexer {
private final Context mContext;
private LayoutInflater mInflater;
private ArrayList<HeaderModel> arrayList = new ArrayList<>();
private ArrayList<ChildModel> childList = new ArrayList<>();
public static int prepos=-1;
private SharedPref pref;
public PinnedListAdapter(Context context, ArrayList<HeaderModel> arrayList) {
this.mContext = context;
this.arrayList = arrayList;
this.childList = childList;
mInflater = LayoutInflater.from(context);
pref = new SharedPref(mContext);
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return arrayList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.multicartchildrow, parent, false);
holder.myimage = (ImageView) convertView.findViewById(R.id.myimage);
holder.titletxt = (TextView) convertView.findViewById(R.id.titletxt);
holder.qtytxt = (TextView) convertView.findViewById(R.id.qtytxt);
holder.pricetxt = (TextView) convertView.findViewById(R.id.pricetxt);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ChildModel model = arrayList.get(position).getChildList().get(position);
//ChildModel model = childList.get(position);
holder.titletxt.setText(model.getChildtitle());
holder.qtytxt.setText(model.getChildqty());
holder.pricetxt.setText(pref.getString(Utility.CURRENCY)+" "+model.getChildprice());
Glide.with(mContext).load(model.getChildimage()).dontAnimate().into(holder.myimage);
return convertView;
}
@Override
public View getHeaderView(final int position, View convertView, ViewGroup parent) {
final HeaderViewHolder holder;
if (convertView == null) {
holder = new HeaderViewHolder();
convertView = mInflater.inflate(R.layout.multicartheaderrow, parent, false);
holder.RL_root = (RelativeLayout) convertView.findViewById(R.id.RL_root);
holder.image = (CircleImageView) convertView.findViewById(R.id.image);
holder.nametxt = (TextView) convertView.findViewById(R.id.nametxt);
holder.select = (CheckBox) convertView.findViewById(R.id.select);
convertView.setTag(holder);
} else {
holder = (HeaderViewHolder) convertView.getTag();
}
final HeaderModel model = arrayList.get(position);
holder.nametxt.setText(model.getHeadertext());
Glide.with(mContext).load(model.getHeaderimage()).dontAnimate().into(holder.image);
holder.select.setTag(position);
/*holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
//holder.select.setChecked(true);
model.setChecked(true);
notifyDataSetChanged();
}else{
//holder.select.setChecked(false);
model.setChecked(false);
notifyDataSetChanged();
}
}
});*/
System.out.println("sammy_position "+position);
System.out.println("sammy_prepos "+prepos);
if(position == prepos){
holder.select.setChecked(true);
pref.setString(Utility.MULTI_SELLLER_ID, model.getHeaderid());
}else{
holder.select.setChecked(false);
}
holder.select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.select.setChecked(true);
if(holder.select.isChecked()){
prepos = position;
}else{
prepos = -1;
}
notifyDataSetChanged();
}
});
return convertView;
}
/**
* Remember that these have to be static, postion=1 should always return
* the same Id that is.
*/
@Override
public long getHeaderId(int position) {
// return the first character of the country as ID because this is what
// headers are based upon
return arrayList.get(position).getHeadertext().subSequence(0, 1).charAt(0);
}
@Override
public int getPositionForSection(int section) {
return 0;
}
@Override
public int getSectionForPosition(int position) {
return 0;
}
@Override
public Object[] getSections() {
return null;
}
/*public void clear() {
mCountries = new String[0];
mSectionIndices = new int[0];
mSectionLetters = new Character[0];
notifyDataSetChanged();
}
public void restore() {
mCountries = mContext.getResources().getStringArray(R.array.countries);
mSectionIndices = getSectionIndices();
mSectionLetters = getSectionLetters();
notifyDataSetChanged();
}*/
class HeaderViewHolder {
RelativeLayout RL_root;
CircleImageView image;
TextView nametxt;
CheckBox select;
}
class ViewHolder {
ImageView myimage;
TextView titletxt, qtytxt, pricetxt;
}
}
{
"all_cart_products": [
{
"seller_id": "1",
"seller_name": "Supriya ghosh",
"email": "[email protected]",
"seller_image": "http:\/\/www.example.com\/upload\/userimage\/1493023436_ajeet_1000016806.jpg",
"products": [
{
"id": "9",
"product_user_id": "1",
"name": "antique5",
"desc": "Scads dsvdjkshvdsv dsvjhdsvdsv dsjkvhdjksvds vdskhjvndsvd svdjshnvjkdsv dsvkdjsh",
"quantity": "1",
"unit_price": "3200.00",
"total_price1": 3200,
"total_price": "3200.00",
"itemImage": "http:\/\/www.example.com\/upload\/product\/1492757990myprod.jpg",
"totalquantity": "99"
}
]
},
{
"seller_id": "3",
"seller_name": "Somnath Pal",
"email": "[email protected]",
"seller_image": "http:\/\/www.example.com\/upload\/userimage\/1492766252IMG_20150325_174836~3.jpg",
"products": [
{
"id": "44",
"product_user_id": "3",
"name": "Roses",
"desc": "fresh flowers",
"quantity": "0",
"unit_price": "26.00",
"total_price1": 0,
"total_price": "0.00",
"itemImage": "http:\/\/www.example.com\/upload\/product\/1493017537myprod.jpg",
"totalquantity": "100"
}
]
}
],
"total_qty": 0,
"Ack": 1
}
StringRequest stringRequest = new StringRequest(Request.Method.POST, Utility.GETFULLCART,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
pd.dismiss();
System.out.println("sammy_MultiCartActivity_getAllCartProducts_response "+response);
try {
JSONObject jObj = new JSONObject(response);
if(jObj.getInt("Ack")==1){
JSONArray jsonArray = jObj.getJSONArray("all_cart_products");
System.out.println("sammy_headerArray "+jsonArray.length());
for(int i=0;i<jsonArray.length();i++){
JSONObject main = jsonArray.getJSONObject(i);
JSONArray jarr = main.getJSONArray("products");
System.out.println("sammy_childArray "+jarr.length()); for(int j=0; j<jarr.length(); j++){
JSONObject obj = jarr.getJSONObject(j);
ChildModel childModel = new ChildModel();
childModel.setChildimage(obj.getString("itemImage"));
childModel.setChildtitle(obj.getString("name"));
childModel.setChildqty(obj.getString("quantity"));
childModel.setChildprice(obj.getString("total_price"));
childList.add(childModel);
}
HeaderModel model = new HeaderModel();
model.setHeaderimage(main.getString("seller_image"));
model.setHeadertext(main.getString("seller_name"));
model.setHeaderid(main.getString("seller_id"));
model.setChildList(childList);
arrayList.add(model);
}
}
mAdapter.notifyDataSetChanged();
} catch (JSONException e) {
pd.dismiss();
// JSON error
System.out.println("sammy_JSONError "+e);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
pd.dismiss();
if (error instanceof TimeoutError) {
Toast.makeText(MultiCartActivity.this,getString(R.string.tooslow),Toast.LENGTH_LONG).show();
}else if (error instanceof NoConnectionError){
Toast.makeText(MultiCartActivity.this,getString(R.string.nointernet),Toast.LENGTH_LONG).show();
}else if (error instanceof AuthFailureError) {
System.out.println("sammy_AuthFailureError "+error);
} else if (error instanceof ServerError) {
System.out.println("sammy_ServerError "+error);
} else if (error instanceof NetworkError) {
System.out.println("sammy_NetworkError "+error);
} else if (error instanceof ParseError) {
System.out.println("sammy_ParseError "+error);
}
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put("user_id", pref.getString(Utility.USERID));
System.out.println("sammy_MultiCartActivity_getAllCartProducts_params "+params);
return params;
}
};
RequestQueue requestQueue = Volley.newRequestQueue(MultiCartActivity.this);
requestQueue.add(stringRequest);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(
10000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
为什么你尝试手动分析它?你有这个GSON !!!你工作太辛苦我认为 – matrix
我想了解标题和子列表的逻辑。手动解析会给我一些解释。另外我从来没有使用GSON,因为它需要模型类。如果我在某处解析它,你能让我知道吗? – CodeAssasins
一切看起来不错..尝试检查两个数组的长度。 – deejay