我最近开始在Android中开发程序,这个简单的代码遇到了一个小问题。我试图解析一个网站的标题并存储在一个字符串中,但到目前为止都没有成功。是因为我不是在异步中做的吗?或者它可以是一个不同的问题吗?
public class MainActivity extends Activity implements OnClickListener {
private Button btnSearch;
private EditText editTextCarReg;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//-------------------------------------------------
btnSearch = (Button) findViewById(R.id.btnSearch);
btnSearch.setOnClickListener(this);
//------------------------------------------------
editTextCarReg = (EditText) findViewById(R.id.editTextRegistration);
editTextCarReg.setOnClickListener(this);
}
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void example() throws IOException
{
Document doc = Jsoup.connect("http://http://9gag.com/").get();
String title = doc.title();
}
public void onClick(View v)
{
if(v.getId() == btnSearch.getId())
{
try {
example();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
答案 0 :(得分:0)
从您的日志:
android.os.NetworkOnMainThreadException
当应用程序尝试在其主线程上执行网络操作时,抛出此异常。
在AsyncTask中运行Jsoup logic
。
(请务必同时添加<uses-permission android:name="android.permission.INTERNET"/>
)
你可以这样写:
class JsoupTask extends AsyncTask<String, Void, Void> {
private Exception exception;
protected void doInBackground(String... url) {
Document doc = Jsoup.connect(url).get();
String title = doc.title();
...
}
protected void onPostExecute(RSSFeed feed) {
// here you can update your UI thread through Handler, for example
}
}
并打电话,如:
new JsoupTask().execute(url);
答案 1 :(得分:0)
public static int SDK_INT = android.os.Build.VERSION.SDK_INT;
在您的请求之前写下此代码
if (SDK_INT >= 10) {
ThreadPolicy tp = ThreadPolicy.LAX;
StrictMode.setThreadPolicy(tp);
}
使用asynctask是更好的做法。