tags:

views:

43

answers:

2
+1  Q: 

Adapter Problem

The same code that displays the lists running on the emulator doesn't run on the mobile (Motorola Milestone). I'm using the same android platform (2.1-update).

Inbox Code

private ArrayList<EmailModel> email_list;


private EmailAdapter email_adapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  try {
   this.email_list = populate_list();
   email_adapter = new EmailAdapter(this, email_list);
   setListAdapter(email_adapter);

  } catch (Exception e) {
   Log.v("Inbox", "Adapting Problem: " + e.toString());
  }
 }

EmailAdapter Code

public class EmailAdapter extends BaseAdapter {



private ArrayList<EmailModel> elements;
private Context c;

public EmailAdapter(Context c, ArrayList<EmailModel> Emails) {

 this.elements = Emails;
    this.c = c;
}
public int getCount() {

    return elements.size();
}

public Object getItem(int position) {

    return elements.get(position);
}

public long getItemId(int id) {

    return id;
}

public void Remove(int id) {
    notifyDataSetChanged();
}

public void Add(EmailModel email) {

 this.elements.add(email);

 notifyDataSetChanged();
}

public View getView(int position, View convertView, ViewGroup parent) {

    LinearLayout rowLayout;
    EmailModel email = elements.get(position);

    if (convertView == null) {
     rowLayout = (LinearLayout) LayoutInflater.from(c).inflate(R.layout.inbox_item, parent, false); 
    } else {
        rowLayout = (LinearLayout) convertView;
    }

 TextView subject_textview = (TextView)rowLayout.findViewById(R.id.subject_textview);
 subject_textview.setText(email.getSubject());

 String body_hint = " - " + email.getBodyHint();

 TextView bodyhint_textview = (TextView)rowLayout.findViewById(R.id.body_hint_textview);
 bodyhint_textview.setText(body_hint);


 String sender_name = get_sender_name(email.getSender());

 TextView sender_name_textview = (TextView)rowLayout.findViewById(R.id.sender_textview);
 sender_name_textview.setText(sender_name);

 TextView date_time_textview = (TextView)rowLayout.findViewById(R.id.date_time_textview); 
 date_time_textview.setText(email.getTime());


    return rowLayout;
}

private String get_sender_name(String from) {

 String[] sender = from.split("<");


String sender_name;

  try {
   sender_name = sender[0];
  } catch (Exception e) {
   sender_name = sender[1];
  }
  return sender_name;
    }}

exception output

07-16 13:15:21.190: VERBOSE/Inbox(429): Adapting Problem: java.lang.ArrayIndexOutOfBoundsException

Stack Trace

07-16 14:00:49.690: WARN/System.err(703): java.lang.ArrayIndexOutOfBoundsException 07-16 14:00:49.698: WARN/System.err(703): at com.anubis.mail.Inbox.populate_list(Inbox.java:237) 07-16 14:00:49.698: WARN/System.err(703): at com.anubis.mail.Inbox.onCreate(Inbox.java:69) 07-16 14:00:49.698: WARN/System.err(703): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-16 14:00:49.698: WARN/System.err(703): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 07-16 14:00:49.706: WARN/System.err(703): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 07-16 14:00:49.706: WARN/System.err(703): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 07-16 14:00:49.706: WARN/System.err(703): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 07-16 14:00:49.706: WARN/System.err(703): at android.os.Handler.dispatchMessage(Handler.java:99) 07-16 14:00:49.706: WARN/System.err(703): at android.os.Looper.loop(Looper.java:123) 07-16 14:00:49.706: WARN/System.err(703): at android.app.ActivityThread.main(ActivityThread.java:4363) 07-16 14:00:49.706: WARN/System.err(703): at java.lang.reflect.Method.invokeNative(Native Method) 07-16 14:00:49.706: WARN/System.err(703): at java.lang.reflect.Method.invoke(Method.java:521) 07-16 14:00:49.706: WARN/System.err(703): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-16 14:00:49.706: WARN/System.err(703): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-16 14:00:49.706: WARN/System.err(703): at dalvik.system.NativeStart.main(Native Method)

A: 

I would place logging into the get_sender_name function. It doesn't make much sense to me that their could be an error with sender_name = sender[0]; but no error with sender_name = sender[1];.

Additionally you should use Log.e for errors instead of Log.v. Log.v is to communicate information that isn't critical but just describes how your program is running.

Christian
The input is something like this "Any Name <[email protected]>". If there is no name it will return the email. and thanks for the tip.
Seif Sallam
No, it won't. It will just return an empty String.
Christian
+1  A: 

The stack trace tells us that this Exception is occuring on line 237 of Inbox.java in your method populate_list(). This is not an issue with your adaptor. Since you've not provided the source code for populate_list method, we can't tell you precisely what the issue is.

So, look at line 237 of Inbox.java!

Dave
Oh thanks a lot it works now.
Seif Sallam