我正在制作聊天应用程序。使用" 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();
}
}
}
先谢谢.. :))
答案 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回电话。