2

我正在尝试将 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);
        }
    }
4

2 回答 2

1

你应该这样做

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();
  }
 } 
于 2013-11-29T07:38:12.293 回答
0

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

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

于 2014-02-07T09:58:12.093 回答