首页 > 解决方案 > 如何抓取网站表格内容并放入谷歌地图片段?(安卓)

问题描述

当我实现谷歌地图时它工作正常,但是当我添加网络抓取功能时它可以构建但应用程序在运行时崩溃,是网络抓取错误吗?如何修改它以抓取网络表格内容并加载到谷歌地图片段中?我想使用带有片段的标记来显示网络抓取内容和位置。谢谢。

public class mapActivity extends AppCompatActivity implements OnMapReadyCallback {
GoogleMap map;
private final LatLng PERTH = new LatLng(-31.952854, 115.857342);
private final LatLng SYDNEY = new LatLng(-33.87365, 151.20689);
private final LatLng BRISBANE = new LatLng(-27.47093, 153.0235);

private Marker markerPerth;
private Marker markerSydney;
private Marker markerBrisbane;


String text1 = null;
String text2 = null;
String text3 = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    final
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    getdata();

}

private boolean getdata() {
    try {
        Document doc = Jsoup.connect("url").get();
        Elements data1 = doc.select("table");
        text1 = data1.select("tr").get(1).text();
        text2 = data1.select("tr").get(2).text();
        text3 = data1.select("tr").get(3).text();

    } catch (IOException e) {
        e.printStackTrace();
    }
    return true;
}


@Override
public void onMapReady(GoogleMap map) {
    // Add some markers to the map, and add a data object to each marker.
    markerPerth = map.addMarker(new MarkerOptions()
            .position(PERTH)
            .title("Perth")
            .snippet("details"+ text1));


    markerSydney = map.addMarker(new MarkerOptions()
            .position(SYDNEY)
            .title("Sydney")
            .snippet("Details"+text2));


    markerBrisbane = map.addMarker(new MarkerOptions()
            .position(BRISBANE)
            .title("Brisbane")
            .snippet("Details"+text3));



}

以下是红色错误代码:

2021-03-25 22:57:58.020 4987-4987/com.example.mpsd E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.mpsd, PID: 4987
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mpsd/com.example.mpsd.mapActivity}: java.lang.IllegalArgumentException: Malformed URL: url
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.IllegalArgumentException: Malformed URL: url
        at org.jsoup.helper.HttpConnection.url(HttpConnection.java:131)
        at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:70)
        at org.jsoup.Jsoup.connect(Jsoup.java:73)
        at com.example.mpsd.mapActivity.getdata(mapActivity.java:45)
        at com.example.mpsd.mapActivity.onCreate(mapActivity.java:39)
        at android.app.Activity.performCreate(Activity.java:8000)
        at android.app.Activity.performCreate(Activity.java:7984)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: java.net.MalformedURLException: no protocol: url
        at java.net.URL.<init>(URL.java:601)
        at java.net.URL.<init>(URL.java:498)
        at java.net.URL.<init>(URL.java:447)
        at org.jsoup.helper.HttpConnection.url(HttpConnection.java:129)
        at org.jsoup.helper.HttpConnection.connect(HttpConnection.java:70) 
        at org.jsoup.Jsoup.connect(Jsoup.java:73) 
        at com.example.mpsd.mapActivity.getdata(mapActivity.java:45) 
        at com.example.mpsd.mapActivity.onCreate(mapActivity.java:39) 
        at android.app.Activity.performCreate(Activity.java:8000) 
        at android.app.Activity.performCreate(Activity.java:7984) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
        at android.os.Handler.dispatchMessage(Handler.java:106) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

我已经解决了问题,可以参考[Answer!]在Asynctask中添加谷歌地图的标记

标签: javaandroidandroid-studiojsoupgoogle-maps-markers

解决方案


推荐阅读