我的应用已使用自动填充功能进行搜索。
现在我有了这些:
1)AsyncTask类,它加载Dictionary并将其保存在文件中以保存到InternalStorage(我需要它在网络不可用时使用预加载的项目。)
2)覆盖onCreate方法的应用程序类。在这里我执行AsyncTask(1)。
问题是带有搜索字段的MainActivity在AsyncTask完成之前启动,因此自动完成加载了非相关(旧)字典。
我需要完成我的AsyncTask 不早于 MainActivity从内部存储加载字典文件。
我怎样才能做到这一点? 谢谢你的回答。
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类从内部存储加载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);
答案 0 :(得分:0)
如果我理解正确,您可以在设置搜索字段之前在MainActivity onCreate中加载Dictionary。或者您可以通过调用AsyncTaskClass.execute()来获取AsyncTask结束.get(),检查http://developer.android.com/reference/android/os/AsyncTask.html。
答案 1 :(得分:0)
你没有太多选择,你必须等待你的任务完成。否则,正如您所提到的那样,将使用旧的,不相关的数据。
您可以使用theTask.get()
等待您的活动完成任务,使用ProgressDialog或检查其状态theTask.getStatus()
(任务必须具有活动的可见性) )
您可以在活动中启动任务,也可以使用progressDialog,并在OnPostExecute部分填写acList
您可以制作启动画面活动,加载数据的角色,一旦完成,将启动MainActivity