在MainActivity启动之前从WEB加载值



我的应用程序已自动完成搜索。

现在我有了这些:

1) AsyncTask类,用于加载Dictionary并将其保存在文件中到InternalStorage(我需要它在网络不可用时使用预加载的项)。

2) 具有重写onCreate方法的应用程序类。在这里,我执行AsyncTask(1)。

问题是,带有搜索字段的MainActivity在AsyncTask完成之前启动,因此自动完成加载了不相关的(旧的)字典。

我需要在MainActivity从内部存储加载字典文件之前完成AsyncTask。

我怎样才能做到这一点?谢谢你的回答。

upd:好的,有代码:

package com.XXX.XXX.app;
import android.app.Application;
public class MyApp extends Application {
    @Override
    public void onCreate()
    {
        super.onCreate();
        if (CheckNetworkConnect.check(MyApp.this)) {
            LoadData getData = new LoadData(MyApp.this);
            getData.execute();
        }
    }
}

之后,我用自己的InternalStorage类从InternalStorage加载MainActivity类中的文件

try {
        acList = (ArrayList<String>) InternalStorage.readObject(MainActivity.this, "aclist");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        acList = new ArrayList<String>(Arrays.asList("NO FILE"));
        e.printStackTrace();
    }

然后将getted ArrayList应用于下拉

 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            R.layout.dropdown_item, acList);
    AutoCompleteTextView textView = (AutoCompleteTextView)
            findViewById(R.id.searchFiled);
    searchFiled.setAdapter(adapter);

您没有太多选择,您必须等待任务完成。否则,正如您所提到的,将使用旧的、不相关的数据。

  1. 您可以在活动中等待任务完成,可以使用ProgressDialog,使用theTask.get()或检查其状态theTask.getStatus()(任务必须从活动中可见)

  2. 您可以在活动中启动任务,也可以使用progressDialog,并在OnPostExecute部分中填写acList

  3. 您可以制作一个启动屏幕活动,其角色将是加载数据,一旦完成,MainActivity将启动

如果我理解正确,您可以在设置搜索字段之前,在MainActivity onCreate中加载Dictionary。或者,您可以通过调用AsyncTaskClass.execute().get()来等待AsyncTask结束,检查http://developer.android.com/reference/android/os/AsyncTask.html.

最新更新