【问题标题】:Android listview null pointer execption?Android listview空指针异常?
【发布时间】:2014-03-31 08:47:09
【问题描述】:

我正在制作一个聊天应用程序。,通过在我的应用程序中使用“xmpp 服务器”。我正在使用一个列表视图,其中显示了所有联系人的列表。,我试图在线程中处理名册值,而不使用线程并处理它的工作完美..,但是当

我在线程中使用我的列表数据..,它给了我“空指针异常”,我在做什么..我很困惑..,请帮助我..,这是我的代码

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();
}
}
   }

在此先感谢..:)

【问题讨论】:

  • 显示发生了哪一行 NullPointerException
  • @henry4343 当我调试它时..,它给了我错误..,它没有进入 try and catch 块
  • @DotCink 当我调试它时..,它给了我错误..,它没有进入 try and catch 块..

标签: android multithreading listview xmpp


【解决方案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();
}
}
 }

【讨论】:

    【解决方案2】:

    这是因为你正在尝试做一些事情,比如在你的线程中设置文本到 textViews。所有这些都应该只在 MainUIThread 中使用。将 Handler.post 用于您想要在 Activity 中显示的所有内容

    【讨论】:

    • 先生,你能给我举个例子吗..请
    • 先生...你能给我举个例子吗
    • 非常感谢先生......,我试过......它的工作......谢谢......:)
    • 很抱歉我没有使用任何示例,但我很高兴它对你有用
    【解决方案3】:

    @覆盖 受保护的无效 onResume()

    {

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

    }

    因为 list.clear();

    friendslist() 方法列表为空。但是 list.add 回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-14
      • 2013-04-16
      相关资源
      最近更新 更多