我的应用程序已自动完成搜索。
现在我有了这些:
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);
您没有太多选择,您必须等待任务完成。否则,正如您所提到的,将使用旧的、不相关的数据。
-
您可以在活动中等待任务完成,可以使用ProgressDialog,使用
theTask.get()
或检查其状态theTask.getStatus()
(任务必须从活动中可见) -
您可以在活动中启动任务,也可以使用progressDialog,并在OnPostExecute部分中填写
acList
-
您可以制作一个启动屏幕活动,其角色将是加载数据,一旦完成,MainActivity将启动
如果我理解正确,您可以在设置搜索字段之前,在MainActivity onCreate中加载Dictionary。或者,您可以通过调用AsyncTaskClass.execute().get()来等待AsyncTask结束,检查http://developer.android.com/reference/android/os/AsyncTask.html.