【发布时间】:2016-03-03 13:35:42
【问题描述】:
我现在很困惑。我在 onPostExecute() 中写的一些行没有被调用。这是我的 AsyncTask 代码:
public class GuestInfoTask extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... params) {
StringBuilder stringBuilder = new StringBuilder();
try
{
URL url = new URL(params[0]);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
int charRead;
char[] charBuffer = new char[500]; // download 500 characters at a time
while(true)
{
charRead = inputStreamReader.read(charBuffer);
if(charRead <= 0)
break;
stringBuilder.append(String.valueOf(charBuffer), 0, charRead);
}
return stringBuilder.toString();
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s != null)
{
// THIS DOES NOT GET CALLED!
System.out.println("Successfully retrieved guest info with response: " + s);
// TODO: parse the data here
// THIS DOES NOT GET CALLED ALSO!
System.out.println("TEST: " + s);
// BUT THIS GETS CALLED
// alert dialog the response here
new AlertDialog.Builder(GuestInfoActivity.this)
.setTitle("Guest Info")
.setMessage("Message: " + s)
.setPositiveButton("OK", null)
.show();
}
else
{
System.out.println("Failed to retrieve guest info! Double check your server address and/or network connection!");
new AlertDialog.Builder(GuestInfoActivity.this)
.setTitle("Error")
.setMessage("Failed to retrieve guest info! Double check your server address and/or network connection!")
.setPositiveButton("OK", null)
.show();
}
// disable the progressbar after
mProgressDialog.dismiss();
}
}
我有一个button,当点击它时,会执行上面的AsyncTask。现在当任务完成时,我成功地在屏幕上看到了AlertDialog,但我没有看到printLines。我也试过Log.i(),但结果相同。
为什么会这样?我这边有什么问题吗?对于它的价值,我使用的是 Android Studio 1.51 和模拟器 API 19
编辑:我想我已经缩小了罪魁祸首。如果我输入 Log.d("tag", "test"),这会成功显示在日志中。但是如果我键入 Log.d("tag", s),其中s 是 onPostExecute 的结果,我在日志中看不到它。输出 onPostExecute 结果字符串好像有问题?
【问题讨论】:
-
可能您的 logcat 过滤器级别设置为仅显示更高级别的消息。
-
清理构建您的项目并在您的设备上再次运行。
-
将
System.out.println()更改为Log.d("tag", "message");并再次检查是否执行 -
它被调用,但在你看不到的地方输出
-
并非所有设备都支持 System.out.println。较旧的 Android API 和/或自定义 rom 不支持它。也许其他设备也是如此。可以肯定的是,请使用 Log。
标签: java android android-asynctask