gpt4 book ai didi

java - Android:HttpUrlConnection 返回空输出

转载 作者:行者123 更新时间:2023-12-02 10:46:28 26 4
gpt4 key购买 nike

所以我尝试从 URL 读取流并将结果设置在 TextView 中。问题是 Android studio 代码在我的设备上没有返回任何结果,而 net beans 上的相同代码返回流输出。我不明白问题出在哪里,因为我使用的是 Android studio 和 Netbeans 中使用的相同代码。Als android studio 上的应用程序没有崩溃或抛出任何错误。

只是为了让你知道我已经在手机浏览器中打开了 android studio 代码中的 URL 并且它正在工作。我还在 list 中添加了互联网权限。我确实将函数changeText放在“onClick”属性中。

以下代码在 NetBeans 和 Android Studio(在我的 Galaxy S6 上)上进行了测试。

Android Studio 代码:

       package com.example.mohammed.acc;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

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

public class MainActivity extends AppCompatActivity {

public void changeText (View v){
TextView t1 = (TextView)findViewById(R.id.t1);
URL url;
HttpURLConnection con;

try{
StringBuilder sb = new StringBuilder();
url = new URL("http://192.168.1.104:8000/api");
con = (HttpURLConnection) url.openConnection();
BufferedInputStream in = new BufferedInputStream(con.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String Line = "";

while((Line = reader.readLine()) != null){
sb.append(Line);
}

t1.append(sb.toString());
in.close();




}
catch (MalformedURLException ex) {
t1.setText(ex.getMessage());
}
catch (IOException ex){
t1.setText(ex.getMessage());
} catch (Exception ex){
t1.setText(ex.getMessage());
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

}
}

NetBeans 代码:

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaapplication21;


import java.io.BufferedInputStream;
import java.util.Stack;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class JavaApplication21 {


public static void main(String[] args) {
try{
StringBuilder sb = new StringBuilder();
URL url = new URL("http://127.0.0.1:8000/api");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
BufferedInputStream in = new BufferedInputStream(con.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String Line = "";

while((Line = reader.readLine()) != null){
sb.append(Line);
}
System.out.print(sb.toString());
in.close();
}
catch (Exception ex){
System.out.print(ex.getMessage());
}

}

}

NetBeans 输出:正如你所看到的,它正在工作。 Netbeans outputAndroid studio,我手机的输出: enter image description here记录快照 这是运行并单击按钮后的结果。 enter image description here

最佳答案

如果调用您的代码,它应该会导致 NetworkOnMainThreadException(您无法在主线程上进行网络调用)。因此很可能它根本没有被调用,并且您的按钮处理代码已损坏。

实际上,我看到你正在捕获异常。所以是的,它会抛出一个 NetworkOnMainThreadException,而你捕获并忽略它。即使是在调试器中进行基本的单步调试或阅读日志也会告诉您,您是否费心打印了要记录的异常。如果您没有在某处打印异常,如果您没有看到任何错误但也没有发生任何事情,请不要感到惊讶。

这也不是一个错误,但在事件处理程序中运行 findViewById 被认为是一种不好的做法。这些应该在 onCreate 中运行一次并缓存结果。

关于java - Android:HttpUrlConnection 返回空输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com