2016-03-31 2 views
1

私はすでに作成したコンテンツプロバイダーにアクセスしようとしています(これはチュートリアルに非常に近づいて作成したものです。それはうまく動作します)、私がSQLiteデータベースに追加した電子メールアドレスを読んでください。データベースには、ID、COLUMN_NAME、およびCOLUMN_EMAILがあります。私は、電子メール列のすべての行を取得し、このアクティビティに返される文字列のArrayListにします。コンテンツプロバイダーの列のすべての行を返す

これまでのところ、コンテンツプロバイダーのクエリメソッドを使用してデータベースにクエリを行い、カーソルをアクティビティに戻し、行からすべての文字列を収集し、その列だけの投影で照会するか、@ lorem.comのすべてのまたはカーソルのインデックスまたは何らかの種類のポストデータ取得フィルタをフィルタリングします。

私はちょうどかなりつまっています。

オーケーはとてもここに私のコードは次のとおりです:EmailSchedulerはAppCompatActivityが、私はそれを実行したとき、それは、このデータを返すLoaderManager .LoaderCallbacksのonCreateメソッドで{

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_email_scheduler); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    final TextView emailText = (TextView) findViewById(R.id.emailText); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Cursor cursor = getContacts(); 
      Log.i("TAG", cursor.getColumnName(2)); 
      emailText.append(cursor.toString()); 
     } 
    }); 
} 

private static final int CONTACT_LOADER = 0; 
public Uri contactUri; 
ArrayList<String> addresses = new ArrayList<>(); 
Cursor cursor; 

private Cursor getContacts() { 
    // Run query 
    Uri uri = Contact.CONTENT_URI; 
    String[] projection = new String[] { Contact._ID, 
      Contact.COLUMN_NAME }; 
    String selection = Contact.COLUMN_EMAIL + " = '" 
      + ("1") + "'"; 
    String[] selectionArgs = null; 
    String sortOrder = Contact.COLUMN_NAME 
      + " COLLATE LOCALIZED ASC"; 
    return getContentResolver().query(uri, projection, selection, selectionArgs, 
      sortOrder); 
} 
// called by LoaderManager to create a Loader 
@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
    CursorLoader cursorLoader; 

    switch (id) { 
     case CONTACT_LOADER: 
      cursorLoader = new CursorLoader(this, 
        contactUri, // Uri of contact to display 
        null, // null projection returns all columns 
        null, // null selection returns all rows 
        null, // no selection arguments 
        null); // sort order 
      break; 
     default: 
      cursorLoader = null; 
      break; 
    } 

    return cursorLoader; 
} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 

    Log.i("TAG", "got to the beginning of onloadfinish " + data); 
    if (data != null && data.moveToFirst()) { 
     int nameIndex = data.getColumnIndex(Contact.COLUMN_NAME); 
     int emailIndex = data.getColumnIndex(Contact.COLUMN_EMAIL); 
     String address = data.getString(emailIndex); 
     Log.i("TAG", address); 

     while (data.getString(emailIndex) != null){ 
      addresses.add(cursor.getString(cursor.getColumnIndex(
        Contact.COLUMN_EMAIL))); 
      Log.i("TAG", addresses.toString());} 
    } 
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { } 

}

を実装して拡張し

パブリッククラス[email protected]

どのように情報を取得しますか私はそれから必要なの?私がしようとするものはすべて枯れてしまいます。

答えて

1
private void getContacts() { 
    List<String> addresses = new ArrayList<String>();  

    // Run query 

    Uri uri = Contact.CONTENT_URI; 
    String[] projection = new String[] { Contact.COLUMN_EMAIL }; 
    String selection = null; 
    String[] selectionArgs = null; 
    String sortOrder = Contact.COLUMN_EMAIL 
      + " COLLATE LOCALIZED ASC"; 
    Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, 
      sortOrder); 
    TextView emailText = (TextView) findViewById(R.id.emailText); 
    if (cursor != null) { 
     cursor.moveToFirst(); 
     String category; 
     for (int i = 0; i < cursor.getCount(); i++){ 
      category = cursor.getString(cursor 
      .getColumnIndexOrThrow(Contact.COLUMN_EMAIL)); 
      addresses.add(category); 
      cursor.moveToNext(); 
     } 
     // always close the cursor 
     cursor.close(); 
    } 
} 
関連する問題