2017-12-18 167 views
0

我想发送文本值到服务器,这是名称,电话,位置,备注,但每次每个值都丢失 第一次名称不会,下次拨打电话和下一个位置。 ..我的JSONObject发送空值到服务器

更新:

Jsoncode:

public static String POST(String url, Persoenter code heren person){ 
    InputStream inputStream = null; 
    String result = ""; 
    try { 

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 

     String json = ""; 
     JSONObject jsonObject = new JSONObject(); 
     jsonObject.accumulate("name",person.getName()); 
     jsonObject.accumulate("phone", person.getPhone()); 
     jsonObject.accumulate("remarrks",person.getRemarks()); 
     jsonObject.accumulate("credated_dt", person.getCreatedat()); 

     jsonObject.accumulate("emp_code", person.getCreatedby()); 

     jsonObject.accumulate("location", person.getLocation()); 
     jsonObject.accumulate("add_fld1", "Test"); 
     jsonObject.accumulate("add_fld2", "Test"); 
     jsonObject.accumulate("add_fld3", "Test"); 




     json = jsonObject.toString(); 
     StringEntity se = new StringEntity(json); 
     Log.e("sent",""+json); 
     httpPost.setEntity(se); 
     httpPost.setHeader("Accept", "application/json"); 
     httpPost.setHeader("Content-type", "application/json"); 

     HttpResponse httpResponse = httpclient.execute(httpPost); 

     inputStream = httpResponse.getEntity().getContent(); 
     if(inputStream != null) 
      result = convertInputStreamToString(inputStream); 
     else 
      result = "Did not work!"; 
    } catch (Exception e) { 
     Log.d("InputStream", e.getLocalizedMessage()); 
    } 
    return result; 
} 

Httppost

private class sync extends AsyncTask<String, String, String> { 


    InputStream inputStream = null; 
    OutputStream outputStream = null; 

    protected String doInBackground(String... urls) { 

     person = new Person(); 

     person.setName(eName.getText().toString()); 
     person.setPhone(ePhonenumber.getText().toString()); 
     person.setLocation(eLocation.getText().toString()); 
     person.setRemarks(eRemarks.getText().toString()); 
     person.setCreatedby(eCreatedby.getText().toString()); 
     person.setCreatedat(eCreatedat.getText().toString()); 
     return POST(urls[0],person); 
    } 
@Override 
    protected void onPreExecute() { 
     progress.setTitle("Connecting to server"); 
     progress.setMessage("Sending Data.... Please wait!"); 
     progress.setCanceledOnTouchOutside(false); 
     progress.show(); 
    } 

    @Override 
    protected void onPostExecute(String s) { 
       progress.dismiss(); 
       Intent Homeintent = getIntent(); 
Homeintent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); 
finish(); 
startActivity(Homeintent); 

    } 

输出 1:{ “名称”: “beta33”, “电话”: “33”, “remarrks”: “33”, “credated_dt”:“2017年12月20日11 :56:32“,”emp_code“:”[email protected]“,”location“:”33“} 2:{”name“:”beta33“,”phone“:”33“,”remarrks“: “33”,“credated_dt”:“2017-12-20 11:56:43”,“emp_code”:“[email protected]”,“location”:“33”} 3:{“name”:“ “,”电话“:”34“,”remarrks“:”34“,”credated_dt“:”2017-12-20 11:56:52“,”emp_code“:”[email protected]“,”位置“ :“34”}

在尝试了一两次尝试之后,名字不会出现,我不知道为什么......请别人帮我解决这个问题

+2

我建议你使用一个网络库,如排球或改造来处理这些类型的操作。这种程序已过时,并且随着项目扩展而变得难以维护。 – KBJ

+0

是的,我想使用凌空..但截至目前这是必需的 – Flash

+0

在调试模式下检查'JSONObject joj = getonline();'的值。你是否获得预期的价值。 –

回答

-2

我发布了一个工作代码示例,将其替换为此代码,然后查找这里出现了什么错误。

try { 
      URL url = new URL("http://-------"); 
      HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setRequestProperty("Content-Type", "application/json"); 
      httpURLConnection.connect(); 
      DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream()); 
      wr.write(inputJson.getBytes()); //your input json in string format 
      wr.flush(); 
      BufferedReader br = new BufferedReader(new InputStreamReader(
        (httpURLConnection.getInputStream()))); 
      StringBuffer bfr = new StringBuffer(); 
      String output = ""; 
      while ((output = br.readLine()) != null) { 
       bfr.append(output); 
      } 
      String serverPostRes = bfr.toString(); 
      wr.close(); 
      httpURLConnection.disconnect(); 
      bfr.delete(0,bfr.length()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return serverPostRes; 
    } 

在你的问题中inputJson你可以通过

String inputJson = "{ " 
      + "  \"add_fld1\": \"" + ("Test"+ i) + "\"," 
      + "  \"add_fld2\": \"" + ("Test"+ i+1) + "\"," 
      + "  \"add_fld3\": \"" + ("Test"+ i+2) + "\"," 
      + "  \"credated_dt\": \"" + formattedDate + "\"," 
      + "  \"emp_code\": \"" + eCreatedby.getText().toString() + "\"," 
      + "  \"location\": \"" + eLocation.getText().toString() + "\"," 
      + "  \"name\": \"" + eName.getText().toString() + "\"," 
      + "  \"phone\": \"" + ePhonenumber.getText().toString() + "\"," 
      + "  \"remarrks\": \"" + eRemarks.getText().toString() + "\"," 
      + "}"; 
+0

问题不是与连接..你的代码和我的唯一区别是你使用http后,我使用URL连接..我的URL连接只是一个工作代码 – Flash

+1

这两个代码都使用“POST”方法。这个答案不包含将值传递给服务器端,我认为这是主要问题。 – KBJ

+0

我也使用相同的'HttpURLConnection'。请再次检查。问题在于发送请求并处理响应。 – Shambhu