Pass JSON request of array values in android - android

I need to pass HTTP JSON request as array values as "Id":["13","14","15","17","27","29" ] in android.How could i do that?I tried like this "Id": { "\"13\"".. }
Thanks.
My answer:
Finally i got it.
for (String sstring : new String[] { "1","2" }) {
Carray.put(sstring);
}
Thanks for the support.

JSONObject Root = new JSONObject();String Data1 = "[13,14,15,17,27,29]";
try
{
Root.put("Id", Data1);Log.e("try",Root.toString());
}
catch (JSONException e)
{
e.printStackTrace();
}
Using Above Code You Get This Type Of Output//OutPut :- {"Id":["13","14","13","15","27","29"]}

Related

How to write in json file with Android

Hello ! I want to change the values ​​in my json file called "etatButton.json" but I do not know how.
[
{
"bouton1":"on",
"bouton2":"on",
"bouton3":"on",
"bouton4":"off",
"bouton5":"on",
"bouton6":"on",
"bouton7":"on",
"bouton8":"on",
"bouton9":"off",
"bouton10":"off"
}
]
For example I want to change the value of "bouton1" from "on" to "off" after onClick event like this one :
public void writeJson(View view) {
// Write smth in json file
}
Thank you !
This code can get you started....
try {
JSONArray json = new JSONArray();
JSONObject jsonobject = new JSONObject();
jsonobject.put("k1", "v1");
jsonobject.put("k2", "v2");
json.put(jsonobject);
System.out.println(json);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
OUTPUT:
[{"k1":"v1","k2":"v2"}]
If you want to be able to change v1 or v2, just use variables

android:json object giving error

I want to send an JSONObject using retrofit 2 to server and i am sending this kind of json object :
{"Order Summary":
"[
{
\ "ProductName\":\"Wine\",
\"ProductPrice\":\"500\",
\"ProductQuantity\":\"2\",
\"ProductCost\":\"1000\",
\"SellerId\":\"2\"
},
{
\"ProductName\":\"Whiskey\",
\"ProductPrice\":\"1000\",
\"ProductQuantity\":\"1\",
\"ProductCost\":\"1000\",
\"SellerId\":\"1\"
}
]"}
due to which i'm unable to parse the json object
and this is the source code iam using :-
private void loadCart()
{
Cursor cursor = dbHelper.getCarProducts();
cursor.moveToFirst();
do {
JSONObject product = new JSONObject();
try {
product.put("Sellerid",cursor.getString(cursor.getColumnIndex("_Sellerid")));
product.put("ProductCost",cursor.getString(cursor.getColumnIndex("_Cost")));
product.put("ProductQuantity",cursor.getString(cursor.getColumnIndex("_Quantity")));
product.put("ProductPrice",cursor.getString(cursor.getColumnIndex("_Price")));
product.put("ProductName",cursor.getString(cursor.getColumnIndex("_Name")));
userCart.put(product);
} catch (JSONException e) {
e.printStackTrace();
}
}while(cursor.moveToNext());
Cart = new JSONObject();
try
{
Cart.put("OrderSummary",userCart.toString());
}
catch (Exception ex)
{}}
could someone tell me how to rectify this error ?
Here is your mistake
Cart.put("OrderSummary", userCart.toString());
You get pure JSON Array but why are you converting it to String?
Use,
Cart.put("OrderSummary", userCart); // remove .toString()
Edit
By checking your server side code, I think the problem is in index.php file (I'm not expert in PHP)
$requestedData = $response->getBody();
Instead of $response you should use $request object. In order to fix that refer this StackOverflow thread or refer this official doc of Slim Framework.
And to send JSON response from Slim Framework to refer this StackOverflow thread.
Note: While declaring Java variables/objects try to respect Java varibales/method naming conventions. Instead of Cart use cart, this eliminates ambiguity.

Weird JSON encoding issue on Android 4.1.2

I have an issue on Android 4.1.2 where a JSON object given to us by our REST API gets encoded weirdly when sending back.
This is the snippet of json I'm getting:
"cost":{
"amount": 0,
"currency": "GBP"
}
I'm wanting to pretty much just pass this particular snippet back the same way (modifying other parts of the json), but this is what I get on Android 4.1.2:
"cost":"{amount=0, currency=GBP}"
The function I believe is causing this weird encoding is here:
private StringEntity getEntityForRequest(final Payment payment, final PaymentDelegate delegate) {
JSONObject json = new JSONObject();
MyApplication.getContext().addApplicationInformationToJSONObject(json);
StringEntity entity = null;
try {
entity = new StringEntity(json.toString(), "UTF-8");
} catch (UnsupportedEncodingException e1) {
payment.markAsFailed("Reservation failed, data returned not expected.");
save(payment);
if (delegate != null) {
delegate.onFailure(new MyError(MyError.DEFAULT_STATUS, MyError.DEFAULT_TYPE, "Payment error", "Error during reservation"));
}
}
return entity;
}
This is the addApplicationIformationToJSONObject function:
/**
* Adds system information to a JSON object.
*/
public void addApplicationInformationToJSONObject(JSONObject json) {
try {
try {
json.put("app_version", getPackageManager().getPackageInfo(getPackageName(), 0).versionName);
} catch (NameNotFoundException e) {
json.put("app_version", "Unknown");
}
json.put("device", getDeviceName());
json.put("os_type", "android");
json.put("os_version", String.format("%d", Build.VERSION.SDK_INT));
json.put("device_id", Secure.getString(getContext().getContentResolver(), Secure.ANDROID_ID));
} catch (JSONException e) {
MyLog.e("MyApplication", "Error when adding system information to JSON");
}
}
What's causing this weird encoding?
How can I modify the code to avoid issues like this?
Found a solution. It seems older version interprets that cost snippet as a string rather than a JSONObject. Doing this seems to solve the issue:
ticketObject.remove("cost");
ticketObject.put("cost", new JSONObject(getCost()));

In Android, Why does my JSONArray have additional brackets?

I'm creating an array that has to be sent to an api. Part of the json has contact info. that must be sent like so:
"Dealer" : {
"email" : "mjones#fake - domain.com" ,
"firstName" : "Martin" ,
"lastName" : "Jones" ,
"phone" : " 5555554321 " ,
"company" : "JonesCo Golf" ,
"street" : "554 Elm Street" ,
"city" : "Springfield" ,
"stateProvince" : "Illinois" ,
"postalCode" : "62701"
}
My json (when using Log.d) shows like this:
"Dealer":
[
{
"email":"email#email.com",
"firstName":"John",
"lastName":"Doe",
"phone":"0987654321",
"company":"test",
"street":"123 Street",
"city":"myCity",
"stateProvince":"Xy",
"postalCode":"12345"
}
]
instead of being Dealer with 9 objects it returns as Dealer with 1 object that contains 9 objects. Of course, this won't parse correctly when I send it to the API.
I'm pulling my content from a shared preference and loading creating the JSONArray like this:
JSONObject dealer = new JSONObject();
try {
dealer.put("email", salesPerson.get("emailAddress"));
dealer.put("firstName", salesPerson.get("firstName"));
dealer.put("lastName", salesPerson.get("lastName"));
dealer.put("phone", salesPerson.get("mobilePhone"));
dealer.put("street", salesPerson.get("mailingAddress1"));
dealer.put("street2", salesPerson.get("mailingAddress2"));
dealer.put("city", salesPerson.get("city"));
dealer.put("stateProvince", salesPerson.get("state"));
dealer.put("postalCode", salesPerson.get("postalCode"));
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Log.d("dealer", dealer.toString());
JSONArray dealerJSON = new JSONArray();
dealerJSON.put(dealer);
try {
emailDataObject.put("Dealer", dealerJSON);
} catch (JSONException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
I have a pretty extensive JSONArray to send to the API, and the JSON is being created with no errors. The square brackets are being added everywhere I add the JSONObject to a JSONArray it seems.
how can I prevent the additional square brackets from being added the the json?
To avoid backers do not add your object to an array, but it to the object directly. Here is an example.
JSONObject dealer = new JSONObject();
try {
dealer.put("email", salesPerson.get("emailAddress"));
dealer.put("firstName", salesPerson.get("firstName"));
dealer.put("lastName", salesPerson.get("lastName"));
dealer.put("phone", salesPerson.get("mobilePhone"));
dealer.put("street", salesPerson.get("mailingAddress1"));
dealer.put("street2", salesPerson.get("mailingAddress2"));
dealer.put("city", salesPerson.get("city"));
dealer.put("stateProvince", salesPerson.get("state"));
dealer.put("postalCode", salesPerson.get("postalCode"));
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("dealer", dealer.toString());
try {
emailDataObject.put("Dealer", dealer);
} catch (JSONException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
I'm not really into Android, but I can give you some directives, and I can surely tell you that you are conceptually wrong about your JSONs
"Dealer":
{
"email":"email#email.com",
"firstName":"John",
"lastName":"Doe",
"phone":"0987654321",
"company":"test",
"street":"123 Street",
"city":"myCity",
"stateProvince":"Xy",
"postalCode":"12345"
}
This first example is not an array of JSON objects, but instead a single objects with many properties
"Dealer":
[
{
"email":"email#email.com",
"firstName":"John",
"lastName":"Doe",
"phone":"0987654321",
"company":"test",
"street":"123 Street",
"city":"myCity",
"stateProvince":"Xy",
"postalCode":"12345"
}
]
This one instead, is a real JSON array, formed by a single element, which is your previous object.
You have to rethink about the adding of the elements in your JSON object, and what is your real expected behavior
Edit:
I think that this line could be held responsible for your unwanted array creation:
JSONArray dealerJSON = new JSONArray();
You are creating an array with this code:
JSONArray dealerJSON = new JSONArray();
So don't so that.
Just do this:
emailDataObject.put("Dealer", dealer);
You don't need the dealerJSON step, because dealer is the JSONObject you want.

Type mismatch: cannot convert from Object to JSONObject

I'm relatively new to Android development and am writing my first REST-based app. I've opted to use the Android Asynchronous HTTP Client to make things a bit easier. I'm currently just running through the main "Recommended Usage" section on that link, essentially just creating a basic static HTTP client. I'm following the code given, but changing it around to refer to a different API. Here's the code in question:
public void getFactualResults() throws JSONException {
FactualRestClient.get("q=Coffee,Los Angeles", null, new JsonHttpResponseHandler() {
#Override
public void onSuccess(JSONArray venues) {
// Pull out the first restaurant from the returned search results
JSONObject firstVenue = venues.get(0);
String venueName = firstVenue.getString("name");
// Do something with the response
System.out.println(venueName);
}
});
}
The String venueName = firstVenue.getString("name"); line is currently throwing an error in Eclipse: "Type mismatch: cannot convert from Object to JSONObject". Why is this error occurring? I searched other threads which led me to try using getJSONObject(0) instead of get(0) but that led to further errors and Eclipse suggesting using try/catch. I haven't changed any of the code on the tutorial, save for the variable names and URL. Any thoughts/tips/advice?
Thanks so much.
EDIT:
Here is the onSuccess method, modified to include the try/catch blocks suggested. Eclipse now shows the "local variable may not have been initialized" for firstVenue here: venueName = firstVenue.getString("name"); and for venueName here: System.out.println(venueName); Even if I initialize String venueName; directly after JSONObject firstVenue; I still get the same error. Any help in resolving these would be greatly appreciated!
public void onSuccess(JSONArray venues) {
// Pull out the first restaurant from the returned search results
JSONObject firstVenue;
try {
firstVenue = venues.getJSONObject(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String venueName;
try {
venueName = firstVenue.getString("name");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Do something with the response
System.out.println(venueName);
}
You can try to convert object you are getting from querying to String and then use
final JSONObject jsonObject = new JSONObject(stringresult);
I was getting same error earlier, it worked for me.
Yes, you should be using getJSONObject to ensure that the value you obtain is a JSON object. And yes, you should catch the possible JSONException which is thrown if that index in the array doesn't exist, or does not contain an object.
It'll look something like this:
JSONObject firstVenue;
try {
firstVenue = venues.get(0);
} catch (JSONException e) {
// error handling
}
convert obj to json Object:
Object obj = JSONValue.parse(inputParam);
JSONObject jsonObject = (JSONObject) obj;
The solution provided by Shail Adi only worked for me by setting the initial values of firstVenue and venueName to null. Here's my code:
JSONObject firstVenue = null;
try {
firstVenue = (JSONObject)venues.get(0);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String venueName = null;
try {
venueName = firstVenue.getString("name");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// Do something with the response
System.out.println(venueName);

Categories

Resources