2 回答

TA贡献1810条经验 获得超4个赞
所以,我终于解决了我的问题,这实际上很复杂。首先,谢谢你,@Stephen C。当我在获取输出流()之后移动响应代码时,我的服务器开始接收请求。重要的是,如果不调用 getResponseCode,则不会发送数据。
但第二个问题是字符串:字符串参数=“f_name”+f_name;
由于我丢失了“=”,POST数组中元素的名称是“f_name123”,值为空))))这就是为什么我无法从$_POST[“f_name”)中获取数据的原因。
另外,我想注意到,只有在连接内访问时,textview才起作用。断开连接后,您可以使用文本视图。
感谢大家的帮助。
下一个代码现在对我有用:
package com.victoria.requester;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.*;
import java.net.*;
import android.widget.TextView;
import java.io.IOException;
import java.net.URL;
import java.net.HttpURLConnection;
public class MainActivity extends AppCompatActivity {
public final static String EXTRA_MESSAGE = "EXTRA_MESSAGE";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
thread.start();
}
Thread thread;
{
thread = new Thread(new Runnable() {
@Override
public void run() {
String url = "http://192.168.56.226:90/wfile.php";
String f_name = "123";
HttpURLConnection httpCon = null;
TextView textView = findViewById(R.id.textView);
try {
URL urlObj = new URL(url);
httpCon = (HttpURLConnection) urlObj.openConnection();
httpCon.setDoOutput(true);
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpCon.setRequestMethod("POST");
String parameters = "f_name=" + f_name;
OutputStreamWriter writer = new
OutputStreamWriter(httpCon.getOutputStream());
writer.write(parameters);
writer.flush();
writer.close();
httpCon.getResponseCode();
} catch (MalformedURLException e) {
textView.setText("bad URL!");
} catch (IOException e) {
textView.setText("network error!");
} finally {
httpCon.disconnect();
textView.setText("All done");
}
}
});
}
}

TA贡献1815条经验 获得超13个赞
问题是您在调用 后调用并写入请求数据。httpCon.getOutputStream()
httpCon.getResponseCode()
正确的顺序是:
调用以获取 URL 的连接对象
getConnection()
按任何顺序:
设置请求方法
设置任何请求属性
调用,因为您打算使用输出流。
setDoOutput(true)
叫
getOutputStream()
写入数据。
关闭流。
获取响应代码。
您当前正在执行的操作将在调用 时引发异常。远程服务器只有在读取请求数据后才能向您发送响应。当您调用它时,告诉客户端堆栈向服务器指示没有更多的请求数据。getOutputStream
getResponseCode()
此外,如果您不打算在某些情况下从连接中读取数据,则不应调用。至少它是多余的。setDoInput(true)
添加回答
举报