Reputation: 25
I can do only add jsonobj and json obj like in the left hand side in this picture
but if i want to add data like right hand side what code should i add to my code (i want to know how to specific the header of json array which i want to add) (credit code from ThinkTwiceCodeOnce) my code is ...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
new PostDataTask().execute("http://<myip4:port>/api/status");
}
class PostDataTask extends AsyncTask<String, Void, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Inserting data...");
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
try {
return postData(params[0]);
} catch (IOException ex) {
return "Network error !";
} catch (JSONException ex) {
return "Data Invalid !";
}
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
mResult.setText(result);
if (progressDialog != null) {
progressDialog.dismiss();
}
}
private String postData(String urlPath) throws IOException, JSONException {
StringBuilder result = new StringBuilder();
BufferedWriter bufferedWriter = null;
BufferedReader bufferedReader = null;
try {
//Create data to send to server
JSONObject dataToSend = new JSONObject();
dataToSend.put("name", "puggy");
dataToSend.put("like", "dog");
dataToSend.put("eat", "meat");
dataToSend.put("fav", "red balloon");
//Initialize and config request, then connect to server.
URL url = new URL(urlPath);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(10000 /* milliseconds */);
urlConnection.setConnectTimeout(10000 /* milliseconds */);
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true); //enable output (body data)
urlConnection.setRequestProperty("Content-Type", "application/json");// set header
urlConnection.connect();
//Write data into server
OutputStream outputStream = urlConnection.getOutputStream();
bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
bufferedWriter.write(dataToSend.toString());
bufferedWriter.flush();
//Read data response from server
InputStream inputStream = urlConnection.getInputStream();
bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = bufferedReader.readLine()) != null) {
result.append(line).append("\n");
}
} finally {
if (bufferedReader != null) {
bufferedReader.close();
}
if (bufferedWriter != null) {
bufferedWriter.close();
}
}
return result.toString();
}
}
Upvotes: 2
Views: 8370
Reputation: 21736
Use dataToSend.put("profile", JSONArrayProfile)
to add profile JSONArray
to JSONObject
.
Here is the working code. Try this:
try {
JSONObject dataToSend = new JSONObject();
// Profile
JSONArray jsonArrayProfile = new JSONArray();
// Post 1
JSONObject jsonObjectPost1 = new JSONObject();
jsonObjectPost1.put("fbname", "Think Twice Code Once");
jsonObjectPost1.put("content", "felling full");
jsonObjectPost1.put("likes", 1);
jsonObjectPost1.put("comments", 3);
// Post 2
JSONObject jsonObjectPost2 = new JSONObject();
jsonObjectPost2.put("fbname", "Think Twice Code Once");
jsonObjectPost2.put("content", "felling full");
jsonObjectPost2.put("likes", 1);
jsonObjectPost2.put("comments", 3);
// Add post1, post2 jsonObject to profile jsonArray
jsonArrayProfile.put(jsonObjectPost1);
jsonArrayProfile.put(jsonObjectPost2);
// Add profile jsonArray to jsonObject
dataToSend.put("profile", jsonArrayProfile);
Log.d("SUCCESS", "JSON: " + dataToSend.toString());
} catch (final JSONException e) {
Log.e("FAILED", "Json build error: " + e.getMessage());
}
OUTPUT:
{
"profile":[
{
"fbname":"Think Twice Code Once",
"content":"felling full",
"likes":1,
"comments":3
},
{
"fbname":"Think Twice Code Once",
"content":"felling full",
"likes":1,
"comments":3
}
]
}
Upvotes: 3
Reputation: 177
You have to create JSON objects of this way
JSONObject dataToSend = new JSONObject();
JSONArray arrayData = new JSONArray();
dataToSend.put("profile",arrayData);
And if you want to add JSON object to your JSONArray use this
arrayData.put(JSONObject1);
arrayData.put(JSONObject2);
Upvotes: 0
Reputation: 282
You can use following code to try it.
JSONArray ja = new JSONArray();
ja.put(dataToSend);
Upvotes: 0