Java 如何解决Android Studio上的HttpURLConnection连接问题
我目前正在尝试在Android Studio上进行请求后练习。我创建了一个按钮,当单击按钮时,它应该从textview中获取一个数字,并将其作为参数传递给URL,然后获得响应 我已经学会了如何自己处理post请求,当我在VisualStudio代码上运行它时,我的代码可以正常工作。 但是,当我在Android Studio上运行相同的代码时,连接不会发生 这是我的密码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
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调用的改型库。会出现什么问题?