私はJSON解析にボレーを使用しています。 POST=サーバー側にデータを送信します。送信しようとしています。今、どのようにフィルター配列をサーバーに送信できますか?
以下は私のスニペットコードです。 Hashmap
とJsonobject
も試しました。しかし、このエラーが発生します。
エラー:
org.json.JSONException: Value at Data of type Java.lang.String cannot be converted to JSONObject
フォーマット
{
"typeName": "MANUFACTURER",
"typeId": 22,
"cityId": 308,
"sortBy": "productname",
"sortOrder": "desc",
"filter":[
{
"filterId":101,
"typeName":"CAT_ID",
"filterId":102,
"typeName":"CAT_ID"
}
]
}
コードチェックペースト用
APIの呼び出しに問題がある場合は、これが役立ちます。
RequestQueue queue = Volley.newRequestQueue(this);
JsonObjectRequest jobReq = new JsonObjectRequest(Request.Method.POST, url, jObject,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
}
});
queue.add(jobReq);
jObjectは、サーバーに送信するJSONデータです。
JSONArrayの実装も同様です。 JsonObjectRequestの代わりにJsonArrayRequestを使用し、jObjectの代わりにjArrayを送信します。
Json配列を作成するには、ちょっとした調整を行うだけです
JSONArray array=new JSONArray();
for(int i=0;i<filter_items.size();i++){
JSONObject obj=new JSONObject();
try {
obj.put("filterId",filter_items.get(i));
obj.put("typeName","CAT_ID");
} catch (JSONException e) {
e.printStackTrace();
}
array.put(obj);
}
そして最後に以下のようにjson配列を追加します
jsonParams.put("filter",array);
あなたの場合、Json配列を文字列に変換しています
これがお役に立てば幸いです。
//Create Main jSon object
JSONObject jsonParams = new JSONObject();
try {
//Add string params
jsonParams.put("typeName", "MANUFACTURER");
jsonParams.put("typeId", "22");
jsonParams.put("cityId", "308");
jsonParams.put("sortBy", "productname");
jsonParams.put("sortOrder", "desc");
} catch (JSONException e) {
e.printStackTrace();
}
//Create json array for filter
JSONArray array=new JSONArray();
//Create json objects for two filter Ids
JSONObject jsonParam1 =new JSONObject();
JSONObject jsonParam2 =new JSONObject();
try {
jsonParam1.put("filterId","101");
jsonParam1.put("typeName","CAT_ID");
jsonParam2.put("filterId","102");
jsonParam2.put("typeName","CAT_ID");
} catch (JSONException e) {
e.printStackTrace();
}
//Add the filter Id object to array
array.put(jsonParam1);
array.put(jsonParam2);
//Add array to main json object
try {
jsonParams.put("filter",array);
} catch (JSONException e) {
e.printStackTrace();
}
JSONオブジェクトの作成方法の詳細については、このリンクを確認してください
Android JSONObject:putメソッドに配列を追加
[〜#〜] edit [〜#〜]:
データが多い場合は、Gsonコンバーターを使用することをお勧めします
http://www.vogella.com/tutorials/JavaLibrary-Gson/article.html
また、pojoクラスを作成するためにこれを使用します
こんにちはVolleyはJsonArrayリクエストをサポートしていません。
JSONArrayをボレーに投稿するために以下のコードを使用しました。 JsonArrayRequestを使用し、JSONObjectに追加せずにJSON配列を直接渡す必要があります。また、「parseNetworkResponse」メソッドをオーバーライドして、JsonArrayRequestのResponseListnerがJSONArrayのタイプを想定しているため、応答をJSONArrayに再度変換することにも留意してください。
String URL = "www.myposturl.com/data";
RequestQueue queue = Volley.newRequestQueue(this);
//Create json array for filter
JSONArray array = new JSONArray();
//Create json objects for two filter Ids
JSONObject jsonParam = new JSONObject();
JSONObject jsonParam1 = new JSONObject();
try {
//Add string params
jsonParam.put("NAME", "XXXXXXXXXXXXXX");
jsonParam.put("USERNAME", "XXXXXXXXXXXXXX");
jsonParam.put("PASSWORD", "XXXXXXXXXXXX");
jsonParam1.put("NAME", "XXXXXXXXXXXXXX");
jsonParam1.put("USERNAME", "XXXXXXXXXXXXXX");
jsonParam1.put("PASSWORD", "XXXXXXXXXXXX");
} catch (JSONException e) {
e.printStackTrace();
}
array.put(jsonParam);
array.put(jsonParam1);
JsonArrayRequest request_json = new JsonArrayRequest(Request.Method.POST, URL, array,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
//Get Final response
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
VolleyLog.e("Error: ", volleyError.getMessage());
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<String, String>();
// Add headers
return headers;
}
//Important part to convert response to JSON Array Again
@Override
protected Response<JSONArray> parseNetworkResponse(NetworkResponse response) {
String responseString;
JSONArray array = new JSONArray();
if (response != null) {
try {
responseString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));
JSONObject obj = new JSONObject(responseString);
(array).put(obj);
} catch (Exception ex) {
}
}
//return array;
return Response.success(array, HttpHeaderParser.parseCacheHeaders(response));
}
};
queue.add(request_json);
{
"typeName": "MANUFACTURER",
"typeId": 22,
"cityId": 308,
"sortBy": "productname",
"sortOrder": "desc",
"filter":[
{
"filterId":101,
"typeName":"CAT_ID",
}
{
"filterId":102,
"typeName":"CAT_ID"
}
]
}
JSONObject object=new JSONObject();
object.put("typeName","");
object.put("typeId","");
object.put("cityId","");
object.put("sortBy","");
object.put("sortOrder","");
JSONArray array=new JSONArray();
JSONObject obj=new JSONObject();
obj.put("filterId","");
obj.put("typeName","");
array.put(obj);
object.put("filter",obj.toString());
jSONObjectを渡してリクエストを作成します。これを使用してください https://www.androidhive.info/2014/09/Android-json-parsing-using-volley/