我写了一个AsynkTask女巫连接到数据库,然后将结果放在UI中。这很完美,但后来我想要包含一个Dialog或者其他东西,其他布局女巫会显示progressBar,然后更新UI。
好吧,现在布局发生了变化,最后我有了“testGUI”布局,但它没有使用AsynkTask数据进行升级。这是代码。非常感谢你。
class DatabaseAsync扩展了AsyncTask {
@Override
protected void onPreExecute(){
setContentView(R.layout.loading);
}
/**
* Se ejecuta en el hilo secundario, en segundo plano
*/
@Override
protected JSONArray doInBackground(Void... params) {
JSONArray jArray = new JSONArray();
jArray = DatabaseController
.rellenarArray("SomeURL");
return jArray;
}
/**
* Una vez terminado el hilo secundario se ejecuta esto
*/
@Override
protected void onPostExecute(JSONArray jArrayFull) {
setContentView(R.layout.testgui);
getQuestion(jArrayFull,1);
}
}
答案 0 :(得分:2)
您无法使用 setContentView()
两次。您必须获得对每个视图的引用,并通过在onPostExecute()
中更改其属性来更新它。
答案 1 :(得分:0)
显示进度条后,您的用户界面如何显示?
如果逻辑如下:
...然后您需要使用处理程序来更新对话框活动。
用户在步骤6中按“确定”后,UI活动将恢复 - 因此您必须确保在UI活动的onResume
中更新您要在UI活动中显示的内容< / p>
应该避免从asynctask到UI的任何直接调用 - 使用处理程序将后台工作者任务与UI进行通信。
如果您需要有关如何执行此操作的更多信息 - 只需查看处理程序和进度对话框,有几个教程。
如果您不使用处理程序但直接从backgroudn worker活动调用UI活动方法,则UI可能会冻结,甚至在最坏的情况下被Android系统删除。
如果您不需要经常更新进度条,那么您可以致电:
textView.setText(result); in your onPostExecute method
或UI元素的任何其他直接设置