关于发送json对象到服务器的问题
我想发送一个简单的json对象到服务器。我可以使用邮差发送一个json对象到服务器,没有任何问题。我使用的正确答案代码由汤姆雪花从以下链接: How To Send json Object to the server from my android app关于发送json对象到服务器的问题
但在下面的行获取文件未找到错误(给我的服务器名): DataOutputStream类WR =新的DataOutputStream类(httpURLConnection.getOutputStream( ));
服务器通过邮递员没有任何问题的工作。我想深入分析这个问题。我如何捕获任何有用的错误代码?
Error code:
08-24 18:21:21.193 17299-20507/com.tulga.nar.mytracker I/System.out:
(HTTPLog)-Static: isSBSettingEnabled false
08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:
java.io.FileNotFoundException: https://myserver....../mydatabase
08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConn
ectionImpl.java:242)
08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err: at
com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W /系统.err:at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:25) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err: at com.tulga.nar.mytracker.MainActivity $ SendDeviceDetails.doInBackground(MainActivity.java:58) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:at com。 tulga.nar.mytracker.MainActivity $ SendDeviceDetails.doInBackground(MainActivity.java:33) 08-24 18:21:21.623 17299-20507/com.tulga.na r.mytracker W/System.err:at android.os.AsyncTask $ 2.call(AsyncTask.java:295) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err :at java.util.concurrent.FutureTask.run(FutureTask.java:237) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:at android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:234) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor .java:1113) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:588) 08-24 18:21:21.623 17299-20507/com.tulga.nar.mytracker W/System.err:at java.lang.Thread.run(Thread.java:818) 08-24 18:21:51.523 17299-17299/com.tulga.nar.myt芝麻大的邪恶V/ActivityThread:updateVisibility:ActivityRecord {3cf0352 [email protected] {com.tulga.nar.mytracker/com.tulga.nar.mytracker.MainActivity}}显示:真
尝试使用HttpURLConnection的像以前一样,但也设置这样的请求属性(如果你还没有):
其中url是您的URL定义到您的服务器。
JSONObject params = new JSONObject();
try {
params.put("some_key_1", value_1);
params.put("some_key_2", value_2);
} catch (JSONException | NumberFormatException exception) {
exception.printStackTrace();
}
HttpURLConnection connection = (HttpURLConnection) url.getUrl().openConnection();
connection.setRequestProperty("Content-Type", "application/json");
connection.setDoOutput(true);
osw = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
// Send request.
osw.write(params.toString());
osw.flush();
osw.close();
谢谢。我会在晚上尝试。这是一个侧面项目。 –
没有工作,男人。我在我的问题中添加了错误代码。 –
当我在浏览器上访问我的服务器时,chrome会自动添加Secure https://作为前缀。它会导致问题吗?我允许未经授权访问我的服务器。 –
Button submitButton = (Button) findViewById(R.id.submit_button);
submitButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
JSONObject postData = new JSONObject();
try {
postData.put("name", name.getText().toString());
postData.put("address", address.getText().toString());
postData.put("manufacturer", manufacturer.getText().toString());
postData.put("location", location.getText().toString());
postData.put("type", type.getText().toString());
postData.put("deviceID", deviceID.getText().toString());
new SendDeviceDetails.execute("http://52.88.194.67:8080/IOTProjectServer/registerDevice", postData.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
});
private class SendDeviceDetails extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String data = "";
HttpURLConnection httpURLConnection = null;
try {
httpURLConnection = (HttpURLConnection) new URL(params[0]).openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());
wr.writeBytes("PostData=" + params[1]);
wr.flush();
wr.close();
InputStream in = httpURLConnection.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(in);
int inputStreamData = inputStreamReader.read();
while (inputStreamData != -1) {
char current = (char) inputStreamData;
inputStreamData = inputStreamReader.read();
data += current;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
}
return data;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
Log.e("TAG", result); // this is expecting a response code to be sent from your server upon receiving the POST data
}
}
实施例进行登录。在这里,我们为登录
String lname = "";
try {
url = new URL(SNFServerURL+SNFAuthResource);
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url.toString());
post.setHeader("Content-type", "application/json");
post.setHeader("Accept", "application/json");
JSONObject object = new JSONObject();
String message;
object.put("password", Flags.password);
object.put("username", Flags.username);
message = object.toString();
post.setEntity(new StringEntity(message, "UTF8"));
HttpResponse response = client.execute(post);
int statusCode = response.getStatusLine().getStatusCode();
if (200 == statusCode) {
String json = EntityUtils.toString(response.getEntity());
JSONObject result = new JSONObject(json);
token = result.getString("token");
TokenActivity.fname = result.getString("firstName");
TokenActivity.lname = result.getString("lastName");
}
} catch (Exception ex) {
ex.printStackTrace();
}
请出示你的代码 –
我的代码张贴的用户名和密码是上述汤姆雪花的代码完全相同。唯一的区别是服务器名称。这个问题看起来与Tfish经历的相同(请参阅评论)。遗憾的是,没有解决方案。 –
请分享您的代码。 –