正在尝试将Loader与AsyncTask一起使用.(安卓系统)



我正试图将Loader与AsyncTask一起使用,但是在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);
        }
    }

您应该这样做

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();
  }
 } 

您不应该在AsyncTask中使用Loader!上面的答案是正确的,因为有一个AsynTaskLoader,它扩展了loader并提供了覆盖默认loader属性的其他方法。

您可以扩展AsynTaskLoader以提供自己的实现并控制其他几个特定于加载器的功能。

相关内容

最新更新