为什么有些行在我的onPostExecute()中没有被调用?
我目前困惑。我在onPostExecute()中写入的一些行不会被调用。这里是我的AsyncTask代码:为什么有些行在我的onPostExecute()中没有被调用?
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结果字符串?
您指定的行是System.out.println
命令。它们肯定会被调用,但是您不会看到它们,因为该字符串正在默认系统输出(sysout
)中显示,而不是您在Android Studio中看到的控制台。
要在控制台(logcat)中查看这些消息,可以使用Log
类(http://developer.android.com/reference/android/util/Log.html)的其中一种方法。
所以,与其System.out.println("TEST: " + s)
,请尝试:
Log.i("tag", "TEST: " + s)
记住Log.i
被印刷在信息层面的消息,因此,你需要检查你的控制台(logcat的)是表示该级别的消息。其他级别是:
Log.v("tag", "TEST: " + s) // VERBOSE
Log.d("tag", "TEST: " + s) // DEBUG
Log.w("tag", "TEST: " + s) // WARNING
Log.e("tag", "TEST: " + s) // ERROR
FWIW,大多数设备都配置了'log.redirect-stdio'系统属性设置为true,将'System.out'和'System.err'重定向到具有INFO级别的logcat。 OP也表示他也看不到'Log.i()'输出。 – laalto
感谢您的信息。我试过Log.d,它现在显示在我的日志中。但我有一个后续问题。我尝试创建一个新函数,然后将AsyncTask字符串结果传递给上述函数,并在函数Log.d中传递信息。但是这并没有出现在我的日志中。有任何想法吗? – aresz
我编辑了我原来的帖子。我想我已经缩小了罪魁祸首。如果我键入Log.d(“tag”,“test”),则会在日志中成功显示。但是如果我输入Log.d(“tag”,s),其中's'是onPostExecute的结果,我在日志中看不到它。这似乎有一个问题,输出onPostExecute结果字符串? – aresz
可能您的logcat筛选级别设置为仅显示更高级别的消息。 – laalto
清理建立您的项目,并再次在您的设备上运行。 –
将'System.out.println()'改为'Log.d(“tag”,“message”);'如果执行再次检查 – ELITE