我有一个定制设备,它通过热点与我的手机相连,通过我的应用程序,我可以正确地连接和登录到那个定制设备,如下所示:

http://x.x.x.x/cgi-bin/web.cgi?action=API&action2=Login&param1=username&param2=password

使用此连接序列:

url = new URL(URLCommand);
connection = (HttpURLConnection) url.openConnection();

if (android.os.Build.VERSION.SDK_INT > 9)
{
    StrictMode.ThreadPolicy policy;
    policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_CREATED) {

我可以得到正确的responseCode = 200,这是可以的. 然后,我try 发送另一个HTTP URL以try 重新启动该自定义设备,如下所示:

http://x.x.x.x/cgi-bin/web.cgi?session_id=xxxxxxxxxx&action=API&action2=value1&param1=RESTART

用作帖子:

url = new URL(URLCommand);
connectionForCommand = (HttpURLConnection) url.openConnection();
connectionForCommand.setRequestMethod("POST");
connectionForCommand.setDoOutput(true);
BufferedReader responseReader = new BufferedReader(new InputStreamReader(connectionForCommand.getInputStream()));
String responseData = responseReader.readLine();

所以我认为setDoOutput(true)应该"执行"该URL,并使该定制设备重新启动…

我还try 使用lambda将此代码放在线程内部,如下所示:

Thread = () -> {}

为了避免IOException次在DialogFragment的主要活动中运行它,但它不起作用. 有没有可能在不使用任何第三部分的情况下执行该http的方法?还是因为HttpURLConnection不适合这个目标,所以我必须只使用第三部分来实现这个目标?谢谢!干杯

EDIT:

我还try 使用排球库执行StringRequest,如下所示:

new Thread(() -> {

    urlPostRequest = "http://x.x.x.x/cgi-bin/web.cgi?session_id=xxxxxxxxxx&action=API&action2=value1&param1=RESTART";
    try{
        RequestQueue arq = Volley.newRequestQueue(getContext());
        arq.getCache().clear();

        StringRequest urlPostRequest = new StringRequest(Request.Method.POST, URLCommand,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    try {
                        JSONObject obj = new JSONObject(response);
                        String  value= obj.getString("value");
                        showAlert("LogCat", value.toString());
                    } catch(JSONException e) { e.printStackTrace(); 
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    showAlert("LogCat", getActivity().getResources().getString(R.string.st_errorresponse));
                }
        });
        arq.add(urlPostRequest);
    } catch (Exception e) { e.printStackTrace(); }

}).start();

但这两种方式都不起作用,即使我安顿了下来……也许我错过了什么需要考虑的地方?…

推荐答案

你试过OkHttp库了吗?

以下是一个使用OkHttp的Android帖子示例.

https://www.digitalocean.com/community/tutorials/okhttp-android-example-tutorial

Java相关问答推荐

javafx getHostServices(). showDocument()调出Chrome而不是默认浏览器(Linux)

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

伪类focus-in不适用于PFA中的选项卡

try 使用Java 9或更高版本对特殊对象图进行解析时出现NullPointerException

为什么Java的代码工作(if condition内部的实例)

Java Swing:初始化身份验证类后未检测到ATM_Interface键事件

放气总是压缩整个街区吗?

为什么S的文档中说常量方法句柄不能在类的常量池中表示?

为什么Java编译器不区分不同类型的方法?

我正在try 跟踪数组中最大的两个数字

有没有可能在时间范围内得到多种解决方案?

二进制数据的未知编码/序列化

错误:未找到扩展元素在JBossEAP 7.2中安装FUSE时出错

Quarkus:运行时出现EnumConstantNotPresentException

将stringBuilder + forloop转换为stream + map

如何在Java中的重写方法参数中强制(Enum)接口实现?

如何设置默认序列生成器分配大小

为什么我得到默认方法的值而不是被覆盖的方法的值?

关于正则表达式的一个特定问题,该问题与固定宽度负向后看有关

Hibernate 命名策略导致 Java Spring Boot 应用程序中出现未知列错误