首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android:当我试图从网站检索信息时,为什么我的android应用程序显示一个空布局,然后崩溃?

Android:当我试图从网站检索信息时,为什么我的android应用程序显示一个空布局,然后崩溃?
EN

Stack Overflow用户
提问于 2017-07-07 12:18:10
回答 2查看 48关注 0票数 0

我正在尝试检索一个网站的源代码,但我的应用程序既不显示我的gui,也不打印到日志。

这是我的代码。

代码语言:javascript
运行
复制
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.concurrent.ExecutionException;

public class MainActivity extends AppCompatActivity {

public class DownloadTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... urls) {

        String result = "";
        URL url;
        HttpURLConnection urlConnection = null;

        try{

            url = new URL(urls[0]);
            urlConnection = (HttpURLConnection)url.openConnection();

            InputStream in = urlConnection.getInputStream();

            InputStreamReader reader = new InputStreamReader(in);

            int data = reader.read();           //start reading inputstream reader

            while(data!=-1){
                char current = (char) data;

                result += current;

                data = reader.read();

            }
            return result;

        }
        catch (Exception e){

            e.printStackTrace();
            return null;
        }


    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    DownloadTask task = new DownloadTask();
    String result = null;

    try {
        result = task.execute("https://www.therichest.com/top-lists/top-100-richest-celebrities").get();

        Log.i("Contents of the url:", result);

    }
    catch (InterruptedException e) {
        e.printStackTrace();
    }
    catch (ExecutionException e) {
        e.printStackTrace();
    }

}

}

这就是我的日志中显示的内容

代码语言:javascript
运行
复制
07-06 21:08:01.020 2025-2025/? I/art: Late-enabling -Xcheck:jni
07-06 21:08:01.050 2025-2031/? I/art: Debugger is no longer active
07-06 21:08:01.082 2025-2025/? W/System: ClassLoader referenced unknown path: /data/app/com.example.jimmy.guesstherich-1/lib/arm
07-06 21:08:01.116 2025-2025/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-06 21:08:01.138 2025-2025/? D/PhoneWindowEx: [PWEx][generateLayout] setLGNavigationBarColor : colors=0xff000000
07-06 21:08:01.138 2025-2025/? I/PhoneWindow: [setLGNavigationBarColor] color=0x ff000000
07-06 21:08:01.233 2025-2039/? D/libc: skt_base:0, kt_base:0, mptcp_enabled:0, socks_enabled:0, wifi_connected:1
07-06 21:08:01.234 2025-2039/? D/libc: skt_base:0, kt_base:0, mptcp_enabled:0, socks_enabled:0, wifi_connected:1
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err: java.net.ConnectException: failed to connect to www.therichest.com/34.202.89.146 (port 443): connect failed: ETIMEDOUT (Connection timed out)
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:124)
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:452)
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.net.Socket.connect(Socket.java:888)
07-06 21:08:32.295 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:117)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.http.SocketConnector.connectRawSocket(SocketConnector.java:188)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.http.SocketConnector.connectTls(SocketConnector.java:99)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:151)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:187)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:238)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:134)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:384)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:371)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:289)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:408)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.example.jimmy.guesstherich.MainActivity$DownloadTask.doInBackground(MainActivity.java:29)
07-06 21:08:32.296 2025-2039/com.example.jimmy.guesstherich W/System.err:     at com.example.jimmy.guesstherich.MainActivity$DownloadTask.doInBackground(MainActivity.java:15)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:295)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at java.lang.Thread.run(Thread.java:818)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err: Caused by: android.system.ErrnoException: connect failed: ETIMEDOUT (Connection timed out)
07-06 21:08:32.297 2025-2039/com.example.jimmy.guesstherich W/System.err:     at libcore.io.Posix.connect(Native Method)
07-06 21:08:32.298 2025-2039/com.example.jimmy.guesstherich W/System.err:     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
07-06 21:08:32.298 2025-2039/com.example.jimmy.guesstherich W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:137)
07-06 21:08:32.298 2025-2039/com.example.jimmy.guesstherich W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:122)
07-06 21:08:32.298 2025-2039/com.example.jimmy.guesstherich W/System.err:   ... 26 more
07-06 21:08:32.299 2025-2025/com.example.jimmy.guesstherich D/AndroidRuntime: Shutting down VM

它会显示30-45秒的空白屏幕,然后崩溃,日志打印以下内容

代码语言:javascript
运行
复制
07-06 21:08:32.300 2025-2025/com.example.jimmy.guesstherich E/AndroidRuntime: FATAL EXCEPTION: main
                                                                              Process: com.example.jimmy.guesstherich, PID: 2025
                                                                              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.jimmy.guesstherich/com.example.jimmy.guesstherich.MainActivity}: java.lang.NullPointerException: println needs a message
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2440)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500)
                                                                                  at android.app.ActivityThread.access$900(ActivityThread.java:163)
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5585)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)
                                                                               Caused by: java.lang.NullPointerException: println needs a message
                                                                                  at android.util.Log.println_native(Native Method)
                                                                                  at android.util.Log.i(Log.java:160)
                                                                                  at com.example.jimmy.guesstherich.MainActivity.onCreate(MainActivity.java:67)
                                                                                  at android.app.Activity.performCreate(Activity.java:6279)
                                                                                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
                                                                                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2393)
                                                                                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2500) 
                                                                                  at android.app.ActivityThread.access$900(ActivityThread.java:163) 
                                                                                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                  at android.os.Looper.loop(Looper.java:148) 
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5585) 
                                                                                  at java.lang.reflect.Method.invoke(Native Method) 
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) 
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

知道这是怎么回事吗?

我是一个初学者,所以我为任何错误道歉。

我也在遵循一个视频教程,并有三次检查,一切都是一样的。他的作品完全没问题。如果重要的话,那就是Rob Percival的“完整的Android开发课程”。

提前谢谢,我很感激!

EN

回答 2

Stack Overflow用户

发布于 2017-07-07 12:24:14

此行将始终返回null(因为asynktask是异步的):

代码语言:javascript
运行
复制
result = task.execute("https://www.therichest.com/top-lists/top-100-richest-celebrities").get();

如果您尝试打印带有空对象的日志,则会导致崩溃。

布局为空是因为应用程序无法连接到网站,并接收到超时异常。

票数 2
EN

Stack Overflow用户

发布于 2017-07-07 13:15:22

您之所以面临这个问题,是因为您在浏览器中放入了错误URL检查url。

代码语言:javascript
运行
复制
result = task.execute("https://www.therichest.com/top-lists/top-100-richest-celebrities").get();

这是演示URL

代码语言:javascript
运行
复制
result = task.execute("http://api.androidhive.info/contacts/").get();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44962480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档