2014-01-13 76 views
-1

我想通过使用apache httpclient传递一个具有几个属性的对象数组到一个PHP web服务,但我不知道如何。我试图用JSON来编码数组和对象。下面的方法创建JSON对象,然后将它们添加到JSONArray通过Apache传递JSONArray httpclient

createArray(){ 

    JSONArray arr = new JSONArray(); 
} 


public void addObj(long var1, int var2, int var3, int var4){ 

    JSONObject obj; 
    try { 
     obj = new JSONObject(); 
     obj.put("one:", var1); 
     obj.put("two:", var2); 
     obj.put("three:", var3); 
     obj.put("four:", var4); 
     arr.put(obj); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 

接下来,我有一个类,我的数据传递给我的web服务:

public class Upload { 

private String userID = null; 
private String password = null; 
private String email = null; 

Upload(String userID, String password, String email){ 
    this.userID = userID; 
    this.password = password; 
    this.email = email; 
} 

public void uploadData(JSONArray arr) throws Exception{ 

    //HTTP POST Service 
    try{ 
     HttpClient httpclient = HttpClientBuilder.create().build();   
     URI uri = new URIBuilder() 
     .setScheme("http") 
     .setHost("www.mysite.com") 
     .setPath("/mypage.php") 
     .build(); 

     HttpPost httppost = new HttpPost(uri); 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("Email", email)); 

     String encoding = new String(
       org.apache.commons.codec.binary.Base64.encodeBase64 
        (org.apache.commons.codec.binary.StringUtils.getBytesUtf8(userID + ":" + password)) 
       ); 
     httppost.setHeader("Authorization", "Basic " + encoding); 
     httppost.setEntity(new UrlEncodedFormEntity(params)); 
     HttpResponse response = httpclient.execute(httppost); 

     System.out.println(response); 
     HttpEntity httpEntity = response.getEntity(); 
     String str = ""; 
     if (httpEntity != null) { 
      str = EntityUtils.toString(httpEntity); 
      System.out.println(str); 
     } 
    }catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

我想我也许可以简单地通过做通JSONArray如以前一样的参数:

params.add(new BasicNameValuePair("JsonArray", arr)); 

但是,这并不工作,因为只添加似乎接受字符串。我该怎么做?

+0

'arr.toString()'。 –

+0

不能编译,arr没有在这个范围内定义 – njzk2

+0

如果我使用arr.toString是否有一个简单的方法将它转换回php一侧,以便我可以像对待数组一样操作它? – db579

回答

2

JsonObject有一个toString方法,它为您提供json对象的字符串表示。我不认为你需要一个JsonArray,但如果你需要把它放入一个JSONObject。 关键是HTTP只能理解字符串。 另一点是,如果你的json很大,最好上传它而不是作为参数传递。

+0

你能解释为什么我不需要JSONArray吗?你也可以举一个如何在这种情况下使用上传的例子吗?我只看到它用于文件? – db579

+0

那么在这个例子中,你刚刚添加了一个单一的对象到数组中。所以这个数组是多余的,因为它只有一个元素。 – Arash

+0

啊不,不清楚,在上传类实例化之前多次调用该方法,所以JSONArray通常会包含多个JSONObjects。 – db579

相关问题