在单独的线程中运行HTTP请求不起作用

时间:2018-01-05 07:46:50

标签: java android multithreading http request

我一直试图让一些非常简单的代码工作,它应该读取一个在线文件并在日志中打印该文件的内容。起初我并不知道它需要在一个单独的线程中处理,所以我将它留在onCreate方法中。现在我借助这个问题把它放到一个单独的线程中:How to use separate thread to perform http requests但应用程序仍然崩溃!由于我迫不及待地想要使用这个,所以我可以继续学习如何编写这个应用程序,我将插入我使用的确切代码:

package com.dan6erbond.schoolhelper;

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {

    private String link = "https://dan6erbond.github.io/I1A/Documents/Zusammenfassungen/Zusammenfassungen.json";

    String content;

    Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.i("TAG", content);
        }
    };

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

        Thread downloadFile = new Thread(new Runnable(){
            @Override
            public void run(){
                try {
                    URL url = new URL(link);
                    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
                    String str;
                    while ((str = in.readLine()) != null) {
                        content += str;
                    }
                    Log.i("TAG", content);
                    in.close();
                } catch (Exception e) {
                    Log.i("TAG", "Error occured!");
                }

                handler.sendEmptyMessage(0);
            }
        });
        downloadFile.start();
    }
}

在日志中发送错误消息:

01-05 07:40:33.320 9601-9622/com.dan6erbond.schoolhelper I/TAG: Error occured!
如果有人可以帮我解决这个问题,我真的很开心。它可能非常简单,但我刚开始在Android Studio中进行编码,所以我对此非常陌生。

1 个答案:

答案 0 :(得分:0)

我只需要添加INTERNET权限。我通过打印错误消息来解决这个问题:

spring.datasource.tomcat.max-active=50

导致了这个:

Log.i("TAG", e.getMessage());

我刚将其添加到Android Manifest:

01-05 08:05:10.806 11815-11838/com.dan6erbond.schoolhelper I/TAG: Permission denied (missing INTERNET permission?)

感谢大家的帮助!