2017-08-24 59 views
0

我想发送一个简单的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}}显示:真

+0

请出示你的代码 –

+0

我的代码张贴的用户名和密码是上述汤姆雪花的代码完全相同。唯一的区别是服务器名称。这个问题看起来与Tfish经历的相同(请参阅评论)。遗憾的是,没有解决方案。 –

+0

请分享您的代码。 –

回答

0

尝试使用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(); 
+0

谢谢。我会在晚上尝试。这是一个侧面项目。 –

+0

没有工作,男人。我在我的问题中添加了错误代码。 –

+0

当我在浏览器上访问我的服务器时,chrome会自动添加Secure https://作为前缀。它会导致问题吗?我允许未经授权访问我的服务器。 –

-1
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 
} 

}

0

实施例进行登录。在这里,我们为登录

 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(); 
    }