1

これが機能するかどうかさえわかりませんが、これが私たちが学ぶ方法なので、これがまだ壊れているとは言わないでください:)

私は最初のカーソルローダーを試しています。onCreateLoader メソッドを正しくセットアップしたと思いますが、onLoadFinished メソッドと onLoadReset メソッドをセットアップする方法がわかりません。スイッチとケースを扱うのはこれが初めてです。これらの2つの方法を記入する助けがあれば大歓迎です.

このクラスは、選択した連絡先 ID の連絡先電話番号と連絡先電子メールを取得します。興味深いのは、そのままのコードが連絡先の電子メール アドレスを取得し、それを電話番号のテキストとして設定していることです。

import android.app.Activity;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.widget.TextView;

/**
 * Created by Pete on 6/19/13.
 */
public class ContactDetails extends Activity implements LoaderCallbacks<Cursor> {

    TextView tvContactName, tvPhoneNum, tvPhoneType, tvPhoneFull,
            tvEmailAdd, tvEmailType, tvEmailFull,
            tvAddress, tvAddType, tvAddFull;

    String contactId, contactName, phoneType, phoneFull, phoneNum1,
            emailAdd, emailType, emailFull,
            address, addType, addFull;

    private static final int LOADER_PHONE = 2;
    private static final int LOADER_EMAIL = 3;

    //Contact List query arguments
    Uri uri;
    String[] projection, selectionArgs;
    String selection, sortOrder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contactinfo);

        initialize();

        contactId = getIntent().getStringExtra("contactId");
        contactName = getIntent().getStringExtra("contactName");
        tvContactName.setText(contactName);

        getLoaderManager().initLoader(LOADER_PHONE, null, this);
        getLoaderManager().initLoader(LOADER_EMAIL, null, this);
    }

    public void initialize() {
        tvContactName = (TextView)findViewById(R.id.tvContactName);
        tvPhoneNum = (TextView)findViewById(R.id.tvPhoneNum);
        tvPhoneType = (TextView)findViewById(R.id.tvPhoneType);
        tvPhoneFull = (TextView)findViewById(R.id.tvPhoneFull);
        tvEmailAdd = (TextView)findViewById(R.id.tvEmailAdd);
        tvEmailType = (TextView)findViewById(R.id.tvEmailType);
        tvEmailFull = (TextView)findViewById(R.id.tvEmailFull);
        tvAddress = (TextView)findViewById(R.id.tvAddress);
        tvAddType = (TextView)findViewById(R.id.tvAddType);
        tvAddFull = (TextView)findViewById(R.id.tvAddFull);
    }
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {

        switch (id) {
        case LOADER_PHONE:
            uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            projection = new String[] {
                    ContactsContract.CommonDataKinds.Phone.NUMBER
            };
            selection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +
                    " = " + contactId;
            selectionArgs = null;
            sortOrder = null;
            break;

        case LOADER_EMAIL:
            uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
            projection = new String[] {
                    ContactsContract.CommonDataKinds.Email.ADDRESS
            };
            selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID + 
                    " = " + contactId;
            selectionArgs = null;
            sortOrder = null;
            break;
        }
        return new CursorLoader(this, uri, projection, selection, selectionArgs, sortOrder);
    }
    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        if (cursor != null && cursor.getCount() > 0) {
            while (cursor.moveToNext()) {
                // Extract the phone number
                phoneFull = cursor.getString(
                        cursor.getColumnIndex(
                                ContactsContract.CommonDataKinds.Phone.NUMBER));
                tvPhoneFull.setText(phoneFull);
            }
        }       
    }
    @Override
    public void onLoaderReset(Loader<Cursor> arg0) {
        // TODO Auto-generated method stub

    }
}

電子メール情報を設定するための現在コメントアウトされている while ループは次のとおりです。

uri = ContactsContract.CommonDataKinds.Email.CONTENT_URI;
projection = new String[] {
        ContactsContract.CommonDataKinds.Email.ADDRESS
};
selection = ContactsContract.CommonDataKinds.Email.CONTACT_ID + 
        " = " + contactId;
selectionArgs = null;
sortOrder = null;
Cursor emailCursor = getContentResolver().query(
        uri, projection, selection, selectionArgs, sortOrder);
while (emailCursor.moveToNext()) {
    // Extract email address
    emailFull = emailCursor.getString(
            emailCursor.getColumnIndex(
                    ContactsContract.CommonDataKinds.Email.ADDRESS));
    tvEmailFull.setText(emailFull);
}
emailCursor.close();
4

0 に答える 0