Android listview空指针execption?

时间:2014-03-31 08:47:09

标签: android multithreading listview xmpp

我正在制作聊天应用程序。使用" xmpp服务器"在我的应用程序中。我正在使用列表视图,其中列出了所有联系人列表。我正在尝试处理线程中的名单值,而不使用线程和处理程序,它的工作完美..但是当

我在线程中使用我的listdata ..,它给了我&#34; Null Pointer Exception&#34;,我做什么..我很困惑..,请帮助我......,这是我的代码< / p>

public class Contact_ListActivity extends Activity  {
TextView tv_header;
TextView tv_account;
TextView tv_contact;
TextView tv_number;
EditText idnumber;
Button add;
 public ListView list_view;
XMPPObjectPass commanInstant;

public ArrayList<ProfileInfo> list = new  ArrayList<ProfileInfo>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_list);

    commanInstant = (XMPPObjectPass)getApplicationContext();

    tv_account=(TextView)findViewById(R.id.tv_account);
    tv_contact=(TextView)findViewById(R.id.tv_contact);
    tv_number=(TextView)findViewById(R.id.tv_number);
    tv_header=(TextView)findViewById(R.id.tv_header);
    idnumber=(EditText)findViewById(R.id.idnumber);

    add=(Button)findViewById(R.id.add);
    list_view=(ListView)findViewById(R.id.listview);

    list_view.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
            //              Object o = list_view.getItemAtPosition(position);
            //              list_activity_bean obj_itemDetails = (list_activity_bean)o;
            //              Toast.makeText(Contact_ListActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
        }  
    });
    tv_account.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i=new Intent(Contact_ListActivity.this,Account_Question_Activity.class);
            startActivity(i);
        }
    });
}
@Override
protected void onResume()
{
    // TODO Auto-generated method stub
    super.onResume();
    list.clear();
    friendslist();
    list_view.setAdapter(new ListActivityAdapter(this, list));
}

public void friendslist()
{
Thread  coThread = new Thread();
{
    new Runnable() {
        public void run() {

        try
        {

            Roster roster = commanInstant.connection.getRoster();
            Collection<RosterEntry> entries = roster.getEntries();
            tv_number.setText(""+entries.size());
            for(RosterEntry r:entries)
            {
                VCard card = new VCard();
                try {
                    card.load(commanInstant.connection,r.getUser());
                    System.out.println("<-- first anme " + card.getFirstName());

                    //card.get
                    //              System.out.println("<-- getEmailHome anme " + card.getEmailHome());
                    //              System.out.println("<-- getEmailWork anme " + card.getEmailWork());
                    //              System.out.println("<-- getFrom anme " + card.getFrom());
                    //              System.out.println("<-- getJabberId anme " + card.getJabberId());
                    //              System.out.println("<-- getLastName anme " + card.getLastName());
                    //              System.out.println("<-- getMiddleName anme " + card.getMiddleName());
                    //              System.out.println("<-- getNickName anme " + card.getNickName());
                    //              System.out.println("<-- getOrganization anme " + card.getOrganization());

                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }


                byte[] imgs = card.getAvatar();
                if (imgs != null) {
                    int len = imgs.length;
                    Bitmap img = BitmapFactory.decodeByteArray(imgs, 0, len);

                    list.add(new ProfileInfo( card.getFirstName(),img,"+1PTS"));
                    System.out.println(r);

                }
            }

        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            System.out.println(""+e);
        }
    }
};
coThread.start();
}
}
   }

先谢谢.. :))

3 个答案:

答案 0 :(得分:1)

试试这个......,它会起作用......

public class Contact_ListActivity extends Activity  {
TextView tv_header;
TextView tv_account;
TextView tv_contact;
TextView tv_number;
EditText idnumber;
Button add;
 public ListView list_view;
XMPPObjectPass commanInstant;
Handler mHandler;
 public     ArrayList<ProfileInfo> list = new  ArrayList<ProfileInfo>();

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.contact_list);

    commanInstant = (XMPPObjectPass)getApplicationContext();

    tv_account=(TextView)findViewById(R.id.tv_account);
    tv_contact=(TextView)findViewById(R.id.tv_contact);
    tv_number=(TextView)findViewById(R.id.tv_number);
    tv_header=(TextView)findViewById(R.id.tv_header);
    idnumber=(EditText)findViewById(R.id.idnumber);

    add=(Button)findViewById(R.id.add);
    list_view=(ListView)findViewById(R.id.listview);

    list_view.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
            //              Object o = list_view.getItemAtPosition(position);
            //              list_activity_bean obj_itemDetails = (list_activity_bean)o;
            //              Toast.makeText(Contact_ListActivity.this, "You have chosen : " + " " + obj_itemDetails.getName(), Toast.LENGTH_LONG).show();
        }  
    });
    tv_account.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent i=new Intent(Contact_ListActivity.this,Account_Question_Activity.class);
            startActivity(i);
        }
    });
}
@Override
protected void onResume()
{
    // TODO Auto-generated method stub
    super.onResume();
    list.clear();
    friendslist();
    list_view.setAdapter(new ListActivityAdapter(this, list));
}

public void friendslist()
{
    mHandler = new Handler();
Thread  coThread = new Thread();
{

        mHandler.post(new Runnable() {
              @Override
        public void run() {

        try
        {

            Roster roster = commanInstant.connection.getRoster();
            Collection<RosterEntry> entries = roster.getEntries();
            tv_number.setText(""+entries.size());
            for(RosterEntry r:entries)
            {
                VCard card = new VCard();
                try {
                    card.load(commanInstant.connection,r.getUser());
                    System.out.println("<-- first anme " + card.getFirstName());

                    //card.get
                    //              System.out.println("<-- getEmailHome anme " + card.getEmailHome());
                    //              System.out.println("<-- getEmailWork anme " + card.getEmailWork());
                    //              System.out.println("<-- getFrom anme " + card.getFrom());
                    //              System.out.println("<-- getJabberId anme " + card.getJabberId());
                    //              System.out.println("<-- getLastName anme " + card.getLastName());
                    //              System.out.println("<-- getMiddleName anme " + card.getMiddleName());
                    //              System.out.println("<-- getNickName anme " + card.getNickName());
                    //              System.out.println("<-- getOrganization anme " + card.getOrganization());

                } 
                catch (Exception e) 
                {
                    e.printStackTrace();
                }


                byte[] imgs = card.getAvatar();
                if (imgs != null) {
                    int len = imgs.length;
                    Bitmap img = BitmapFactory.decodeByteArray(imgs, 0, len);

                    list.add(new ProfileInfo( card.getFirstName(),img,"+1PTS"));
                    System.out.println(r);

                }
            }

        } 
        catch (Exception e) 
        {
            e.printStackTrace();
            System.out.println(""+e);
        }
    }
});
coThread.start();
}
}
 }

答案 1 :(得分:0)

这是因为您正在尝试执行一些操作,例如在Thread中将text设置为textViews。所有这些只应在MainUIThread中使用。将Handler.post用于您要在Activity中显示的所有内容

答案 2 :(得分:0)

@覆盖 protected void onResume()

{

super.onResume();
list.clear();
friendslist();
list_view.setAdapter(new ListActivityAdapter(this, list));

}

因为list.clear();

friendslist()方法列表为null。但是list.add回电话。