使用Jsoup

时间:2016-08-11 15:33:22

标签: java android jsoup

我在Android上,使用Jsoup库。

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

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

它给出了这个错误。我只是添加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) 

任何指导方针?

1 个答案:

答案 0 :(得分:0)

您正尝试在主线程上访问网络,但在Android上无法访问。

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

希望它有所帮助,