2013-08-05 155 views
0

發送JSON數組對象PHP服務作爲參數從Android PHP服務我有一個JSON對象有許多字符串數據和jsonarray數據發送JSON數組對象作爲參數從Android

**ArrayList<NameValuePair> nameValuePair = new ArrayList<NameValuePair>(); 
    HttpResponse httpResponse = null; 

    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     JSONArray product_array = null; 
     /* 
     * namevaluepair.add(new BasicNameValuePair("val1",val1)); 
     * namevaluepair.add(new BasicNameValuePair("val2",val2)); 
     */ 

     try { 
      nameValuePair = new ArrayList<NameValuePair>(); 
      nameValuePair.add(new BasicNameValuePair("n", jsonParams 
        .getString("n"))); 
      nameValuePair.add(new BasicNameValuePair("e", jsonParams 
        .getString("e"))); 
      nameValuePair.add(new BasicNameValuePair("p", jsonParams 
        .getString("p"))); 
      nameValuePair.add(new BasicNameValuePair("a", jsonParams 
        .getString("a"))); 
      nameValuePair.add(new BasicNameValuePair("t", jsonParams 
        .getString("t"))); 
      nameValuePair.add(new BasicNameValuePair("m", jsonParams 
        .getString("m"))); 
      product_array = jsonParams.getJSONArray("pj"); 
      Log.i(TAG + "PPPPJJJ", product_array.toString()); 
     // nameValuePair.add(new BasicNameValuePair("pj", product_array 
       // .toString())); 
     } catch (Exception e) { 
      Log.e(TAG, "2:" + e.getMessage()); 
     } 

     String enc_url = URLEncoder.encode(url); 
     HttpPost httpPost = new HttpPost(enc_url); 
     httpPost.addHeader("accept", "application/json"); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePair)); 
     httpResponse = httpClient.execute(httpPost); 


    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }** 

但它不是轉發JSON數組到服務器,服務器的PHP文件是 沒有收到該數組數據,但與瀏覽器工作正常 因此,我認爲問題是在我的代碼。

執行代碼時出現以下錯誤。

07-08 23:37:56.504: W/System.err(3219): java.lang.IllegalStateException: Target host must not be null, or set in parameters. 
07-08 23:37:56.514: W/System.err(3219):  at org.apache.http.impl.client.DefaultRequestDirector.determineRoute(DefaultRequestDirector.java:572) 
07-08 23:37:56.514: W/System.err(3219):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:292) 
07-08 23:37:56.514: W/System.err(3219):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
07-08 23:37:56.525: W/System.err(3219):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
07-08 23:37:56.525: W/System.err(3219):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
07-08 23:37:56.525: W/System.err(3219):  at com.nufame.nufamemotel.utils.ConnectToNetwork.posthttp(ConnectToNetwork.java:200) 
07-08 23:37:56.525: W/System.err(3219):  at com.nufame.nufamemotel.utils.ConnectToNetwork.getData(ConnectToNetwork.java:67) 
07-08 23:37:56.534: W/System.err(3219):  at com.nufame.nufamemotel.utils.QueryServer.doInBackground(QueryServer.java:20) 
07-08 23:37:56.534: W/System.err(3219):  at com.nufame.nufamemotel.utils.QueryServer.doInBackground(QueryServer.java:1) 
07-08 23:37:56.534: W/System.err(3219):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
07-08 23:37:56.534: W/System.err(3219):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
07-08 23:37:56.544: W/System.err(3219):  at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
07-08 23:37:56.544: W/System.err(3219):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
07-08 23:37:56.544: W/System.err(3219):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
07-08 23:37:56.544: W/System.err(3219):  at java.lang.Thread.run(Thread.java:1019) 
07-08 23:37:56.544: E/...Error occured ....response(3219): java.lang.IllegalStateException: Target host must not be null, or set in parameters. 
07-08 23:37:56.544: I/OrderHandler(3219): exception 
07-08 23:37:56.544: W/System.err(3219): org.json.JSONException: Value exception of type java.lang.String cannot be converted to JSONObject 
07-08 23:37:56.564: W/System.err(3219):  at org.json.JSON.typeMismatch(JSON.java:107) 
07-08 23:37:56.564: W/System.err(3219):  at org.json.JSONObject.<init>(JSONObject.java:158) 
07-08 23:37:56.564: W/System.err(3219):  at org.json.JSONObject.<init>(JSONObject.java:171) 
07-08 23:37:56.564: W/System.err(3219):  at com.nufame.nufamemotel.handler.OrderHandler$1.onPostExecute(OrderHandler.java:108) 
07-08 23:37:56.564: W/System.err(3219):  at com.nufame.nufamemotel.handler.OrderHandler$1.onPostExecute(OrderHandler.java:1) 
07-08 23:37:56.564: W/System.err(3219):  at android.os.AsyncTask.finish(AsyncTask.java:417) 
07-08 23:37:56.564: W/System.err(3219):  at android.os.AsyncTask.access$300(AsyncTask.java:127) 
07-08 23:37:56.564: W/System.err(3219):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 
07-08 23:37:56.574: W/System.err(3219):  at android.os.Handler.dispatchMessage(Handler.java:99) 
07-08 23:37:56.574: W/System.err(3219):  at android.os.Looper.loop(Looper.java:123) 
07-08 23:37:56.574: W/System.err(3219):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
07-08 23:37:56.574: W/System.err(3219):  at java.lang.reflect.Method.invokeNative(Native Method) 
07-08 23:37:56.574: W/System.err(3219):  at java.lang.reflect.Method.invoke(Method.java:507) 
07-08 23:37:56.574: W/System.err(3219):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
07-08 23:37:56.584: W/System.err(3219):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
07-08 23:37:56.584: W/System.err(3219):  at dalvik.system.NativeStart.main(Native Method) 
+0

