1

私は Android 2.1 プラットフォームを使用しています。エミュレーターに 7 つの連絡先があり、連絡先のメールを取得しようとすると動作しますが、連絡先リストに保存した順序ではありません。新しいメールで新しい連絡先を作成した場合、それは最後に行きます。私はこのコードを使用しています。

コード

public class RetrieveData 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);  
   btnAdd = (Button)this.findViewById(R.id.btn);
   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) {
           GetEmails();

       }
   }); 
}

private void GetEmails()
    {


    ContentResolver cr =getContentResolver();
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    while (cursor.moveToNext()) 
    {       
        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));
            contactlist.add(emailAddress);
            itemAdapter.notifyDataSetChanged();
        }
        emails.close();

    }
    cursor.close(); 
}
}

xml ファイル

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<ListView
    android:id="@+id/listview"
    android:layout_width="fill_parent"
    android:layout_height="288dp"
    android:layout_weight="0.03" >

</ListView>

<Button
    android:id="@+id/btn"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
     android:text="Retrieve"
    android:layout_weight="0.01"  />


</LinearLayout>

それを解決する方法?

4

3 に答える 3

3

のクエリでorderByを使用する

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

お気に入り

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, columnName + " ASC");

同様に、DESCdescendingを使用します。

于 2012-06-14T13:33:58.730 に答える
1

ネストされた quire が 2 つあるように見えるため、クエリで順序を提供する最適なソリューションを実装するのは簡単ではないようです。それでif that is not possible then you can try

Collections.sort を使用して、文字列の配列リストを並べ替えることができますArrayList<String>

 Collections.sort(arrayList)
于 2012-06-14T13:34:21.107 に答える
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 RetrieveData 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);  
       btnAdd = (Button)this.findViewById(R.id.btn);
       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) {
               GetEmails();

           }
       }); 
    }

    private void GetEmails()
        {


        ContentResolver cr =getContentResolver();
        Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        while (cursor.moveToNext()) 
        {       
            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));
                contactlist.add(emailAddress);

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

        }
        cursor.close(); 
    }  
    private static void sortList(List<String> aItems){
        Collections.sort(aItems, String.CASE_INSENSITIVE_ORDER);
      }
}
于 2012-06-15T04:58:11.950 に答える