0

AndroidEclair2.1プラットフォームを使用しています。

このコードの背後にある動作は、エミュレータからすべての連絡先にアクセスし、このように各連絡先のリストビューに表示されることです

連絡先名、連絡先番号、Eメール

このコードには2つの問題があります

  1. プログラムを実行しました。その後、新しい連絡先を作成しました。アルファベット順ではありません。

[例:Bで始まる名前を作成すると、Aの後にはならず、代わりに最後の場所に移動します]

2.連絡先に電子メールまたは番号がない場合は、前の連絡先の電子メールまたは番号を受け取ります

これがコードです

public class GetAllDatas extends Activity { 

ListView lvItem;
private Button btnAdd;
String displayName="", emailAddress="", phoneNumber="";
ArrayList<String> contactlist=new ArrayList<String>(); 
ArrayAdapter<String> itemAdapter;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

lvItem = (ListView)this.findViewById(R.id.lvitems); 
btnAdd = (Button)this.findViewById(R.id.btnAddItem);

itemAdapter = new ArrayAdapter<String>    (this,android.R.layout.simple_list_item_1,contactlist);
lvItem.setAdapter(itemAdapter);

btnAdd.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
    readContacts();
}
});

 } 

private void readContacts()
{
ContentResolver cr =getContentResolver();
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,    null);
while (cursor.moveToNext()) 
{
displayName =Cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)    );       
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null,     null);
while (emails.moveToNext()) 
{ 
    emailAddress = emails.getString(emails.getColumnIndex(Email.DATA));
    break;
}
emails.close();
    if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PH    ONE_NUMBER))) > 0)
{
    Cursor pCur =cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDat     aKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
    while (pCur.moveToNext()) 
    {
         phoneNumber =pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        break;  
    }
    pCur.close();
}

//  To display the Details
    contactlist.add(displayName+", "+phoneNumber+", "+ emailAddress+"\n");
    itemAdapter.notifyDataSetChanged();
 }
cursor.close(); 
 }
 }

この問題を解決するために参照および調査するためのリンクまたはサイトがある場合は、リンクを送ってください。

4

3 に答える 3

0

データベースにクエリを実行すると、orderByが欠落しています。

public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)

最後のnullを、並べ替える列に置き換えます。

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,    null);
于 2012-06-13T14:02:11.423 に答える
0

メソッドの最後のパラメーターはquery、ソート順を想定しています。

ドキュメントを確認してくださいquery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

sortOrder SQL ORDER BY句としてフォーマットされた行の順序付け方法(ORDER BY自体を除く)。nullを渡すと、デフォルトの並べ替え順序が使用されますが、順序付けされていない場合があります。

于 2012-06-13T14:02:34.473 に答える
0

以下のテスト済みコードを確認してください

package stack.examples;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class GetAllDatas extends Activity {

    ListView lvItem;
    private Button btnAdd;
    String displayName="", emailAddress="", phoneNumber="";
    ArrayList<String> contactlist=new ArrayList<String>();
    ArrayAdapter<String> itemAdapter;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       lvItem = (ListView)this.findViewById(R.id.listView_items);  
       btnAdd = (Button)this.findViewById(R.id.btnAddItem);
       itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactlist);
       lvItem.setAdapter(itemAdapter);
       btnAdd.setOnClickListener(new View.OnClickListener() {
           public void onClick(View v) {
               readContacts();
           }
       });
    }

    private void readContacts()
    {
        ContentResolver cr =getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        while (cursor.moveToNext()) 
        {
            displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));       
            String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null);
            while (emails.moveToNext()) 
            { 
                emailAddress = emails.getString(emails.getColumnIndex(Email.DATA));
                break;
            }
            emails.close();
            if(Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
            {
                Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null);
                while (pCur.moveToNext()) 
                {
                     phoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    break;
                }
                pCur.close();
            }
                contactlist.add(displayName+","+phoneNumber+","+ emailAddress);

        }
        cursor.close(); 
        sortList(contactlist);
        itemAdapter.notifyDataSetChanged();
    }

    private static void sortList(List<String> aItems){
        Collections.sort(aItems, String.CASE_INSENSITIVE_ORDER);
      }
}

ArrayListをアルファベット順に並べ替えるには、次を使用できます。

Collections.sort(aItems, String.CASE_INSENSITIVE_ORDER);

ハッピーコーディング!!!

于 2012-06-15T04:34:39.870 に答える