异步任务上 TextView 的 setText 完成
setText of TextView on Async Task complete
我想 return 在我的 android 应用程序中使用 ksoap2 网络服务的特定字符串。
Web 服务正在 return 获取正确的值,但一旦任务完成,设置的文本就不会更新。我需要做一些事情(比如尝试打开导航抽屉)然后更新它。有什么想法吗??
我的代码如下
// Calling the async class
protected void onResume() {
try {
super.onResume();
new RetrieveTimeWS().execute();
}
catch (Exception e)
{
Log.e("Current Time", e.getMessage());
}
}
以下是异步任务
class RetrieveTimeWS extends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... params) {
String datetime = "";
try {
TextView TVcurrentTime = (TextView) findViewById(R.id.DateTimeNow);
TVcurrentTime.setText("Loading...");
datetime = getDateTimeClass.getDateTime();
TVcurrentTime.setText(datetime);
} catch (Exception e) {
Log.e("Async Task - GetDateTime ", e.getMessage());
}
return datetime;
}
}
只有当我触摸屏幕上的任何组件时,文本字段才会显示 "Loading..."。如何在 Web 服务 returns 文本后将文本视图更改为所需的字符串。
提前致谢。
拉克斯。
您不能与 UI 交互,而不是来自 UI 线程。 AsyncTask 具有从 UI 线程调用的 onPreExecute 和 PostExecute 方法,您可以在其中更改 UI。
class RetrieveTimeWS extends AsyncTask<Void, Void, String> {
TextView TVcurrentTime = (TextView) findViewById(R.id.DateTimeNow);
Exception e;
@Override
protected void onPreExecute() {
super.onPreExecute();
TVcurrentTime.setText("Loading...");
}
protected String doInBackground(Void... params) {
String datetime = "";
try {
datetime = getDateTimeClass.getDateTime();
} catch (Exception e) {
this.e = e;
Log.e("Async Task - GetDateTime ", e.getMessage());
}
return datetime;
}
@Override
protected void onPostExecute(final String s) {
super.onPostExecute(s);
if (e != null) {
TVcurrentTime.setText(s);
}
}
}
您不能在后台线程中执行任何 UI 工作。在 onPostExecute() 方法中执行。
此方法在主线程上运行。所以,你可以在这个方法中设置文本。
我想 return 在我的 android 应用程序中使用 ksoap2 网络服务的特定字符串。
Web 服务正在 return 获取正确的值,但一旦任务完成,设置的文本就不会更新。我需要做一些事情(比如尝试打开导航抽屉)然后更新它。有什么想法吗??
我的代码如下
// Calling the async class
protected void onResume() {
try {
super.onResume();
new RetrieveTimeWS().execute();
}
catch (Exception e)
{
Log.e("Current Time", e.getMessage());
}
}
以下是异步任务
class RetrieveTimeWS extends AsyncTask<Void, Void, String> {
protected String doInBackground(Void... params) {
String datetime = "";
try {
TextView TVcurrentTime = (TextView) findViewById(R.id.DateTimeNow);
TVcurrentTime.setText("Loading...");
datetime = getDateTimeClass.getDateTime();
TVcurrentTime.setText(datetime);
} catch (Exception e) {
Log.e("Async Task - GetDateTime ", e.getMessage());
}
return datetime;
}
}
只有当我触摸屏幕上的任何组件时,文本字段才会显示 "Loading..."。如何在 Web 服务 returns 文本后将文本视图更改为所需的字符串。
提前致谢。
拉克斯。
您不能与 UI 交互,而不是来自 UI 线程。 AsyncTask 具有从 UI 线程调用的 onPreExecute 和 PostExecute 方法,您可以在其中更改 UI。
class RetrieveTimeWS extends AsyncTask<Void, Void, String> {
TextView TVcurrentTime = (TextView) findViewById(R.id.DateTimeNow);
Exception e;
@Override
protected void onPreExecute() {
super.onPreExecute();
TVcurrentTime.setText("Loading...");
}
protected String doInBackground(Void... params) {
String datetime = "";
try {
datetime = getDateTimeClass.getDateTime();
} catch (Exception e) {
this.e = e;
Log.e("Async Task - GetDateTime ", e.getMessage());
}
return datetime;
}
@Override
protected void onPostExecute(final String s) {
super.onPostExecute(s);
if (e != null) {
TVcurrentTime.setText(s);
}
}
}
您不能在后台线程中执行任何 UI 工作。在 onPostExecute() 方法中执行。 此方法在主线程上运行。所以,你可以在这个方法中设置文本。