你想將數據發送到服務器的數據庫? –

+0

試試這個 WISHY

+0

是啊,我正在裝盤這些數據發送到服務器 –

回答

3

您可以使用droidQuery發送此很容易:

$.ajax(new AjaxOptions().url("http://www.example.com")//switch with real URL 
         .type("POST") 
         .dataType("json") 
         .data(jsonParams)//your JSON Object 
         .context(this) 
         .success(new Function() { 
          @Override 
          public void invoke($ droidQuery, Object... params) { 
           //if you are expecting a JSONObject: 
           JSONObject response = (JSONObject) params[0]; 
           //TODO: handle response 
          } 
         }) 
         .error(new Function() { 
          @Override 
          public void invoke($ droidQuery, Object... params) { 
           AjaxError error = (AjaxError) params[0]; 
           $.toast(error.status + ": " + error.reason, Toast.LENGTH_LONG); 
           //retry once 
           $.ajax(error.request, error.options.error($.noop())); 
          } 
         })); 
1

這是我認爲它應該做的事:

URL url = new URL("//ip of your PHP function on your web server"); 
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 
StringBuilder postDataBuilder = new StringBuilder(); 
postDataBuilder.append(URLEncoder.encode("005", "UTF-8")); 
urlConnection.setDoOutput(true); 
urlConnection.setRequestMethod("POST"); 
urlConnection.setUseCaches(false); 
urlConnection.setConnectTimeout(10000); 
urlConnection.setReadTimeout(10000); 
urlConnection.setRequestProperty("Content-Type","application/json"); 
urlConnection.connect(); 
JSONObject jsonParam = new JSONObject(); 
jsonParam.put("item 1", "value 1"); 
//Add other pairs here, as you are doing 
OutputStreamWriter out = new OutputStreamWriter(urlConnection.getOutputStream()); 
out.write(jsonParam.toString()); 
out.close(); 
InputStream is = urlConnection.getInputStream(); 
BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
String line; 
StringBuffer response = new StringBuffer(); 
while((line = br.readLine()) != null){ 
    response.append(line); 
    response.append('\n'); 
} 
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { 
System.out.println(response.toString()); 
} 
else {          
    System.out.println("Incorrect response code"); 
} 
br.close(); 
urlConnection.disconnect(); 

此代碼允許您使用InputStreamBufferedReader發送JSON對象,然後得到響應。希望這有幫助!

+0

mattpic >我有很多其他的參數,只是字符串,只有一個參數我應該作爲json數組傳遞 –

+0

現在它工作我解決了問題,String enc_url = URLEncoder.encode(url); HttpPost httpPost = new HttpPost(enc_url); httpPost.addHeader(「accept」,「application/json」); –

+0

我很高興我能幫上忙。如果這有助於您找到解決方案,請標記答案正確 – mattpic

1
JSONObject j = new JSONObject(); try { 
     j.put("n", jsonParams 
       .getString("n")); 
     j.put("e", jsonParams 
       .getString("e")); 
     j.put("p", jsonParams 
       .getString("p")); 
     j.put("e", jsonParams 
       .getString("p")); 
      j.put("a", jsonParams 
       .getString("a")); 
     j.put("t", jsonParams 
       .getString("t")); 
     j.put("m", jsonParams 
       .getString("m")); 
     product_array = jsonParams.getJSONArray("pj"); 
     Log.i(TAG + "PPPPJJJ", product_array.toString()); 

     j.put("array", product_array); 
    } catch (Exception e) { 
     Log.e(TAG, "2:" + e.getMessage()); 
    } 

    String enc_url = URLEncoder.encode(url); 
    HttpPost httpPost = new HttpPost(enc_url); 
    httpPost.addHeader("accept", "application/json"); 
    httpPost.setEntity(new UrlEncodedFormEntity(j)); 
    httpResponse = httpClient.execute(httpPost); 


} catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
} catch (ClientProtocolException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
}** 

也參考這裏Android JSON HttpClient to send data to PHP server with HttpResponse

+0

我解決了它在我刪除標題時正常工作的問題。 –