【发布时间】:2015-02-04 16:31:16
【问题描述】:
我有一个带有TextView 的简单小部件。一个TextView 应该显示从网页获得的信息,我正在使用它来实现它:
private class DownloadWebpageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// params comes from the execute() call: params[0] is the url.
try {
return downloadUrl(urls[0]);
} catch (IOException e) {
return getString(R.string.srv_dwn);
}
}
// onPostExecute displays the results of the AsyncTask.
@Override
protected void onPostExecute(String result) {
widgetText1 = result;
}
}
DownloadWebpageTask 从活动中调用,如下所示:
DownloadWebpageTask downloadWebpageTask = new DownloadWebpageTask();
Context context = this;
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.example_appwidget);
ComponentName thisWidget = new ComponentName(context, Widget.class);
ConnectivityManager cm =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected())
{
remoteViews.setViewVisibility(R.id.widgettext1, View.VISIBLE);
netInfo = cm.getActiveNetworkInfo();
widgetText2 = netInfo.getTypeName();
downloadWebpageTask.execute("http://checkip.amazonaws.com/");
remoteViews.setTextViewText(R.id.widgettext1, widgetText1);
remoteViews.setTextViewText(R.id.widgettext2, widgetText2);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
else
{
remoteViews.setTextViewText(R.id.widgettext1, widgetText1);
remoteViews.setViewVisibility(R.id.widgettext1, View.GONE);
remoteViews.setTextViewText(R.id.widgettext2, getString(R.string.tbl_no_connection));
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
此变量在我的Activity 类中定义,应该显示AsyncTask 的结果,但不显示。
public String widgetText1 = "initialtext";
逐步调试表明从未调用过onPostExecute,并且TextView 中的文本仍然是“初始文本”。
第二个TextView 根据需要更新,因为它不涉及AsyncTask。
不过,包含DownloadWebpageTask 的类似代码在我的主要活动中运行良好。
【问题讨论】:
-
我敢打赌 doInBackGround 没有被调用。或者它有一个异常并返回initstring。
-
如果出现异常,它会返回除 'initialtext' 之外的特定字符串,如您在代码中所见。
标签: android android-activity android-asynctask widget