我正在尝试使用带有AsyncTask的Loader,但是在DoinBackground方法中执行Loader的调用给出了一个错误:LoaderManager类型中的方法initLoader(int,Bundle,LoaderManager.LoaderCallbacks)不适用于参数(int,null,LoaderClass.MagicCall)
这是我的代码:
private class MagicCall extends AsyncTask<Void, Void, String> {
ProgressDialog Asycdialog = new ProgressDialog(LoaderClass.this);
@Override
protected void onPreExecute() {
Asycdialog.setMessage("Working");
Asycdialog.show();
super.onPreExecute();
}
protected String doInBackground(Void... args) {
getLoaderManager().initLoader(0, null, this);
String Z = Integer.toString(insertNameBD());
return Z;
}
@Override
protected void onPostExecute(String result) {
//hide the dialog
Asycdialog.dismiss();
t3.setText(result);
super.onPostExecute(result);
}
}
答案 0 :(得分:0)
你应该这样做
class FooLoader extends AsyncTaskLoader {
public FooLoader(Context context, Bundle args) {
super(context);
// do some initializations here
}
public String loadInBackground() {
String result = "";
// ...
// do long running tasks here
// ...
return result;
}
}
class FooLoaderClient implements LoaderManager.LoaderCallbacks {
Activity context;
// to be used for support library:
// FragmentActivity context2;
public Loader onCreateLoader(int id, Bundle args) {
// init loader depending on id
return new FooLoader(context, args);
}
public void onLoadFinished(Loader loader, String data) {
// ...
// update UI here
//
}
public void onLoaderReset(Loader loader) {
// ...
}
public void useLoader() {
Bundle args = new Bundle();
// ...
// fill in args
// ...
Loader loader =
context.getLoaderManager().initLoader(0, args, this);
// with support library:
// Loader loader =
// context2.getSupportLoaderManager().initLoader(0, args, this);
// call forceLoad() to start processing
loader.forceLoad();
}
}
答案 1 :(得分:0)
你不应该在AsyncTask中使用Loader!上面的答案是正确的,因为有一个AsynTaskLoader扩展了loader并提供了覆盖默认Loader属性的其他方法。
您可以扩展AsynTaskLoader以提供您自己的实现并控制其他加载器特定功能。