适用于Android的简单Jsoup代码

时间:2013-10-12 12:52:52

标签: android jsoup

我最近开始在Android中开发程序,这个简单的代码遇到了一个小问题。我试图解析一个网站的标题并存储在一个字符串中,但到目前为止都没有成功。是因为我不是在异步中做的吗?或者它可以是一个不同的问题吗?

http://s9.postimg.org/ikycjit9b/android.png

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();
            }
        }


}
}

2 个答案:

答案 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是更好的做法。