2016-06-13 130 views
-2

我想在我的PHP MySQL中检索一行并将其放入我的微调器中。我有这个错误:org.json.JSONObject无法在Android Studio中转换为JSONArray

06-13 04:56:53.656 10276-10342/com.example.eugene.spinnersql W/System.err: org.json.JSONException: Value {"result":[{"DriverID":"28","VehicleID":"122","BodyType":"Sedan","Make":"Toyota","Series":"Vios"},{"DriverID":"28","VehicleID":"119","BodyType":"Sedan","Make":"Honda","Series":"Civic"}]} of type org.json.JSONObject cannot be converted to JSONArray 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at org.json.JSON.typeMismatch(JSON.java:111) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:96) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at org.json.JSONArray.<init>(JSONArray.java:108) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at com.example.eugene.spinnersql.DataParser.parseData(DataParser.java:66) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at com.example.eugene.spinnersql.DataParser.doInBackground(DataParser.java:61) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at com.example.eugene.spinnersql.DataParser.doInBackground(DataParser.java:19) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
06-13 04:56:53.657 10276-10342/com.example.eugene.spinnersql W/System.err:  at java.lang.Thread.run(Thread.java:818) 
06-13 04:56:53.725 10276-10311/com.example.eugene.spinnersql W/EGL_emulation: eglSurfaceAttrib not implemented 
06-13 04:56:53.725 10276-10311/com.example.eugene.spinnersql W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xdfefe220, error=EGL_SUCCESS 

这是我的数据解析器。

private int parseData(){ 
    try { 
     JSONArray ja = new JSONArray(jsonData); 
     JSONObject jo = null; 

     vehicles.clear(); 
     Vehicle s = null; 

     for(int i = 0; i < ja.length(); i++){ 
      jo = ja.getJSONObject(i); 

      int vehicleid = jo.getInt("VehicleID"); 
      String make = jo.getString("Make"); 
      String series = jo.getString("Series"); 

      s = new Vehicle(); 
      s.setVehicleID(vehicleid); 
      s.setMake(make); 
      s.setSeries(series); 

      vehicles.add(vehicleid + " " + make + " " + series); 
     } 

     return 1; 

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

    return 0; 
} 

这里是我的数据下载:

private String downloadData(){ 
    HttpURLConnection con = Connector.connect(urlAddress); 
    if(con==null){ 
     return null; 
    } 

    InputStream inputStream = null; 
    try { 
     inputStream = new BufferedInputStream(con.getInputStream()); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 

     String line=null; 
     StringBuffer response = new StringBuffer(); 

     if(bufferedReader != null){ 

      while((line=bufferedReader.readLine()) != null){ 
       response.append(line+"\n"); 
      } 

      bufferedReader.close(); 

     } else { 
      return null; 
     } 

     return response.toString(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if(inputStream != null){ 
      try{ 
       inputStream.close(); 
      } catch (IOException e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
    return null; 
} 

这是我的连接器:

public static HttpURLConnection connect(String urlAddress){ 
    try { 
     URL url = new URL(urlAddress); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 

     con.setRequestMethod("GET"); 
     con.setConnectTimeout(20000); 
     con.setReadTimeout(20000); 
     con.setDoInput(true); 

     return con; 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

这是我的数据getter和setter:

public class Vehicle { 

int VehicleID; 
String Make, Series; 


public int getVehicleID() { 
    return VehicleID; 
} 

public void setVehicleID(int vehicleID) { 
    VehicleID = vehicleID; 
} 

public String getMake() { 
    return Make; 
} 

public void setMake(String make) { 
    Make = make; 
} 

public String getSeries() { 
    return Series; 
} 

public void setSeries(String series) { 
    Series = series; 
} 

} 
+1

学习一些基本的JSON ...'{ “结果”:[...]}'不是JSONArray – Selvin

回答

2

您的JSON数据是JSONObject类型的。你想要的JSONArray被嵌入在关键字"result"之下。你可以像找回这个

JSONArray ja = new JSONObject(jsonData).getJSONArray("result")); 
+0

谢谢男人!你是我的救世主! :D –

-1

JSONObject数据从服务器来不JSONArray数据

ArrayList<Vehicle> arrayList = new ArrayList<>(); 
    private int parseData(){ 
     try { 

      JSONObject object= new JSONObject(jsonData); 
      JSONArray ja = object.getJSONArray("result"); 
      vehicles.clear(); 
      for(int i = 0; i < ja.length(); i++){ 
       JSONObject jo = ja.getJSONObject(i); 
       Vehicle Ve = new Vehicle(); 

       Ve.setVehicleID(jo.getInt("VehicleID")); 
       Ve.setMake(jo.getString("Make")); 
       Ve.setSeries(jo.getString("Series")); 

       vehicles.add(Ve); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     Toast.makeText(this,"Size of List="+arrayList.size(),Toast.LENGTH_LONG).show(); 
    } 
+0

命名变量'object'是一个非常奇怪的选择 –

+0

@TimCastelijns thanx将得到改进 –

0

在解析JSON对象将下面的代码

String result; 
result = jsonData.getString("result"); 
JSONArray ja = new JSONArray(result); 

只需用JA的代码替换此代码并运行它。

希望这会帮助你!欢呼!

0

下面的代码替换您的parseData()方法,你不会在解析得到任何错误:

private int parseData(){ 
     try { 
      JSONArray ja = new JSONArray(new JSONObject(jsonData)); 
      JSONObject jo = null; 

      vehicles.clear(); 
      Vehicle s = null; 

      for(int i = 0; i < ja.length(); i++){ 
       jo = ja.getJSONObject(i); 

       int vehicleid = Integer.parseInt(jo.getString("VehicleID")); 
       String make = jo.getString("Make"); 
       String series = jo.getString("Series"); 

       s = new Vehicle(); 
       s.setVehicleID(vehicleid); 
       s.setMake(make); 
       s.setSeries(series); 

       vehicles.add(vehicleid + " " + make + " " + series); 
      } 

      return 1; 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     return 0; 
    } 
相关问题