2016-11-30 59 views
0

我有以下jsonarray,我想分析它,但我得到空指針exception.The網址在瀏覽器的工作原理和數據如下如何從android中的JSONArray讀取數據?

{"showDriver": 
       [{"IDDriver":"1","Driverlogtit":"24.614095","Driverlatite":"46.509689"}, 
       {"IDDriver":"2","Driverlogtit":"24.639199","Driverlatite":"46.557047"}, 
        {"IDDriver":"3","Driverlogtit":"24.651724","Driverlatite":"46.559131"}, 
        {"IDDriver":"4","Driverlogtit":"24.625951","Driverlatite":"46.569466"}, 
        {"IDDriver":"8","Driverlogtit":"24.626692","Driverlatite":"46.544095"}]} 

在Android的通話JSON誤會我的錯誤

java.lang.NullPointerException 
at com.project.ytubasi.speedtaxi.MapsActivity.WhereDriver(MapsActivity.java:329) 
at com.project.ytubasi.speedtaxi.MapsActivity$3.onCameraIdle(MapsActivity.java:166) 
at com.google.android.gms.maps.GoogleMap$22.onCameraIdle(Unknown Source) 
at com.google.android.gms.maps.internal.zzf$zza.onTransact(Unknown Source) 
at android.os.Binder.transact(Binder.java:361) 
at ys.a(:com.google.android.gms.DynamiteModulesB:79) 
at maps.ad.j.b(Unknown Source) 
at maps.ad.j.a(Unknown Source) 
at maps.ad.j$2.run(Unknown Source) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5293) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:855) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:671) 
at dalvik.system.NativeStart.main(Native Method) 

有什麼錯在我的課

這裏進行呼叫

mGoogleMap.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
     @Override 
     public void onCameraIdle() { 


      CameraLat = googleMap.getCameraPosition().target.latitude; 
      CameraLong = googleMap.getCameraPosition().target.longitude; 


      markerlocationtext.setText(getCompleteAddressString(CameraLat, CameraLong)); 


       WhereDriver(String.valueOf(CameraLong), String.valueOf(CameraLat)); 

       String lat = DriverList.get(0).Driverlatite; 
       Toast.makeText(getApplicationContext(),""+lat,Toast.LENGTH_LONG).show(); 



     } 
    }); 


} 

我的數據類

AQuery aq; 
public void WhereDriver(String longt ,String lati) { 


    String url=muUrl+"WhereDriver?logt=24.632652&lat=46.558625";//+longt+"&lat="+lati; i used stable Number to see data 
    aq.ajax(url, JSONObject.class, this, "jsonCallback"); 
} 


public void jsonCallback(String url, JSONObject json, AjaxStatus status) throws JSONException { 

    if(json != null){ 

     try { 
      JSONArray DriverArray = json.getJSONArray("showDriver"); 

      for (int z = 0; z < DriverArray.length(); z++) { 

       JSONObject jsDriverArray = DriverArray.getJSONObject(z); 
       DriverList.add(new AllDriverLocation(jsDriverArray.getString("IDDriver"), 
         jsDriverArray.getString("Driverlogtit"), 
         jsDriverArray.getString("Driverlatite"))); 
      } 
     }catch (Exception ex) 
     { 

     } 



    }else{ 
    } 

} 

我定義我的列表作爲

public ArrayList <AllDriverLocation> DriverList = new ArrayList<>(); 

和AllDriverLocation類

public class AllDriverLocation { 
String IDDriver; 
String Driverlogtit; 
String Driverlatite; 


public AllDriverLocation(String IDDriver, String driverlogtit, String driverlatite) { 
    this.IDDriver = IDDriver; 
    Driverlogtit = driverlogtit; 
    Driverlatite = driverlatite; 
} 
} 
+0

的可能的複製[什麼是空指針異常,以及如何解決?(http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how- do-i-fix-it) – Ironman

+0

你能說出錯誤的行嗎? –

+0

你在329線有什麼? –

回答

0

這個問題似乎是在這條線 -

​​

請檢查變量CameraLong和CameraLat不是空

+0

我沒做任何改變同樣的錯誤 –

0

試試這個:

JSONArray driverArray = response.getJSONArray("showDriver"); 
        String IDDriver = "",Driverlogtit="",Driverlogtit=""; 
        for (int z = 0; z < driverArray.length(); z++) { 
         try { 
          JSONObject jsDriverArray = driverArray.getJSONObject(z); 
          if(jsDriverArray.has("IDDriver")){ 
           IDDriver = jsDriverArray.getString("IDDriver"); 
          } if(jsDriverArray.has("Driverlogtit")){ 
           Driverlogtit = jsDriverArray.getString("Driverlogtit"); 
          } if(jsDriverArray.has("Driverlatite")){ 
           Driverlogtit = jsDriverArray.getString("Driverlatite"); 
          } 

          DriverList.add(new AllDriverLocation(IDDriver,Driverlogtit,Driverlogtit)); 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 

的JSONObject類有一個方法命名爲 「有」:

http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

返回true,如果該對象有一個名稱映射。映射可能是NULL。

+0

沒有工作,同樣的問題,同樣的錯誤 –

+0

如果API sucess與否? –

+0

是成功的,但同樣的錯誤 –

0

爲了避免應用程序崩潰,您可以添加條件來檢查驅動程序數組是否爲空?試試這個

JSONArray DriverArray = !data.isNull(getString("showDriver"))?data.getJSONArray(getString("showDriver")) : new JSONArray(); 
+0

而不是你可以去的optString() –