0

我最近开始在 Android 中开发程序,并且对这个简单的代码有一个小问题。我正在尝试解析网站的标题并将其存储在一个字符串中,但到目前为止还没有成功。是因为我没有在 Async 中这样做吗?或者这可能是一个不同的问题?

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


}
}
4

2 回答 2

0

从您的日志中:

android.os.NetworkOnMainThreadException

当应用程序尝试在其主线程上执行网络操作时,将引发此异常。

Jsoup logicAsyncTask中运行。

(确保您也添加<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);
于 2013-10-12T12:55:32.313 回答
0
public static int SDK_INT = android.os.Build.VERSION.SDK_INT;

在您提出要求之前写下这段代码

if (SDK_INT >= 10) {
                ThreadPolicy tp = ThreadPolicy.LAX;
                StrictMode.setThreadPolicy(tp);
            }

使用 asynctask 是更好的做法。

于 2013-10-12T13:18:59.890 回答