我正在尝试将一些数据发布到我的网络服务但是当我在我的设备中测试它时我没有收到错误但同时没有真正发生,平板电脑响应很好一切正常但我的网络服务不是获取任何数据也不会显示任何错误。
我添加了一些Toast消息来检查逻辑流程,并从我可以确定应用程序进入方法将数据发送到Web服务然后什么都不做。
这是我的代码
//Method to post data to webservice
public void post() throws UnsupportedEncodingException
{
try {
Toast.makeText(getBaseContext(), "Creating new user", Toast.LENGTH_SHORT).show();
HttpURLConnection urlConnection = (HttpURLConnection) (new URL("http://www.rgbpallete.in/led/api/signup").openConnection());
urlConnection.setConnectTimeout(1500);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("uname", uname));
params.add(new BasicNameValuePair("pass", password));
params.add(new BasicNameValuePair("email", email));
OutputStream os = urlConnection.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(getQuery(params));
writer.flush();
writer.close();
os.close();
urlConnection.connect();
if(urlConnection.getResponseCode() == 200){
InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr);
JSONObject json = new JSONObject(responseStrBuilder.toString());
String message = json.getString("message");
boolean error = json.getBoolean("error");
error(error, message);
}
} catch (Exception e) {
e.printStackTrace();
}
}
在测试期间,应用会执行此行Toast.makeText(getBaseContext(), "Creating new user", Toast.LENGTH_SHORT).show();
并显示
创建新用户
消息然后没有任何反应。我的手机网络有点故障,可能是因为连接到我的网络服务需要很长时间,或者我的代码是否有问题?
更新
我尝试了一些调试,发现代码流在线上消失了
OutputStream os = urlConnection.getOutputStream();
任何人都知道为什么?
答案 0 :(得分:0)
我对Android并不熟悉,但你的java代码看起来很好。
您致电时会得到什么样的回复代码:
urlConnection.getResponseCode()
我在前一段时间发送帖子数据时遇到了一些问题,我发现确实很有帮助知道我在HTTP请求中发送了什么。您可以使用netcat显示要发送给服务的内容。 FE。
nc -l 80
在端口80上侦听您的请求,只是向您的网络中的localhost或其他计算机发送一个能够执行此类命令的请求。收到的所有请求都将写入您的控制台。
如果您发现请求有效负载是正确的,那么您尝试呼叫的Web服务可能存在一些问题。
编辑:
我尝试过针对netcat执行类似的代码,但它运行良好。
try {
HttpURLConnection urlConnection = (HttpURLConnection) (new URL("http://localhost:3333").openConnection());
//urlConnection.setConnectTimeout(1500);
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
String urlParameters = "message=blabla";
DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
System.out.println(urlConnection.getResponseCode());
} catch (Exception e) {
e.printStackTrace();
}
我得到了
POST / HTTP/1.1
User-Agent: Java/1.8.0_25
Host: localhost:3333
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-type: application/x-www-form-urlencoded
Content-Length: 14
message=blabla