2011-07-09 7 views
0

JSONからの多くの値を取得し、それがこのような多くの値を得た私はアンドロイドに緯度と経度を取得する必要があります

ArrayList<String> longitude; 
ArrayList<String> latitude; 

public void parseJson(String result) { 
     try { 
      JSONArray jArray = new JSONArray(result); 
      for (int i = 0; i < jArray.length(); i++) { 
       JSONObject jo = jArray.getJSONObject(i); 
       latitude.add(jo.getString("Latitude").toString()); 
       longitude.add(jo.getString("Longitude").toString()); 
      } 
     } catch (JSONException e) { 
      Log.e("log_tag", "Error parsing data " + e.toString()); 
     } 
    } 

しかしとき私は配列のサイズを確認します、それは空です。 誰かが助けてくれると思いますか?ありがとう

@afterが変更されても、まだ配列のサイズは0です。だから、私はそれがトーストで止めるのWHERE検索してみましたし、私が見つかりました:

public void parseJson(String result) throws JSONException { 

     longitude = new ArrayList<String>(); 
     latitude = new ArrayList<String>(); 

     JSONArray jArray = (JSONArray)JSONValue.parse(result); 

     for (Object obj: jArray) { 

      JSONObject jo = (JSONObject)obj; 
      //here is when I toast it's got nothing 
      latitude.add(jo.get("Latitude").toString()); 
      longitude.add(jo.get("Longitude").toString()); 
     } 

    } 

私は答えを得た@aroth !!私はこのような私の方法を使用するバック:

public void parseJson(String result) throws JSONException { 

     longitude = new ArrayList<String>(); 
     latitude = new ArrayList<String>(); 
     JSONArray jArray = new JSONArray(result); 
     for (int i = 0; i < jArray.length(); i++) { 
      JSONObject jo = jArray.getJSONObject(i); 
      latitude.add(jo.getString("Latitude").toString()); 
      longitude.add(jo.getString("Longitude").toString()); 
     } 

私はこれらを宣言し忘れてしまったと思うん:

  longitude = new ArrayList<String>(); 
     latitude = new ArrayList<String>(); 

私はまだあなたのコードが動作しない理由も考えて。しかし、json.orgライブラリはすべて無意味JSONExceptionを投げるそのget<Type>方法で不鈍角である):)あなたの助けのために

答えて

1

をたくさんありがとう、私はsimple-jsonへの切り替えをお勧めします。次に、あなたが行うことができます:

ArrayList<String> longitude; 
ArrayList<String> latitude; 

public void parseJson(String result) { 
    longitude = new ArrayList<String>(); 
    latitude = new ArrayList<String>(); 
    JSONArray jArray = (JSONArray)JSONValue.parse(result); 
    for (Object obj : jArray) { 
     JSONObject jo = (JSONObject)obj; 
     latitude.add(jo.get("Latitude").toString()); 
     longitude.add(jo.get("Longitude").toString()); 
    } 

} 

//a simple test case 
public static void main(String[] args) { 
    String json = "[{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}, \n{\"Latitude\": \"1.23\", \"Longitude\": \"1.23\"}]";  
    MyParser parser = new MyParser(); 
    parser.parseJson(json); 

    //should print: 3, 3 
    System.out.println(parser.latitude.size() + ", " + parser.longitude.size()); 
} 

は、あなたの入力JSONはあなたの例のスニペットと一致すると仮定すると、動作するはずです。

+0

それはJSONValueでエラーを持っているが(このクラスを持っていないことに思える)とjArrayで(オブジェクトobj:jArray)のために「のみのアレイまたはjava.lang.Iterableのインスタンスを反復することができます」 – Yoo

+1

@デイジー - はい、私が言ったように、まずあなたが現在使っているjson.orgライブラリを取り除き、それを[simple-json](http://code.google.com/p/json-simple /)バージョンです。そして、(あなたがEclipseを使っていると仮定して)あなたの輸入量を修正するために 'Ctrl + Shift + O'を実行すればいいです。 – aroth

+0

申し訳ありませんが、jArray for(Object obj:jArray)はエラーを返します。 – Yoo

0

gsonライブラリを使用してみてください。コンパクトで高速です。

https://sites.google.com/site/gson/gson-user-guide

+0

gsonはジェネリックなJSONオブジェクトをマップにデシリアライズできますか、またはデシリアライズするJSONオブジェクトの各フレーバにコンクリートコンテナクラスを指定する必要がありますか? – aroth

+0

Gsonには、任意の複雑さのJSONオブジェクトをマップにデシリアライズするためのメカニズムが組み込まれていません。そうするには、手動による処理が必要です。 Jacksonは簡単なコード行でこれを行うことができます。私は、GsonとJacksonを使ってhttp://programmerbruce.blogspot.com/2011/06/gson-v-jackson.htmlでこれを行う例を投稿しました。「単純なコード行」というフレーズを検索します。 –

関連する問題