Android:齐射无连接错误

368yc8dk  于 2023-01-15  发布在  Android
关注(0)|答案(6)|浏览(124)

我尝试通过Android连接到REST服务器(我用Spark创建的)。我可以用POSTMAN(Chrome Addon)发送POST请求,并得到我想要的,但当我尝试从Android设备发送POST请求时,我得到以下错误:

E/error: com.android.volley.NoConnectionError: java.net.ConnectException: failed to connect to /127.0.0.1 (port 4567) after 2500ms: isConnected failed: ECONNREFUSED (Connection refused)

这是服务器部分:

Spark.post("/up", new Route()
    {
        public Object handle(Request req, Response res)
        {
            System.out.println(req.queryParams());
            return "its something";
        }
    });

这是Android部分:

public void sendHTTPRequest()
{
    RequestQueue MyRequestQueue = Volley.newRequestQueue(this);

    String url = "http://127.0.0.1:4567/up";
    StringRequest MyStringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            //This code is executed if the server responds, whether or not the response contains data.
            //The String 'response' contains the server's response.
        }
    }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately.
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("error",error.toString());
        }
    }) {
        protected Map<String, String> getParams() {
            Map<String, String> MyData = new HashMap<String, String>();
            MyData.put("Field", "Value"); //Add the data you'd like to send to the server.
            return MyData;
        }
    };
    MyRequestQueue.add(MyStringRequest);
}

我还在清单文件中添加了重要的权限。
我找了几个小时,但我不能解决我的问题:(我希望你能帮助我。最好的问候,费利克斯

yks3o0rb

yks3o0rb1#

TLDR;使用服务器的wifi或以太网IP地址,而不是127.0.0.1

127.0.0.1是Android设备上的环回IP地址。您需要计算机NIC的IP地址(网卡)。我猜你运行的是模拟器或某种Android设备。如果你的服务器运行在本地Wifi网络上,检索Wifi适配器以太网适配器的IP地址,然后将127.0.0.1替换为所述地址。

Linux系统:ifconfig [wlan0]
窗口:ipconfig
编辑2020:
在Android的新版本中,所有HTTP流量都必须加密,否则Android框架将抛出错误。因此,在本地服务器上测试时,建议使用Ngrok这样的隧道服务器-它附带免费的SSL。

qyswt5oh

qyswt5oh2#

Give Internet Permission:

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

Add this line in your manifest:

android:usesCleartextTraffic="true"

because I faced the same issue with my project.

It should look like this:

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>
62lalag4

62lalag43#

如果您测试在本地,尝试检查一个ip地址(在windows上打开cmd运行ipconfig),然后再次输入您的ip地址。
这是一个例子
字符串url = http://127.0.0.1:8080/user〈--错误
字符串url =“http://172.16.5.240:8080/user〈--工作

ncecgwcz

ncecgwcz4#

Android emulator uses 10.0.2.2作为主机环回接口。使用它代替127.0.0.1,后者本身就是仿真器。

np8igboo

np8igboo5#

检查你的xammp或wamp连接。如果mysql和apache服务没有激活,那么启动所有服务并运行你的应用程序,它会给出正确的输出

ckocjqey

ckocjqey6#

将http更改为https,这个解决了我的问题或android:usesCleartextTraffic=“true”在清单中

相关问题