I am trying to set a listView using CustomAdapter but I am getting java.lang.IndexOutOfBoundsException: Invalid index 8, size is 8
error and app stopped. In my activity, I want to display a listview that contains two textViews in Single row. One textview is the first letter of that second textview. For this I am using Custom Adapter. To set Text, I am using below code :
holder.textView = (TextView) convertView.findViewById(R.id.text);
holder.textView1 = (TextView) convertView.findViewById(R.id.imageView3);
convertView.setTag(holder);
holder.textView.setText(mData.get(position));
holder.textView1.setText(icons.get(position));
If I remove last line which is holder.textView1.setText(icons.get(position));
, then I won't get any error and app will run normally, but the first textview1 will not display. And if I use that code then I will get that above error. Here is my full code below :
CustomAdapter.java
import java.util.ArrayList;
import java.util.TreeSet;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class CustomAdapter extends BaseAdapter
{
private static final int TYPE_ITEM = 0;
private static final int TYPE_SEPARATOR = 1;
private static final int TYPE_WORD = 2;
private ArrayList<String> mData = new ArrayList<String>();
private TreeSet<Integer> sectionHeader = new TreeSet<Integer>();
private ArrayList<String> icons = new ArrayList<String>();
private LayoutInflater mInflater;
public CustomAdapter(Context context)
{
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void addItem(final String item)
{
mData.add(item);
notifyDataSetChanged();
}
public void addSectionHeaderItem(final String item)
{
mData.add(item);
sectionHeader.add(mData.size() - 1);
notifyDataSetChanged();
}
public void addIcon(final String icon)
{
icons.add(icon);
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
return sectionHeader.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public String getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
int rowType = getItemViewType(position);
if (convertView == null) {
holder = new ViewHolder();
switch (rowType)
{
case TYPE_ITEM:
convertView = mInflater.inflate(R.layout.list_text_black1, null);
holder.textView = (TextView) convertView.findViewById(R.id.text);
holder.textView1 = (TextView) convertView.findViewById(R.id.imageView3);
convertView.setTag(holder);
holder.textView.setText(mData.get(position));
holder.textView1.setText(icons.get(position));
break;
case TYPE_SEPARATOR:
convertView = mInflater.inflate(R.layout.list_text_black2, null);
holder.textView = (TextView) convertView.findViewById(R.id.textSeparator);
convertView.setTag(holder);
holder.textView.setText(mData.get(position));
break;
}
} else {
holder = (ViewHolder) convertView.getTag();
}
//holder.textView.setText(mData.get(position));
//holder.textView1.setText(mData.get(position));
return convertView;
}
public static class ViewHolder {
public TextView textView,textView1;
}
}
Companies.java
private void connect()
{
// TODO Auto-generated method stub
String data;
JSONArray json;
List<Map<String, String>> data1 = new ArrayList<Map<String, String>>();
try
{
DefaultHttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet(url+"RetriveAll.php?q=cat");
HttpResponse response = client.execute(request);
HttpEntity entity=response.getEntity();
data=EntityUtils.toString(entity);
Log.e("STRING", data);
try
{
JSONObject obj=null;
json=new JSONArray(data);
JSONArray actualJson=json.getJSONArray(0);
for(int i=0;i<actualJson.length();i++)
{
obj=actualJson.getJSONObject(i);
name=obj.getString("name");
Log.e("name",name);
mAdapter.addSectionHeaderItem(name);
JSONArray json1=obj.getJSONArray("data");
for(int j=0;j< json1.length();j++)
{
JSONObject obj1=null;
obj1 = json1.getJSONObject(j);
CompName= obj1.getString("vendor_name");
CompID=obj1.getString("vendor_id");
//------------------------------------------------------------------------------------
word=CompName.substring(0, 1);
//splitting word to display first textview
mAdapter.addItem(CompName);
mAdapter.addIcon(word);
setListAdapter(mAdapter);
Log.e("vender",CompName);
Log.e("id",CompID);
}
}
}
catch (JSONException e)
{
e.printStackTrace();
}
} catch (ClientProtocolException e) {
Log.d("HTTPCLIENT", e.getLocalizedMessage());
} catch (IOException e) {
Log.d("HTTPCLIENT", e.getLocalizedMessage());
}
}
Logcat o/p :
01-05 11:04:18.750: E/AndroidRuntime(4059): FATAL EXCEPTION: main
01-05 11:04:18.750: E/AndroidRuntime(4059): java.lang.IndexOutOfBoundsException: Invalid index 8, size is 8
01-05 11:04:18.750: E/AndroidRuntime(4059): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
01-05 11:04:18.750: E/AndroidRuntime(4059): at java.util.ArrayList.get(ArrayList.java:304)
01-05 11:04:18.750: E/AndroidRuntime(4059): at com.infoz.tapme.CustomAdapter.getView(CustomAdapter.java:87)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.AbsListView.obtainView(AbsListView.java:2267)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.ListView.makeAndAddView(ListView.java:1769)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.ListView.fillDown(ListView.java:672)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.ListView.fillFromTop(ListView.java:733)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.ListView.layoutChildren(ListView.java:1622)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.AbsListView.onLayout(AbsListView.java:2102)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.View.layout(View.java:13772)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewGroup.layout(ViewGroup.java:4365)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.View.layout(View.java:13772)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewGroup.layout(ViewGroup.java:4365)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.LinearLayout.onLayout(LinearLayout.java:1420)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.View.layout(View.java:13772)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewGroup.layout(ViewGroup.java:4365)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.View.layout(View.java:13772)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewGroup.layout(ViewGroup.java:4365)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1875)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1696)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1007)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4221)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.Choreographer.doFrame(Choreographer.java:525)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.os.Handler.handleCallback(Handler.java:615)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.os.Handler.dispatchMessage(Handler.java:92)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.os.Looper.loop(Looper.java:137)
01-05 11:04:18.750: E/AndroidRuntime(4059): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-05 11:04:18.750: E/AndroidRuntime(4059): at java.lang.reflect.Method.invokeNative(Native Method)
01-05 11:04:18.750: E/AndroidRuntime(4059): at java.lang.reflect.Method.invoke(Method.java:511)
01-05 11:04:18.750: E/AndroidRuntime(4059): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-05 11:04:18.750: E/AndroidRuntime(4059): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
01-05 11:04:18.750: E/AndroidRuntime(4059): at dalvik.system.NativeStart.main(Native Method)
Please let me know where's the problem.
0 comments:
Post a Comment