Http message in android with nested associative array

I am trying to send an HTTP request to a PHP service. Here is an example of what the input might look like with some test data enter image description here

I know that the Java alternative for PHP associative arrays is HashMaps, but I'm wondering if this can be done with NameValuePairs? What is the best way to format this input and call the PHP service through a post request?

+3


source to share


2 answers


Yes, it can be done with NameValuePair

. You might have something like

List<NameValuePair> params;
//and when making `HttpPost` you can do 
HttpPost httpPost = new HttpPost("Yoururl");
httpPost.setEntity(new UrlEncodedFormEntity(params));

//and while building parameters you can do somethin like this 
params.add(new BasicNameValuePair("name", "firemanavan"));
params.add(new BasicNameValuePair("cvr", "1245678"));
....

      

It uses a neat and pleasant analysis method that you can use.

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) {
    InputStream is = null;
    String json = "";
    JSONObject jObj = null;

    // Making HTTP request
    try {

        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setEntity(new UrlEncodedFormEntity(params));

        HttpResponse httpResponse = httpClient.execute(httpPost);
        HttpEntity httpEntity = httpResponse.getEntity();
        is = httpEntity.getContent();

    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                is, "iso-8859-1"), 8);
        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        is.close();
        json = sb.toString();
        Log.e("JSON", json);
    } catch (Exception e) {
        Log.e("Buffer Error", "Error converting result " + e.toString());
    }

    // try parse the string to a JSON object
    try {
        jObj = new JSONObject(json);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }


    return jObj;

} 

      



And you can just use it with something like

getJSONFromUrl("YourUrl", params);

      

Now, this is just a basic idea of ​​how you can achieve this using NameValuePair

. You will need another workaround to implement exactly how you want, but that should give you a basic idea. Hope this helps.

+1


source


Expanding on @ Sash_KP's answer, you can post the nameValuePairs as well:



params.add(new BasicNameValuePair("Company[name]", "My company"));
params.add(new BasicNameValuePair("User[name]", "My Name"));

      

+3


source







All Articles