2016-04-14 12 views
0

携帯電話の連絡先リストをリストとして表示しようとしています。私は個々のリストアイテムを文字列バッファに保存していますが、これをタイプリストに変換することはできません。リストは私が作ったクラスです。カスタムListViewのsetAdapterでNullPointerExceptionが発生し、arraylist作成時に構文エラーが発生する

list.java

public class list { 
    public StringBuffer item; 
    public list(StringBuffer title) { 
     super(); 
     this.item = title; 
    } 
    public StringBuffer getTitle() { 
     return item; 
    } 
    public void setTitle(StringBuffer title) { 
     this.item = title; 
    } 
    @Override 
    public String toString() { 
     return item + "\n" ; 
    } 
} 

listAdapter.java

public class listAdapter extends ArrayAdapter<list> { 

    Context context; 
    int layoutResourceId; 
    list data[] = null; 

    public listAdapter(Context context, int layoutResourceId, List<list> items) { 
     super(context, layoutResourceId, items); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
    } 

    /*private view holder class*/ 
    private class ViewHolder { 
     TextView txtTitle; 

    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     list list = getItem(position); 

     LayoutInflater mInflater = (LayoutInflater) context 
       .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.list_item, null); 
      holder = new ViewHolder(); 
      holder.txtTitle = (TextView) convertView.findViewById(R.id.textView1); 
      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     holder.txtTitle.setText(list.getTitle()); 


     return convertView; 
    } 
} 

フラグメントクラス

public class MainActivity extends Fragment { 
    private ArrayList<StringBuffer> conNumbers; 
    List<list> rowitems; 
    ListView listview; 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.allcontacts, container, false); 
     conNumbers = new ArrayList<>(); 
     listview=(ListView)getActivity().findViewById(R.id.list); 
     rowitems=new ArrayList<>(); 
     fetchContacts(); 
     return v; 
    } 

    public void fetchContacts() { 

     String phoneNumber = null; 
     String email = null; 

     Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
     String _ID = ContactsContract.Contacts._ID; 
     String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; 
     String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER; 

     Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
     String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; 
     String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER; 

     Uri EmailCONTENT_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI; 
     String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID; 
     String DATA = ContactsContract.CommonDataKinds.Email.DATA; 

     StringBuffer output = new StringBuffer(); 

     ContentResolver contentResolver = getActivity().getContentResolver(); 

     Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null); 

     // Loop for every contact in the phone 
     if (cursor.getCount() > 0) { 

      while (cursor.moveToNext()) { 

       String contact_id = cursor.getString(cursor.getColumnIndex(_ID)); 
       String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME)); 

       int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER))); 

       if (hasPhoneNumber > 0) { 

        output.append("\n First Name:" + name); 

        // Query and loop for every phone number of the contact 
        Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[]{contact_id}, null); 

        while (phoneCursor.moveToNext()) { 
         phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)); 
         output.append("\n Phone number:" + phoneNumber); 


        } 

        phoneCursor.close(); 

        // Query and loop for every email of the contact 
        Cursor emailCursor = contentResolver.query(EmailCONTENT_URI, null, EmailCONTACT_ID + " = ?", new String[]{contact_id}, null); 

        while (emailCursor.moveToNext()) { 

         email = emailCursor.getString(emailCursor.getColumnIndex(DATA)); 

         output.append("\nEmail:" + email); 


        } 

        emailCursor.close(); 
       } 

       output.append("\n"); 
       } 
      rowitems.add(output); *I get an error here saying add(packagename.list) cannot be applied to (java.lang.StringBuffer)* 


     } 

     listAdapter adapter=new listAdapter(getActivity(),R.layout.list_item,rowitems); 
     listview.setAdapter(adapter); 
} 

答えて

1

rowitemslistクラスのオブジェクトを必要とします。

rowitems.add(new list(output)); 

listの名前をもっと意味のある名前に変更する必要があります。 ContactDetailsListのようなものです。

更新次の行を変更し、アダプタを設定しながらNullPointerExceptionを解決するため

listview = (ListView) getActivity().findViewById(R.id.list); 

にあなたが親に属しているビューを見つけるためにしようとしていたgetActivity().findViewById()

listview = (ListView) v.findViewById(R.id.list); 

断片の活性。

しかし、現在のレイアウトR.layout.allcontactsでビューを探したいとします。したがって、現在膨張しているレイアウトvfindViewByIdを使用してください。

+0

これはうまくいきました!しかし、今はアダプタを設定している行にヌルオブジェクト参照を表示します - java.lang.NullPointerException:ヌルオブジェクトで仮想メソッド 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'を呼び出そうとしています参照 – TeeKay

+0

これも私に助けてくれますか?それは大きな助けになるでしょう。 – TeeKay

+0

@TeeKay更新された回答を参照してください。 –

関連する問題