【发布时间】:2019-01-21 19:58:26
【问题描述】:
我已经在我的 Android 应用程序的这一部分工作了几个小时,并且我已经阅读了至少 50 篇相关的帖子,但没有一篇有帮助。我有一个 AsyncTask 试图从网站上抓取文本。这应该很简单。
我已经有一个 Java Swing 程序,它调用非常相似的代码,它完全按照我想要的方式工作,所以我知道网站和我的互联网已经启动并正在运行。
当我尝试运行应用程序时,AsyncTask 在注释点挂起,我不知道为什么。
AsyncTask 内部的剥离版本:
@Override
protected void onPreExecute() {
Log.wtf("PROGRESS", "in preex");
//progress bar
}
@Override
protected String doInBackground(Void... params) {
android.os.Process.setThreadPriority(THREAD_PRIORITY_BACKGROUND + THREAD_PRIORITY_MORE_FAVORABLE);
try {
Log.wtf("PROGRESS", "in try");
URLConnection connection = new URL("https://bmorgan17.github.io/html-database/").openConnection();
Log.wtf("PROGRESS", "connect");
Scanner scanner = new Scanner(connection.getInputStream()); //HANGS HERE
Log.wtf("PROGRESS", "got stream");
scanner.useDelimiter("\\Z");
string = scanner.next();
Log.wtf("PROGRESS", "read");
scanner.close();
} catch ( Exception ex ) {
ex.printStackTrace();
Log.wtf("FAILED", "Hard rip mate");
}
return string;
}
@Override
protected void onPostExecute(String s) {
Log.wtf("PROGRESS", "in post");
//hide progress bar
delegate.processFinish(s);
}
Logcat:
01-21 13:36:53.039 14480-14480/com.example.name.stemapp A/PROGRESS: in preex
01-21 13:36:53.109 14480-14495/com.example.name.stemapp A/PROGRESS: in try
01-21 13:36:53.125 14480-14495/com.example.name.stemapp A/PROGRESS: connect
在最终的 logcat 条目之后,进度轮将永远旋转,任何帮助将不胜感激。
编辑:
在创建这篇文章和 15 到 20 分钟的 Reddit 冲浪之后,该应用程序终于继续前进。它进入了 catch 语句,然后是 postExecute,这显然不是我想要的。如果有人能帮我解决这个新问题,那就太好了。
Logcat:
A/PROGRESS: in preex
A/PROGRESS: in try
A/PROGRESS: connect
A/FAILED: hard rip mate
A/PROGRESS: in post
【问题讨论】:
-
如何调用AsyncTask?
-
发生了什么异常?它的堆栈跟踪是什么?
-
设置连接超时有助于调试。
connection.setReadTimeout(5000)(5 秒)。 “如果在数据可供读取之前读取超时到期,则从返回的输入流读取时可能会引发 SocketTimeoutException”。 -
@ianhanniballake 在主 onCreate() 方法中使用 execute()。如果你愿意,我可以编辑我的帖子
-
我每次运行它时都会遇到不同的异常,并且它们都没有发生在 printStackTrace() @Ruku
标签: java android android-asynctask java.util.scanner