0

I have a class like this

class User
{
    public String name,username,bio;
    public Integer uid;
    public User (String c_name,String c_username,String c_bio,Integer c_uid)
    {
        name = c_name;
        username = c_username;
        bio = c_bio;
        uid = c_uid;
    }
    public String toString () { return "username:"+username+",name:"+name+","+"bio:"+bio+",uid:"+uid; }
}

and I want to use this class with arrayadapter.This is my arrayadapter:

conversationsAdapter=new ArrayAdapter<User>(this,0) {
    public View getChatListView(int c_position,View c_convertView,ViewGroup c_parent) {
        if (c_convertView == null) {
            c_convertView=getLayoutInflater().inflate(R.layout.random_bars,null);
        }
        return c_convertView;
    }
};
ListView listView1 = (ListView)findViewById(R.id.conversationList);
if (listView1 == null) {
    Log.w("main","listnull");

}else{
    Log.w("main","listnotnull");
    listView1.setAdapter(conversationsAdapter);
}

I am adding data with this line:

conversationsAdapter.add(new User("test","test","test",0));

But my app is crashing.Log cat:

08-21 16:58:36.601: E/AndroidRuntime(2679): FATAL EXCEPTION: main
08-21 16:58:36.601: E/AndroidRuntime(2679): Process: com.impact.ribony, PID: 2679
08-21 16:58:36.601: E/AndroidRuntime(2679): android.content.res.Resources$NotFoundException: Resource ID #0x0
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.content.res.Resources.getValue(Resources.java:1123)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.content.res.Resources.loadXmlResourceParser(Resources.java:2309)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.content.res.Resources.getLayout(Resources.java:939)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.LayoutInflater.inflate(LayoutInflater.java:395)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:371)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.AbsListView.obtainView(AbsListView.java:2263)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.ListView.onMeasure(ListView.java:1175)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1456)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.View.measure(View.java:16497)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.Choreographer.doCallbacks(Choreographer.java:574)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.Choreographer.doFrame(Choreographer.java:544)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.os.Handler.handleCallback(Handler.java:733)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.os.Handler.dispatchMessage(Handler.java:95)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.os.Looper.loop(Looper.java:136)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at android.app.ActivityThread.main(ActivityThread.java:5017)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at java.lang.reflect.Method.invokeNative(Native Method)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at java.lang.reflect.Method.invoke(Method.java:515)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-21 16:58:36.601: E/AndroidRuntime(2679):     at dalvik.system.NativeStart.main(Native Method)

How can I fix this problem ? I didn't understand what is this errors ?

3
  • just pass a valid layout resource instead of 0 i.e android.R.layout.simple_list_item Commented Aug 21, 2014 at 21:17
  • First I suggest creating a regular class rather than an anonymous one. For one thing, this allows you more control over the constructors you can add to the class. Commented Aug 21, 2014 at 21:25
  • Second, since you are not using any of the facilities provided by ArrayAdapter, you should consider extending BaseAdapter instead. Commented Aug 21, 2014 at 21:30

2 Answers 2

1

The primary reason for your error is that you have a method named getChatListView() that inflates the view for each row in the list. Android expects a method named getView() instead. If you change the name as well as make sure you provide the correct parameters, this will fix your error.

However, I believe you are not using ArrayAdapter correctly. You have several alternatives:

  1. Use one of the ArrayAdapter constructors that takes a layout id as well as a text view id. This will leverage ArrayAdapter to do all the heavy lifting for you.

  2. Extend BaseAdapter instead. This will give you more flexibility without getting confused by the extra stuff that ArrayAdapter does for you. For one thing, you can inflate a custom view with more than just a single TextView.

Sign up to request clarification or add additional context in comments.

1 Comment

I used getView instead getChatListView and problem resolved.Thank you
1

You can't use an ArrayAdapter without a layout resource.
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) with:

  • context: The current context.
  • resource: The resource ID for a layout file containing a TextView to use when instantiating views.

You could use this for example:

new ArrayAdapter<User>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values)

8 Comments

Updated answer. I forgot that you should specify the resource id of the TextView
Which textview ? I didn't understand this method.
If you read the document, you will see that an ArrayAdapter needs a Context, a layout resource id (which will be inflated), a resource id (specifying the textview id inside the layout) and a collection of objects (to be displayed). (the TextView resource id being optional)
But I have one more arrayadapter and I am using it like this : pastebin.com/ib5hL4zR and working.Why this is not working ?
Thast one is a custom ArrayAdapter, because you override the getView() method. So you don't have to provide a layout resource id. You are in charge of inflating the views. (cf. convertView = getLayoutInflater().inflate(R.layout.random_bars, null);)
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.