java - Android 上网抛出 IOException

标签 java android inputstream httpurlconnection ioexception

我正在尝试编写一个应用程序来 ping 网页,然后触发一个操作。

package com.anton.lightcontrol;

import android.graphics.Color;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Switch;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import javax.net.ssl.HttpsURLConnection;

public class MainActivity extends AppCompatActivity {

    Switch onOffSwitch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        onOffSwitch = (Switch) findViewById(R.id.onOffSwitch);
        onOffSwitch.setChecked(true);
        onOffSwitch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (onOffSwitch.isChecked()==true) {
                    onOffSwitch.setTextColor(Color.GREEN);
                    LightConnection("http://raspberrypi/toggle_on.py");



                }
                else if (onOffSwitch.isChecked()==false){
                    onOffSwitch.setTextColor(Color.RED);
                    LightConnection("http://raspberrypi/toggle_off.py");

                }
            }
        });
    }

    private void LightConnection(final String accessUrl){
        (new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                Log.d("EXEC", "#1");
                URL url = new URL(accessUrl);
                Log.d("EXEC", "#2");
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                Log.d("EXEC", "#3");

                InputStreamReader input = new InputStreamReader(conn.getInputStream(), "utf-8");
                Log.d("EXEC", "#4");

                BufferedReader reader = new BufferedReader(input,2000);
                Log.d("EXEC", "#5");
                String line = reader.readLine();
                Log.d("EXEC", "#6");


            }
                catch (IOException e){
                    Log.d("EXEC", "#10 - CATCH");
                    onOffSwitch.setTextColor(Color.YELLOW);
                }

            }
        })).start();
    }
}

我的调试输出如下所示:

D/EXEC: #1
D/EXEC: #2
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/EXEC: #3
I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
D/EXEC: #10 - CATCH

我一直在寻找 isSBSettingEnabled false 错误的解决方案,但找不到任何对我有帮助的内容。

我正在 Samsung M20 智能手机上运行我的应用程序。

最佳答案

这从技术上讲并不是一个错误,因为它警告您没有使用网络安全配置。有关此的更多信息,请访问:Network security configuration: Android Developer Docs .

但是,如果您仅限于使用 HTTP,则可以通过将其添加到 <application> 来允许明文流量来解决连接问题。标签 AndroidManifext.xml :

android:usesCleartextTraffic="true"

关于java - Android 上网抛出 IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159361/

相关文章:

java - 如何动态地在彼此下方添加按钮

java - 使用相同的 API 编写 Word 和 PDF 文档

android - 如何禁用 RecyclerView fling 但保持滚动工作?

Java套接字读取输入流而不阻塞

Java:将字符串发送到输入流

java - JobConf 与 Hadoop 1.0.4 的配置

java - wso2 IS 520 用户帐户已禁用声明验证为 'admin'

java - Android 应用程序中的 Google 登录

java - Android Room 数据库删除查询不删除任何行

java - InputStream 的自定义实现