我正在尝试使用 jsoup 从网站显示波士顿的温度,作为 Android 应用程序中的 toast 消息。我的 Java 程序如下所示:
public static void showWeather() throws IOException
{
Document doc = Jsoup.connect("http://www.wunderground.com/US/ma/boston.html?MR=1").get();
Elements languages = doc.select("#tempActual span.b ");
for(Element langElement: languages)
{
//System.out.println(" The temperature in Boston: "+langElement.text()+ " F");
}
}
Java 程序运行正常,并将波士顿的温度打印到屏幕上。我想使用这个方法来尝试在一个简单的android应用程序中将温度显示为toast,但是当我尝试在我的android Activity 的onCreate方法中运行方法(当然没有打印语句)时,程序会自动关闭。这是我的 onCreate 方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addKeyListener();
try {
showWeather();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
有人可以告诉我如何在我的 android Activity 中运行这个 java 程序吗?我不知道如何正确对待 try/catch 子句。我尝试将 toast 放入 catch 子句中,但没有成功。请帮忙。
最佳答案
AsyncTask 可以正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。
引用:
http://developer.android.com/reference/android/os/AsyncTask.html
用法
AsyncTask 必须子类化才能使用。子类将重写至少一个方法 ( doInBackground(Params...) ),并且最常见的是重写第二个方法 ( onPostExecute(Result) 。)
这是子类化的示例:
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
一旦创建,任务的执行就非常简单:
new DownloadFilesTask().execute(url1, url2, url3);
关于java - jSoup方法关闭android App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204112/