Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决Android Studio上的HttpURLConnection连接问题_Java_Android_Httpurlconnection - Fatal编程技术网

Java 如何解决Android Studio上的HttpURLConnection连接问题

Java 如何解决Android Studio上的HttpURLConnection连接问题,java,android,httpurlconnection,Java,Android,Httpurlconnection,我目前正在尝试在Android Studio上进行请求后练习。我创建了一个按钮,当单击按钮时,它应该从textview中获取一个数字,并将其作为参数传递给URL,然后获得响应 我已经学会了如何自己处理post请求,当我在VisualStudio代码上运行它时,我的代码可以正常工作。 但是,当我在Android Studio上运行相同的代码时,连接不会发生 这是我的密码 Button translate = findViewById(R.id.transButton); trans

我目前正在尝试在Android Studio上进行请求后练习。我创建了一个按钮,当单击按钮时,它应该从textview中获取一个数字,并将其作为参数传递给URL,然后获得响应

我已经学会了如何自己处理post请求,当我在VisualStudio代码上运行它时,我的代码可以正常工作。 但是,当我在Android Studio上运行相同的代码时,连接不会发生

这是我的密码

Button translate = findViewById(R.id.transButton);
        translate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v){
                TextView postText = findViewById(R.id.postText);

                String number = result.getText().toString();

                String output = "";

                HttpURLConnection connection = null;
                try {
                    URL url = new URL("some random url that i replaced with");

                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("POST");
                    connection.setRequestProperty("Accept-Charset","UTF-8");
                    connection.setDoOutput(true);
                    connection.setDoInput(true);

                    connection.connect();

                    String parameters = "random parameters";
                    OutputStream out = connection.getOutputStream();
                    BufferedWriter writer = new BufferedWriter(
                            new OutputStreamWriter(out, "UTF-8"));
                    writer.write(parameters);
                    writer.flush();
                    writer.close();
                    out.close();

                    int responseCode = connection.getResponseCode();

                    if(responseCode == HttpURLConnection.HTTP_OK){
                        output += "Status: True\n";
                        String line;
                        InputStream in = new BufferedInputStream(connection.getInputStream());
                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                        while ((line = reader.readLine()) != null) {
                            String[] list = line.split(",");
                            String[] message = list[2].split(":");
                            output += message[1];
                        }
                        reader.close();
                    }
                    else{
                        output += "Status: False\n";
                    }
                    postText.setText(output);

                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setMessage(output);
                    builder.setTitle("Magic Number");
                    builder.setCancelable(true);
                    builder.setPositiveButton(
                            "Ok",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog, int which) {
                                    dialog.cancel();
                                }
                            }
                    );
                    AlertDialog alert = builder.create();
                    alert.show();

                } catch (MalformedURLException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }


            }
        });
我用随机字符串替换了URL和参数

问题发生在第
行connection.connect()
处。我尝试通过更改textview文本来跟踪问题,发现连接从未发生。同样,如果我在Visual Studio代码上运行完全相同的代码,它将连接,并且我可以从服务器获取响应,但是
connect.connect()
似乎没有在Android Studio上运行


在任何人询问之前,我确实在清单文件中授予了互联网权限

在Android中,您不能在主线程上运行网络请求。将所有网络代码移动到后台线程,如
AsyncTask
我在某处看到过。但是我无法在mainActivity类中实现AsyncTask,因为它已经实现了AppCompatActivity。我是否创建一个不同的类或方法并将代码放在其中?我到底要怎么做?谢谢你的帮助!首先,不要为此使用AsyncTask。研究Android的实际HTTP库,如Volley或Okhttp,尝试在项目中使用RESTAPI调用的改型库。出现了什么问题?在Android中,不能在主线程上运行网络请求。将所有网络代码移动到后台线程,如
AsyncTask
我在某处看到过。但是我无法在mainActivity类中实现AsyncTask,因为它已经实现了AppCompatActivity。我是否创建一个不同的类或方法并将代码放在其中?我到底要怎么做?谢谢你的帮助!首先,不要为此使用AsyncTask。研究Android的实际HTTP库,如Volley或Okhttp,尝试在项目中使用RESTAPI调用的改型库。会出现什么问题?