在Activity Android中实现LoaderCallbacks

时间:2016-10-15 11:42:07

标签: android android-loadermanager

我是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

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>) 参数中存在某种问题。如果我删除此行,则不会发生错误,也没有找到任何结果。我从这里读了这段代码 网站如何在Android中获取联系人数据你可以在这个网站就在这里 Go to Site

您能告诉我这是什么问题吗?我该如何解决? 感谢。

更新 控制台显示这一点。

{{1}}

1 个答案:

答案 0 :(得分:2)

由于您正在使用AppCompatActivity并致电getSupportLoaderManager(),我想您也希望使用Loader的支持库实现。

如果是,请更改import语句的以下内容:

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

对此:

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

如果不这样做,请拨打getLoaderManager()而不是getSupportLoaderManager()