标签: asynctaskloader

除非我在loadInBackground中返回一个新对象,否则AsyncTaskLoader不会调用onLoadFinished

我有一个AsyncTaskLoader<List<String>>成员变量List<String>mAddresses.在loadInBackground,如果我创建一个新对象,填充它,并返回它; onLoadFinished按预期调用,所以我可以更新适配器,然后更新视图.

    public List<String> loadInBackground()
    {
        // ListView updates properly only if I do this (strange?)
        mAddresses = new ArrayList<String>();

        // ... fill mAddresses ...

        return mAddresses;
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用相同的变量,即使它的值发生变化也会onLoadFinished被调用:

    public List<String> loadInBackground()
    {
        // ListView does not update with this!
        if(mAddresses == null)
        {
           mAddresses = new ArrayList<String>();
        }

        // ... fill mAddresses ...

        return mAddresses;
    }
Run Code Online (Sandbox Code Playgroud)

任何人都可以评论这个吗?我是否应该像这样创建一个新对象来返回?是否有任何标志我可以设置"对象已更改,所以即使它是同一个对象,请确保执行所有更新?

android asynctaskloader android-loadermanager android-loader

3
推荐指数
1
解决办法
2504
查看次数

在一个Activity中使用不同的(AsyncTask)加载器

我想在Activity中使用不同的AsyncTaskLoader(返回类型不同),实现回调方法的最佳方法是什么?

这不起作用:

公共类MyActivity扩展Activity实现LoaderManager.LoaderCallbacks <MyPojo>,LoaderManager.LoaderCallbacks <MyOtherPojo>

Eclipse说

The interface LoaderCallbacks cannot be implemented more than once with different arguments
Run Code Online (Sandbox Code Playgroud)

那我该怎么办?我的想法是制作活动

实现LoaderManager.LoaderCallbacks <Object>

然后检查回调方法它是什么类型的对象,但这似乎并不太优雅.有没有更好的办法?

android asynctaskloader android-loader

2
推荐指数
1
解决办法
1415
查看次数

AsyncTaskLoader用于处理方向更改的http请求,使用泛型,继承

目前我正在使用异步http库来对我们的服务器执行http请求.然而,这会带来一个问题,即如果在屏幕旋转期间正在进行http调用,我们将在调用结束时引用旧的上下文.我通过保持对onCreate中捕获的最新实例的静态引用来解决这个问题,并使用该引用调用方法(并在onDestroy中将其置空).它运作正常但似乎是一个黑客.我见过有人推荐使用片段来解决这个问题,比如这里:

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

这似乎是好主意,但我想我可以通过简单地让我的Activity扩展FragmentActivity并使用AsyncTaskLoader子类来实现这一点,该子类专门用于我正在做的事情.

这是我的想法:使用ApiRequest实现AsyncTaskLoader并返回ApiResponse.但是,我希望能够继承HttpAsyncTask并覆盖一个解析响应的方法,这样我就可以解析响应并将其转换为另一种扩展ApiResponse的对象.我不知道如何指定类型参数来实现这一点.

这是我的代码:

public class HttpAsyncTaskLoader</*not sure what to put here*/> extends AsyncTaskLoader<? not sure ?> {
    private ApiClient mClient ;
    private ApiRequest mRequest;
    private volatile boolean isExecuting = false;
    public HttpAsyncTaskLoader(Context context, ApiClient client, ApiRequest request) {
        super(context);
        mClient = client;
        mRequest = request;
    }

    /**
     * Subclasses should override this method to do additional parsing
     * @param response
     * @return
     */
    protected /*subclass of ApiResponse (or ApiResponse itself)*/ onResponse(ApiResponse response) 
    {
        //base implementation just returns the …
Run Code Online (Sandbox Code Playgroud)

java generics android asynctaskloader

2
推荐指数
1
解决办法
4498
查看次数

如果我已经使用AsyncTask,如何避免主线程异常上的网络?

在我看来,我并没有真正从MainActivity调用URL,网络操作.

  • 我在另一个类ProcessData中调用url.connect()
  • 我确实使用doInBackground()
  • 我用AsyncTask扩展ProcessData类

但例外仍然发生:

public class MainActivity extends ActionBarActivity {

    private final String LOG_TAG = MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {            
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ProcessData test = new ProcessData();
        test.doInBackground("mysql") ;
    }

//separate file ProcessData.java
public class ProcessData extends AsyncTask<String, Void, String> {

public String createValidUrl(String s){
       .....//code in this method works fine
}
public String doInBackground(String ...params){
        String validUrl = createValidURL(params[0]);                   
        HttpURLConnection urlConnection = null;
        BufferedReader reader = null;
        URL url = new URL(validUrl);
        urlConnection = …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask asynctaskloader networkonmainthread

2
推荐指数
1
解决办法
1034
查看次数

从另一个AsyncTask的onPostExecute启动的asyncTask在API 10中无法正确执行

建立:

我有一个单例应用程序类,它有一个名为的方法fetchUpdates().此方法由UpdaterService(IntentService)类调用.fetchUpdates()方法只是调用DownloadDataAsyncTask,然后UpdateDbAsyncTaskonPostExecute数据成功下载期间调用.两个AsyncTasks都驻留在应用程序类中(不确定这是否与问题相关).

public synchronized void fetchUpdates() {
    String[] mURLs = getURLs();
    new DownloadDataAsyncTask().execute(mURLs[0], mURLs[1]);
}
Run Code Online (Sandbox Code Playgroud)

DownloadDataAsyncTask类

private class DownloadDataAsyncTask extends AsyncTask<String, Void, JSONObject[]> {

    @Override
    protected synchronized JSONObject[] doInBackground(String... params) {
        String urlData = (String) params[0];
        String urlId = (String) params[1];
        JSONObject[] jSON = new JSONObject[] {
                JSONfunctions.getJSONfromURL(urlData),
                JSONfunctions.getJSONfromURL(urlId) };
        return mJSON;
    }

    @Override
    protected void onPostExecute(JSONObject[] result) {
         if (result[0] != null && result[1] != null) {
             new UpdateDbAsyncTask().execute(result[0], …
Run Code Online (Sandbox Code Playgroud)

android asynctaskloader

1
推荐指数
1
解决办法
873
查看次数

为什么在Android P中不推荐使用AsyncTaskLoader?

根据Android文档,Android P中不推荐使用AsyncTaskLoader。有人可以告诉我为什么不推荐使用AsyncTaskLoader吗?

编辑-Google现在建议使用ViewModel而不是Loader,这是它们被弃用的原因

android background asynctaskloader android-loader android-9.0-pie

0
推荐指数
1
解决办法
1455
查看次数