2014-02-10 110 views
0

我試圖發送一個JSONArray到我的服務器,我的PHP腳本將採取值和搜索我的數據庫匹配,但我不能讓它發送。我不斷收到一個JSONException發佈一個JSON數組到PHP

「錯誤分析數據org.json.JSONException: java.lang.String類型的值不能轉換爲JSONObject的」

如果我做了vardump在服務器上它顯示爲空。

我有一個像所示的陣列:

ArrayList myList: 
    ["BoUsQJP", "ldT6brS", "iVRuJvmP"] 

我用下面的代碼來創建對象,發送給我的JSON解析器。我使用「腳本」爲php腳本服務器端來處理它。

public JSONObject checkInList(ArrayList<String> myList) { 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("tag", checkinlist_tag)); 
    params.add(new BasicNameValuePair("refids", myList.toString())); 
    JSONObject json = jsonParser.getJSONCheckList(checkinlistURL, params); 
    System.out.println("Show me....." + params); 
    return json; 
} 

JSON解析器代碼:

public JSONObject getJSONCheckList(String url, List<NameValuePair> params) { 

    // Making HTTP request 
    try { 
     // defaultHttpClient 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     httpPost.setEntity(new UrlEncodedFormEntity(params)); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

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

    try { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(
       is, "utf-8"), 8); 
     StringBuilder sb = new StringBuilder(); 
     String line = null; 
     while ((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
     Log.e("JSON", json); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON String 
    return jObj; 

} 

我缺少什麼?

+0

你的json是什麼樣的?據我所知,json沒有'\ n' –

回答

0

首先爲錯誤,你沒有JSONObject,你有一個JSONArray。數組中的類型是String。所以你需要將它解析爲一個json的字符串數組。或者你可以讓他的字符串,修剪開幕和結束括號「[]」,然後修剪白色空間。現在根據逗號分隔。

OK,我會推薦這樣的事情

@Override 
    protected List<T> doInBackground(Void... params) 
    { 
     try 
     { 
      if (httpClient == null) 
       httpClient = new DefaultHttpClient(); 

      HttpResponse response = httpClient.execute(request); 
      final int statusCode = response.getStatusLine().getStatusCode(); 
      if (statusCode != HttpStatus.SC_OK) 
      { 
       Log.d(TAG, "FAILED STATUS"); 
       Log.d(TAG, "reason: " + response.getStatusLine().getReasonPhrase() + ", code: " + response.getStatusLine().getStatusCode()); 
       Log.d(TAG, "attempted url: " + request.getURI().toString()); 
       return null; 
      } 
      InputStream contentInputStream = response.getEntity().getContent(); 
      String data = IOUtils.toString(contentInputStream); 
      Log.d(TAG, "array json = " + data); 
      data = data.toString(); 
      List<T> listOfT = Json.getGson().fromJson(data, type); 
      return listOfT; 

     } catch (ClientProtocolException e) 
     { 
      Log.d("TAG", "ClientProtocolException", e); 
     } catch (IOException e) 
     { 
      Log.d("TAG", "IOException", e); 
     } 
     return null; 
    } 

因爲你正在尋找一個字符串列表,你會在JSON行改變這個

List<String> list = Json.getGson().fromJson(data, new TypeToken<List<String>>(){}.getType()); 

您將需要GSON罐子,我認爲IOUtils的apache jar。

如果你不想使用Gson,那麼不要害怕,你需要的一切應該在字符串data

如果您願意,也可以忽略泛型,這只是我爲自己製作的一個大型多功能和易用庫的一部分,因爲我做了很多應用程序。另外,如果你想接受更多的狀態,那麼只需200就可以了。

另一件事,這是一件容易的事,只是這樣做

JSONObject jObj = new JSONObject(); 
jObj.put("key", "value"); 

也容易與上面的代碼創建一個JSONArray或JSONObject的這樣

JSONArray jArray = new JSONArray(data); 
JSONObject jObj = new JSONObject(data); 
0

一般來說,在您的PHP腳本中必須有一些錯誤。 你有沒有檢查你的日誌?有什麼不尋常的東西?如果我猜對了。 json一定是不正確的,因爲它應該是。

Log.e("JSON", json);