2016-10-15 5 views
0

私はアンドロイドの新機能です。私はcontactsデータを使用したいloaderCallbacks 私はいくつかのコードを書いていますが、ここにいくつかの問題があります。なぜこれが起こるのか分かりません。 あなたはそれを確認してください。アクティビティAndroidでのLoaderCallbacksの実装

package com.example.arfan.myfirstapp; 

import android.app.LoaderManager; 
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.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     getSupportLoaderManager().initLoader(1, null, this); // ERROR IS HERE in 3rd Argument 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
     Uri CONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
     return new CursorLoader(this, CONTENT_URI, null, null, null, null); 
    } 

    @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     Log.i("INFO","This is working"); 
     while(data.moveToNext()){ 
      Log.i("Cantacts : ",data.getString(data.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); 
     } 
    } 

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

    } 
} 

this引数に問題のいくつかの種類があります。この行を削除すると、エラーは発生せず、結果も見つかりません。私はあなたがこの右ここ Go to Site

このサイトはあなたが私は問題が何であるかを知っていると私はそれをどのように修正することができます聞かせてくださいことができアンドロイドに連絡先データを取得する方法を ウェブサイトからこのコードを読んで。おかげさまで

更新: これを示すコンソール。

Error:(25, 34) error: method initLoader in class LoaderManager cannot be applied to given types; 
required: int,Bundle,LoaderCallbacks<D> 
found: int,<null>,MainActivity 
reason: cannot infer type-variable(s) D 
(argument mismatch; MainActivity cannot be converted to LoaderCallbacks<D>) 
where D is a type-variable: 
D extends Object declared in method <D>initLoader(int,Bundle,LoaderCallbacks<D>) 

答えて

1

あなたがAppCompatActivityを使用してgetSupportLoaderManager()を呼んでいるので、私はあなたにもLoaderのサポートライブラリの実装を使用したいとします。

もしそうなら、あなたのimport文の次の変更:あなたは、代わりにgetSupportLoaderManager()getLoaderManager()を呼び出さない場合

import android.support.v4.app.LoaderManager; 
import android.support.v4.content.CursorLoader; 
import android.support.v4.content.Loader; 

:これに

import android.app.LoaderManager; 
import android.content.CursorLoader; 
import android.content.Loader; 

を。

関連する問題