试图在AsyncTask中使用Loader。 (机器人)

时间:2013-11-29 07:35:40

标签: android android-asynctask android-loader

我正在尝试使用带有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);
        }
    }

2 个答案:

答案 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以提供您自己的实现并控制其他加载器特定功能。