【发布时间】:2014-02-01 15:51:04
【问题描述】:
我有一个带有 TextView 的初始屏幕,用于显示应用程序正在执行的操作,例如“更新库”...“更新运输”...等等。我正在使用 AsyncTask 通过 API 更新我的数据库。
我正在将更新文本传递给 AsyncTask。我需要更改TextView statusMessage 中的文本。我正在尝试这样做:
public class JSONParser extends AsyncTask<String, String, JSONObject> {
static InputStream is = null;
static JSONObject json = null;
static String outPut = "";
TextView statusMessage;
@Override
protected void onPreExecute() {
statusMessage = (TextView) findViewById(R.id.statusMessage);
}
...
我的计划是更改 doInBackground 方法中的文本,但在 AsyncTask 中无法访问 findViewById。我想我需要使用setContentView 来允许findViewById 工作,但我不确定如何。
我的 java 文件是 SplashScreen.java 而我的 xml 是 activity_splash_screen.xml
----- 编辑-----
有关更多信息,我有三个相互交谈的部分:
SplashScreen.java -> 调用 baseActivity.java 中的方法 -> 方法将数据发送到 JSONParser.java -> 将解析后的 JSON 从 API 发送到 baseActivity.java 以更新数据库
根据以下建议,我已声明
statusMessage = (TextView) findViewById(R.id.statusMessage);
在 baseActivity.java 的 onCreate 中,因为它是调用 AsyncTask 的文件。
在 JSONParser.java 中我已经完成了,现在:
public class JSONParser extends AsyncTask<String, String, JSONObject> {
static InputStream is = null;
static JSONObject json = null;
static String outPut = "";
TextView statusMessage;
@Override
protected JSONObject doInBackground(String... params) {
// TODO Auto-generated method stub
...
}
protected void onProgressUpdate() {
statusMessage.setText("testing");
}
protected void onPostExecute(JSONObject result) {
}
}
我只是在此处使用“测试”来进行测试。
【问题讨论】:
-
您可以使用 Handler 来更新 TextView(需要在 UI 线程上发布更新)。
标签: android android-asynctask textview