HTTPPOST с объектом JSON, имеющим массив

ниже мой объект json, который мне нужно передать на мой сервер:

{
    "PostImages": [{
        "FileFormat": "jpeg",
        "id": "0",
        "FileByteArray": "LONG BYTE ARRAY OF FILE",
        "FileCaption": "",
        "VideoLink": ""
    },{
        "FileFormat": "jpeg",
        "id": "0",
        "FileByteArray": "LONG BYTE ARRAY OF FILE",
        "FileCaption": "",
        "VideoLink": ""
    }],
    "AdminScheduleId": "0",
    "CategoryId": "1",
    "UserId": "4",
    "Presenter2": "0",
    "IdeaTitle": "gfgfdgdfgdfg",
    "IsImplementedByOwn": "false",
    "NoOfVolunteer": "0",
    "PostId": "0",
    "ClubId": "2",
    "Description": " Dfgdfgdf",
    "Presenter1": "0"
}

Я уже сделал это, передав объект json на сервер. Но это создает проблему только из-за длинного массива байтов.

Смотрите мой рабочий код ниже:

String res = null;

    HttpPost request = new HttpPost(CREATE_IDEA_URL);
    request.addHeader("Content-Type", "application/json; charset=utf-8");
    //request.addHeader("Content-type", "application/x-www-form-urlencoded");
    try {

        JSONArray array=new JSONArray(PostImages); // Array of Images details

        JSONObject jObject = new JSONObject()
                    .put("IdeaTitle",IdeaTitle)
                    .put("Description",Description)
                    .put("IsImplementedByOwn",IsImplementedByOwn)
                    .put("NoOfVolunteer",NoOfVolunteer)
                    .put("PostId",PostId)
                    .put("UserId",UserId)
                    .put("ClubId",ClubId)
                    .put("AdminScheduleId",AdminScheduleId)
                    .put("CategoryId",categoryId)
                   .put("Presenter1",Presenter1)
                   .put("Presenter2",Presenter2)
                    .put("PostImages",array);
        StringEntity entity = new StringEntity(jObject.toString(2),  "UTF-8"); // ADD THIS LINE TO HAVE ARABIC LANGUAGE IN POST
        System.out.println("jObject is:::: "+jObject.toString());
        request.setEntity(entity);
        System.out.println("====the Entity is: "+entity.toString());    

        DefaultHttpClient httpClient = new DefaultHttpClient();
        //----------------------
        if(LC5_API.getCookiesFromLC5() == null){
        }else{
         CookieStore cookieStore = new BasicCookieStore(); 
            for(Cookie cook : LC5_API.getCookiesFromLC5()){
                cookieStore.addCookie(cook); 
            }
            ((AbstractHttpClient) httpClient).setCookieStore(cookieStore);
        }   

        //-------------------
        HttpResponse response = httpClient.execute(request);
        //res = response.toString();
        int resCode = response.getStatusLine().getStatusCode();
        System.out.println("Our Res: "+jObject.toString());
        System.out.println("Result code: "+resCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line="";
        StringBuffer returnFromServer = new StringBuffer();
        while ((line=in.readLine())!=null){
            returnFromServer.append(line);
        }
        //Toast what we got from server
        //Toast.makeText(getApplicationContext(),returnFromServer.toString(), Toast.LENGTH_LONG).show(); 
        System.out.println("Responce: "+returnFromServer.toString());
        res = returnFromServer.toString();

        if (entity != null){
            entity.consumeContent();
        }
        // Toast.makeText(getApplicationContext(),response.getStatusLine().getStatusCode()+"", Toast.LENGTH_LONG).show();
    }catch(Exception e){
        e.printStackTrace();
        res=null;
    }

    System.out.println("Responcre is:"+res);
    return res;*/

}
public static String Get_AdoptIdea(String PostId) {
    String responce = null;
    RestClient client = new RestClient(GET_ADOPT_IDEA);

//  if(LC5_API.DEBUG) Log.d("SetCookie", LC5_API.SESSION_COOKIEName + ":"+ LC5_API.SESSION_COOKIEValue+"");
//  client.AddHeader("Cookie", SESSION_COOKIEName+"="+LC5_API.SESSION_COOKIEValue);

    client.AddParam("postId", PostId);

    try {
        client.Execute(RequestMethod.GET);
        responce = client.getResponse();
    } catch (ConnectTimeoutException e) {
        e.printStackTrace();
        if(DEBUG)Log.d(TAG, "");
        responce=null;
    }catch(Exception e)
    {
        responce=null;
    }

    if(DEBUG)Log.d(TAG, "Response: "+responce);
    return responce;

Код выше работает идеально. Но я хочу отправить его с namevaluepair на сервер.

Смотрите мой код ниже:

String res = null;
    try {
        HttpClient client = new DefaultHttpClient();  
        String URL = CREATE_IDEA_URL;
        HttpPost post = new HttpPost(URL);

        List<NameValuePair> postParameters;
        postParameters = new ArrayList<NameValuePair>();
        //postParameters.add(new BasicNameValuePair("PostId", PostId));
        postParameters.add(new BasicNameValuePair("IdeaTitle",IdeaTitle));
        postParameters.add(new BasicNameValuePair("Description",Description));
        postParameters.add(new BasicNameValuePair("IsImplementedByOwn",IsImplementedByOwn));
        postParameters.add(new BasicNameValuePair("NoOfVolunteer",NoOfVolunteer));
        postParameters.add(new BasicNameValuePair("PostId",PostId));
        postParameters.add(new BasicNameValuePair("UserId",UserId));
        postParameters.add(new BasicNameValuePair("ClubId",ClubId));
        postParameters.add(new BasicNameValuePair("AdminScheduleId",AdminScheduleId));
        postParameters.add(new BasicNameValuePair("CategoryId",categoryId));
        postParameters.add(new BasicNameValuePair("Presenter1",Presenter1));
        postParameters.add(new BasicNameValuePair("Presenter2",Presenter2));


        //postParameters.add(new BasicNameValuePair("PostImages",ctx.getString(R.string.json_object_test)));

        JSONArray array = new JSONArray(PostImages);

        List<NameValuePair> param = new ArrayList<NameValuePair>();



        for(int i=0; i<array.length();i++){
            ImagesData img = new ImagesData();


            String video = array.getJSONObject(i).getString("VideoLink").equalsIgnoreCase("") ? "xyz" : array.getJSONObject(i).getString("VideoLink");
            System.out.println("VIDEO:: "+video);

            param.add(new BasicNameValuePair("id", array.getJSONObject(i).getString("id")));
            param.add(new BasicNameValuePair("FileCaption", array.getJSONObject(i).getString("FileCaption")));
            param.add(new BasicNameValuePair("FileFormat", array.getJSONObject(i).getString("FileFormat")));
            param.add(new BasicNameValuePair("VideoLink", video));
            param.add(new BasicNameValuePair("FileByteArray", array.getJSONObject(i).getString("FileByteArray")));

            postParameters.add(new BasicNameValuePair("PostImages",param.toString()));  
        }

        post.setEntity(new UrlEncodedFormEntity(postParameters));

        post.setHeader("Content-Type", "application/json; charset=utf-8");

        if(LC5_API.DEBUG) Log.d("REQUEST FROM REST:", "The requested String is:"+CREATE_IDEA_URL+postParameters);

        //--------------------------------

        if(LC5_API.getCookiesFromLC5() == null){

        }else{
            CookieStore cookieStore = new BasicCookieStore(); 
            //-------------------------------------------
            for(Cookie cook : LC5_API.getCookiesFromLC5()){
                cookieStore.addCookie(cook); 
            }
            ((AbstractHttpClient) client).setCookieStore(cookieStore);
        }

        //---------------------------------
        HttpResponse responsePost = client.execute(post);
        HttpEntity resEntityPost = responsePost.getEntity();  
        if (resEntityPost != null) 
        {
            String response=EntityUtils.toString(resEntityPost);
            res = response;
        }
    } catch (Exception e) {e.printStackTrace();}
    return res;

Теперь, когда я передаю значения с приведенным выше кодом, он дает мне Invalid JSON Primitive: IdeaTitle.

Все в порядке, но не получает должного ответа. Пожалуйста, помогите мне, как передать объект json с массивом json.

К вашему сведению, postImages — это мой массив json с некоторыми деталями.

Помогите пожалуйста мне.


person Shreyash Mahajan    schedule 25.04.2014    source источник
comment
попробуйте это решение - надеюсь, оно поможет -› stackoverflow.com/a/21154349/1225413   -  person Akhil Jain    schedule 25.04.2014
comment
@AkhilJain Я уже пробовал. Пожалуйста, посмотрите мой код. Но он не работает...   -  person Shreyash Mahajan    schedule 25.04.2014
comment
postParameters.add(new BasicNameValuePair(PostImages[],попробуйте поместить сюда отдельный объект));   -  person Akhil Jain    schedule 25.04.2014
comment
Хорошо, но мое имя параметра поля — PostImages, будет ли оно работать? и PostImages является массивом   -  person Shreyash Mahajan    schedule 28.04.2014
comment
перебрать массив и вставить тот же ключ, он должен работать в соответствии с данным ответом   -  person Akhil Jain    schedule 28.04.2014
comment
@AkhilJain, не могли бы вы дать ответ с разделом кода о том, как опубликовать весь этот объект в NameValuePair, чтобы я мог проверить его, и если он работает, я приму ваш ответ. Спасибо за помощь.   -  person Shreyash Mahajan    schedule 29.04.2014