1

私は drupalベースの Web サイトのクレート アプリケーションに取り組んでいます。ここでは、アプリケーションから Web サーバーへの投稿ページの問題に直面しています。

タイトルと本文を投稿すると、タイトルのみがサーバーに表示されますが、本文は表示されません。ここで、本文の一部をjsonフォーマットします。

以下のJSON形式は、Firefoxのポスタープラグインで完全に機能し、データをサーバーに正常に書き込むので、同じタスクのAndroidコードを書くことが私の質問です。

{
 "type":"page",
 "title":"TITLE TESTING",
 "body":{
   "und":[
   {
    "value":"BODY TESTING"
   }
  ]
 }
}

私はこのように試しました:

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

    params.add(new BasicNameValuePair("type","page"));
    params.add(new BasicNameValuePair("title",title));
   params.add(new BasicNameValuePair("body", ""+jSONCategory.toString()));
 //  value of the jSONCategory.toString() : {"und":[{"value":"body_part"}]}

System.out.println("============@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+params);

パラメータの値を出力すると、次のように表示されます。

[type=page, title=title_part, body={"und":{"value":"body_part","format":"full_html"}]}]

そして、ボディ部分のみを渡すと、ステータス コード 406が返され、タイトルの場合はステータス コード 200で完璧に動作します

ここで私の質問は、文字列と jsonの両方を組み合わせてサーバーに渡す方法です。ここでタイトル部分String variableは json 変数で、ボディ部分はenter code here

ありがとう。

編集:

  JSONCategory = new JSONObject();
  JSONBody = new JSONObject();

 JSONObject Jsonvalue = new JSONObject();
                    Jsonvalue.put("value", body);

                    JSONArray jsonUnd = new JSONArray(); 
                    jsonUnd.put(Jsonvalue);

                    JSONCategory.put("und", jsonUnd);

                    JSONBody.put("type", "page");
                    JSONBody.put("title", title);
                    JSONBody.put("body", JSONCategory);

                    System.out
                            .println("WHOLE JSON OBJECT ====================>"
                                    + JSONBody.toString());

ログキャット:

 WHOLE JSON OBJECT ====================>{"type":"page","body":{"und":[{"value":"body"}]},"title":"title"}

JAVA コード

@Override
    public Void doInBackground(Void... params) {
        // TODO Auto-generated method stub

        String url = "url here";

        // strResponse1= postData(url,title,JSONCategory);
        postData(url, JSONBody);

        System.out.println("=========> Response from post  idea => "
                + strResponse1);

        return null;
    }
 -------------------------------------------------------------------------------

     protected void  postData(final String url, final JSONObject mainJSON) {


            Thread t = new Thread(){
            public void run() {
                    Looper.prepare(); //For Preparing Message Pool for the child Thread
                    HttpClient client = new DefaultHttpClient();
                    HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                    HttpResponse response;

                    try{
                        HttpPost post = new HttpPost(url);

                        StringEntity se = new StringEntity(mainJSON.toString());  
                        se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                        post.setEntity(se);
                        response = client.execute(post);
                        /*Checking response */
                        if(response!=null){
                            InputStream in = response.getEntity().getContent(); //Get the data in the entity
                        }

                    }
                    catch(Exception e){
                        e.printStackTrace();
                        //createDialog("Error", "Cannot Estabilish Connection");
                    }
                    Looper.loop(); //Loop in the message queue
                }
            };
            t.start();      


 }
4

1 に答える 1

1

リストの代わりに組み込みのJSONAPIを使用します。あなたの場合、最も内側のオブジェクトから最も外側のオブジェクトにトラバースすると、次のようになります。

JSONObject j4=new JSONObject(); 
j4.put("value",test_value); 

JSONArray j3=new JSONArray(); 
j3.put(0,j4); 

JSONObject j2=new JSONObject(); 
j2.put("und",j3);

JSONObject j1=new JSONObject(); 
j1.put("type","page");
j1.put("title",title_string); 
j1.put("body",j2);

次に、j1.toString();出力に必要なjson文字列を提供します。

次に、標準のHTTP POSTを使用して、次のようにサーバーに送信できます(スレッドを使用してネットワークコードをUIスレッドから遠ざけます)。

protected void sendJson(JSONObject j1) {
        Thread t = new Thread(){
        public void run() {
                Looper.prepare(); //For Preparing Message Pool for the child Thread
                HttpClient client = new DefaultHttpClient();
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                HttpResponse response;

                try{
                    HttpPost post = new HttpPost(URL);

                    StringEntity se = new StringEntity( j1.toString());  
                    se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                    post.setEntity(se);
                    response = client.execute(post);
                    /*Checking response */
                    if(response!=null){
                        InputStream in = response.getEntity().getContent(); //Get the data in the entity

                }
                catch(Exception e){
                    e.printStackTrace();
                    createDialog("Error", "Cannot Estabilish Connection");
                }
                Looper.loop(); //Loop in the message queue
            }
        };
        t.start();      
    }
于 2012-10-06T10:30:52.067 に答える