我正在Android上编写一个java应用程序。 我有一个Activity,它启动一个AsyncTask,以便从服务器获取数据并显示它。
我试图在onPostExecute()方法中呈现数据但是有些如何setContentView& populateUI(getApplicationContext())未在其范围内解析。 为什么呢?
如果运行这样的代码,而不添加setContentView,我会在执行结束时得到一个空屏幕。没有例外。
public class CurrencyRatesActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ReadCurrencyRateTask(this).execute("http://currency.xml");
}
}
public class ReadCurrencyRateTask extends AsyncTask<String, Integer, Integer>
{
private Context mainActivityContext;
public ReadCurrencyRateTask(Context mainActivityContext)
{
super();
this.mainActivityContext = mainActivityContext;
}
public Integer doInBackground(String... url)
{
// do some culculations
.......
return status;
}
protected void onPostExecute(Integer result)
{
// In case connection succeeded
TableLayout tbl = new TableLayout(mainActivityContext);
tbl.setStretchAllColumns(true);
tbl.bringToFront();
for (int i=0; i<currencyList.size(); i++)
{
TableRow tr = new TableRow(mainActivityContext);
TextView country = new TextView(mainActivityContext);
country.setText("...something...");
tr.addView(country);
}
}
}
谢谢
答案 0 :(得分:2)
其实你只回答了你的问题&#34; 未在其范围内解决&#34;真的是。
试试这个
public class CurrencyRatesActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ReadCurrencyRateTask(this).execute("http://currency.xml");
}
class ReadCurrencyRateTask extends AsyncTask<String, Integer, Integer> {
//your network stuff goes here
@Override
protected void onPostExecute(Integer integer) {
super.onPostExecute(integer);
//your stuff
setContentView(yourView);
}
}
}
重要:您只能从UI线程和Activity更新UI。
答案 1 :(得分:0)
当您从onPostExecute()更新UI时,我认为您不需要调用runOnUiThread()。但是你需要在super.onCreate()之后使用setContentView()。