Java 使用Jsoup的NetworkOnMainThreadException

Java 使用Jsoup的NetworkOnMainThreadException,java,android,jsoup,Java,Android,Jsoup,我在安卓上,使用Jsoup库 运行具有以下代码的maintactivity类时: import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.wi

我在安卓上,使用
Jsoup

运行具有以下代码的
maintactivity
类时:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

public class FineMain extends AppCompatActivity {

    entryPoint entryPointObj = new entryPoint();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fine_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        test();
    }
    public void test(){
        Document doc;
        String url = "http://tribune.com.pk/story/1136693/srk-shares-felt-daughter-suhanas-swimsuit-picture-going-viral/";
        try {
            doc = Jsoup.connect(url).timeout(20 * 1000).userAgent("Chrome").get();
            System.out.println(doc.text());
            Elements links = doc.select("h1");
            System.out.println(links.text());
        } catch (IOException e) {
            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.menu_fine_main, menu);
//        entryPointObj.ret();

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
它给出了这个错误。我只是添加了一个函数of
Jsoup
。但是,在
MainActivity
类中添加的函数在
Eclipse
IDE中有效地工作

08-11 07:25:25.132 10704-10704/? E/AndroidRuntime: FATAL EXCEPTION: main
                                                   Process: com.example.awais.fine, PID: 10704
                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.awais.fine/com.example.awais.fine.FineMain}: android.os.NetworkOnMainThreadException
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
                                                       at android.app.ActivityThread.access$800(ActivityThread.java:135)
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                       at android.os.Looper.loop(Looper.java:136)
                                                       at android.app.ActivityThread.main(ActivityThread.java:5021)
                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                       at java.lang.reflect.Method.invoke(Method.java:515)
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827)
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643)
                                                       at dalvik.system.NativeStart.main(Native Method)
                                                    Caused by: android.os.NetworkOnMainThreadException
                                                       at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1145)
                                                       at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
                                                       at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
                                                       at java.net.InetAddress.getAllByName(InetAddress.java:214)
                                                       at com.android.okhttp.internal.Dns$1.getAllByName(Dns.java:28)
                                                       at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:216)
                                                       at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:122)
                                                       at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:292)
                                                       at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
                                                       at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
                                                       at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
                                                       at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:89)
                                                       at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:563)
                                                       at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:540)
                                                       at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:227)
                                                       at org.jsoup.helper.HttpConnection.get(HttpConnection.java:216)
                                                       at com.example.awais.fine.FineMain.test(FineMain.java:31)
                                                       at com.example.awais.fine.FineMain.onCreate(FineMain.java:25)
                                                       at android.app.Activity.performCreate(Activity.java:5318)
                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1090)
                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                                                       at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                       at android.os.Looper.loop(Looper.java:136) 
                                                       at android.app.ActivityThread.main(ActivityThread.java:5021) 
                                                       at java.lang.reflect.Method.invokeNative(Native Method) 
                                                       at java.lang.reflect.Method.invoke(Method.java:515) 
                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:827) 
                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:643) 
                                                       at dalvik.system.NativeStart.main(Native Method) 

有什么指导原则吗?

您正在尝试通过主线程访问网络,但在Android上是不可能的

看看这个类,它允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序


希望有帮助,

还有其他简单的例子吗?是的,您的代码在Eclipse中独立于Android运行,因为操作系统不会阻止您在UI线程上编写阻塞代码。欢迎您为Android使用许多不同的HTTP库,并为Jsoup提供字符串响应。否则,您需要使用异步任务。