【问题标题】:Running HTTP Request in seperate Thread not working在单独的线程中运行 HTTP 请求不起作用
【发布时间】:2018-01-05 07:46:49
【问题描述】:

我一直试图让一些非常简单的代码工作,它应该读取一个在线文件并在日志中打印该文件的内容。起初我不知道它需要在单独的线程中处理,所以我将它留在了 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 中编码,所以我真的很陌生。

【问题讨论】:

  • catch (Exception e) { Log.i("TAG", "Error occured!"); } 尝试登录真正的异常信息
  • 发生了什么样的错误?它不存在于您的代码中。而不是“发生错误”,而是使用 e.getMessage() 来了解确切的错误。
  • 试过了,没用:(
  • 抛出以下错误:01-05 08:05:10.806 11815-11838/com.dan6erbond.schoolhelper I/TAG:权限被拒绝(缺少 INTERNET 权限?)

标签: java android multithreading http request


【解决方案1】:

我只需要添加 INTERNET 权限。我通过打印错误消息发现了这一点:

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

这导致了:

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

我刚刚将此添加到 Android 清单中:

<uses-permission android:name="android.permission.INTERNET"/>

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 2011-03-24
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2011-01-28
    • 1970-01-01
    相关资源
    最近更新 更多