Java Android Studio从GitHub API请求返回exeption

Java Android Studio从GitHub API请求返回exeption,java,android,android-studio,github-api,Java,Android,Android Studio,Github Api,我正在创建Android应用程序以从GitHub帐户获取存储库信息。 函数从GitHub帐户获取存储库数据。 我使用Android Studio只收到了2-3次结果,之后我在urlConnection.getResponseCode()中收到以下异常:Android.os.NetworkOnMainThreadException。 但我试着在intelijidea(命令行应用程序)中运行它,它一直在工作,没有问题 你能告诉我哪里有错误吗 private String getGitHubRepos

我正在创建Android应用程序以从GitHub帐户获取存储库信息。 函数从GitHub帐户获取存储库数据。 我使用Android Studio只收到了2-3次结果,之后我在
urlConnection.getResponseCode()
中收到以下异常:
Android.os.NetworkOnMainThreadException
。 但我试着在intelijidea(命令行应用程序)中运行它,它一直在工作,没有问题

你能告诉我哪里有错误吗

private String getGitHubRepositoryContent(){
            String line = null;
            try {
                URL url = new URL("https://api.github.com/users/vGrynishyn/repos");

                HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
                int responseCode = urlConnection.getResponseCode();

                InputStream in;
                if (urlConnection.getResponseCode() < HttpsURLConnection.HTTP_BAD_REQUEST) {
                    in = urlConnection.getInputStream();
                } else {
                    in = urlConnection.getErrorStream();
                }

                BufferedReader br = new BufferedReader(new InputStreamReader(in, "UTF-8"));
                while (br.read() != -1) {
                    line = br.readLine();
                }

                System.out.println("Response code: " + responseCode);
                System.out.println(line);

            } catch (Exception e) {
                e.printStackTrace(); //do something
            }
            return line;
    }
私有字符串getGitHubRepositoryContent(){
字符串行=null;
试一试{
URL=新URL(“https://api.github.com/users/vGrynishyn/repos");
HttpsURLConnection urlConnection=(HttpsURLConnection)url.openConnection();
int responseCode=urlConnection.getResponseCode();
输入流输入;
if(urlConnection.getResponseCode()

该错误表明您正在主线程中执行网络操作。Android操作系统不允许你这样做是为了防止你的UI冻结。在另一个线程中执行网络操作,使用改装库或Asyntasks进行网络操作

这里的问题是您正在主线程上运行方法getGitHubRepositoryContent()。这不是在Android上执行网络请求的正确方法。我还建议不要使用HttpsURLConnection。使用或发出HTTP请求,因为它们自己负责在后台线程中进行网络调用,并在主线程中回调HTTP响应

但我试着在intelijidea(命令行应用程序)中运行它,它一直在工作,没有问题

这在命令行中运行时不会出错,因为没有要处理的单独UI事件。在命令行中,当发出请求时,您的代码会在其运行的同一线程上发出请求,这会冻结程序,但不会引起注意,因为没有单独的UI可供查看 明显的冰冻


TL;DR在Android中,您不应该在主线程上进行网络请求。建议使用改装或截击。

非常感谢!!它在asynctask中,但我将它移到了simple函数中。我不知道为什么欢迎你,请记住标记我的答案:)