我下载了jsoup库 jsoup-1.7.1.jar核心,并使用项目 - >将其导入我的项目属性 - > Java构建路径 - >添加外部Jars ,然后将库文件粘贴到我的libs文件夹中。但是,将Jsoup库导入我的项目似乎存在一些问题。当我运行我的应用程序时,启动时出现此错误。
12-26 22:59:24.133: E/AndroidRuntime(6710): FATAL EXCEPTION: main
12-26 22:59:24.133: E/AndroidRuntime(6710): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jsouptest/com.example.jsouptest.MainActivity}: android.os.NetworkOnMainThreadException
搜索并询问后我发现eclipse看到了jsoup.jar,但无法将其打包到APK文件以供应用程序运行。我尝试按 Shift + Alt + O 组织Imports,我会得到同样的错误。在这一点上,我不确定什么是错的,不知道如何解决它。我只希望有人能引导我走向解决方案。感谢你的时间!
这是我的代码:
package com.example.jsouptest;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Document doc;
try {
doc = Jsoup.connect("http://google.com/").get();
String title = doc.title();
System.out.print(title);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
答案 0 :(得分:19)
你有一个
android.os.NetworkOnMainThreadException
这与你的罐子正常工作无关。
新版本的Android会引发异常,因此您不会锁定执行网络操作的UI线程(主线程)。
使用AsyncTask(有关AsyncTask的每个部分可以找到的内容的简单说明here)或其他Thread用于网络内容。如果您需要在后台工作完成后更新UI,则Asynctask更易于使用。
使用代码库的AsyncTask示例可以是:
private class MyTask extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
String title ="";
Document doc;
try {
doc = Jsoup.connect("http://google.com/").get();
title = doc.title();
System.out.print(title);
} catch (IOException e) {
e.printStackTrace();
}
return title;
}
@Override
protected void onPostExecute(String result) {
//if you had a ui element, you could display the title
((TextView)findViewById (R.id.myTextView)).setText (result);
}
}
我假设:
TextView
),因为这通常是AsyncTasks的用途。要调用AsyncTask,请将其放在setContentView(R.layout.activity_main);
new MyTask().execute();
答案 1 :(得分:-3)
导入这些库android.os.NetworkOnMainThreadException
和android.os.StrictMode
并使用以下严格模式
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
同时将此行添加到清单:
<uses-permission android:name="android.permission.INTERNET" />