2014-03-31 50 views
1

我正在做一個聊天應用程序,通過使用「xmpp服務器」.in我的應用程序。我使用列表視圖中列出的所有聯繫人顯示。,我試圖處理線程中的名冊值,而不使用線程和處理它的工作完美..但當Android listview空指針execption?

我在線程中使用我的listdata,它給了我「空指針異常」,我做了什麼..我很困惑..,請求ehelp我..,這裏是我的代碼提前

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

顯示您的logcat – henry4343

+0

顯示該行的NullPointerException當我調試它發生 –

+0

等待i顯示了.... – User11

回答

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

這是因爲你試圖做一些事情,如設置文本你的線程內的textViews。所有這些只能在MainUIThread中使用。使用Handler.post一切你想在你的活動

+0

先生你能給我這個例子..請 – User11

+0

先生...你能給我的例子請 – User11

+0

謝謝很多先生...,我試過..我的工作...... thanku .. :) – User11

0

@覆蓋 保護無效的onResume()

{

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

}

因爲list.clear();

friendslist()方法列表爲空。但list.add回撥。