2011-08-15 17 views
0

次のコードは私のために働いていません。私が間違っているつもりだあなたはTEL私を...JSON GSON from http

public class HttpActivity extends Activity { 
/** Called when the activity is first created. */ 

    /** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listplaceholder); 
    ListView lv= (ListView)findViewById(R.id.list); 

    Gson gson = new Gson(); 

try { 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpGet httpget = new HttpGet("http://......."); 
    HttpResponse response = httpclient.execute(httpget); 
    BufferedReader br = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    DataObject[] obj = gson.fromJson(br, DataObject[].class); 


    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
    for(int i=0 ; i<obj.length ; i++){  
     HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("AC", obj[i].AC); 
       map.put("Fleet", obj[i].Fleet); 
       map.put("SubFleet", obj[i].SubFleet); 
       fillMaps.add(map); 
     } 
    SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.main, new String[] {"AC", "Fleet", "SubFleet"}, new int[] {R.id.ac, R.id.fleet, R.id.subfleet}); 
    lv.setAdapter(adapter); 

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

DataObject.java

import com.google.gson.annotations.SerializedName; 

パブリッククラスDataObjectが{

@SerializedName("AC") 
public String AC; 

@SerializedName("Fleet") 
public String Fleet; 

@SerializedName("SubFleet") 
public String SubFleet; 

public DataObject(String AC, String Fleet, String SubFleet) 
{ 
    this.AC = AC; 
    this.Fleet = Fleet; 
    this.SubFleet = SubFleet; 
} 
public String toString() 
{ 
    return this.AC + this.Fleet + this.SubFleet; 
} 

}

出力は何も表示されないことができます。


返信ありがとうございます。 これはJSONファイルです。

[{"AC":"200","Fleet":"MD80","SubFleet":"83G"},{"AC":"201","Fleet":"MD80","SubFleet":"83G"},{"AC":"202","Fleet":"MD80","SubFleet":"83G"},{"AC":"262","Fleet":"MD80","SubFleet":"S80"},{"AC":"271","Fleet":"MD80","SubFleet":"S80"},{"AC":"278","Fleet":"MD80","SubFleet":"S80"},{"AC":"319","Fleet":"B767","SubFleet":"76ER"},{"AC":"320","Fleet":"B767","SubFleet":"76ER"},{"AC":"321","Fleet":"B767","SubFleet":"76ER"}] 

このプログラムは私のために働いた。

public class HttpActivity extends Activity { 
/** Called when the activity is first created. */ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listplaceholder); 
    ListView lv= (ListView)findViewById(R.id.list); 


    String response = "[{\"AC\":\"200\",\"Fleet\":\"MD80\",\"SubFleet\":\"83G\"}, {\"AC\":\"201\",\"Fleet\":\"MD80\",\"SubFleet\":\"83G\"}]"; 
    Gson gson = new Gson(); 
    DataObject[] obj = gson.fromJson(response, DataObject[].class); 
    String str = gson.fromJson("\"ABC\"", String.class); 
    List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>(); 
    for(int i=0 ; i<obj.length ; i++){  
    HashMap<String, String> map = new HashMap<String, String>(); 
     map.put("AC", obj[i].AC); 
     map.put("Fleet", obj[i].Fleet); 
     map.put("SubFleet", obj[i].SubFleet); 
     fillMaps.add(map); 
     } 
SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.main, new String[] {"AC", "Fleet", "SubFleet"}, new int[] {R.id.ac, R.id.fleet, R.id.subfleet}); 
lv.setAdapter(adapter); 

つまり、文字列オブジェクトで動作しています。 JSON GSONが動作しています。では、Httpの何が問題なのですか?

+0

私はそれをデシリアライズする必要がありますか? – user533844

+0

何がうまくいかないのかもっと詳しく知ることができますか?ハッシュマップはデータで埋められていますか? 'obj'はデータでいっぱいですか? forループが呼び出されるか、 'obj.length'がnullか0か – Woody

+0

FileNotFoundExceptionおよびJsonParseException – user533844

答えて

1

FileNotFoundExceptionとJsonParseExceptionを使用すると、JSONオブジェクトの作成ではなく、HTTPのフェッチと関連があると思います。いくつかのブレークポイントを設定し、フェッチしているWebサイトが有効なJSONを返していることを確認してください(thisのようなバリデータを使って実行してください)

これが役に立たない場合は、ここに返信してください。

EDIT:あなたもこのライン

DataObject[] obj = gson.fromJson(br, DataObject[].class) 

がしようとする他のただ、何かこの

DataObject[] obj = gson.fromJson(br, DataObject.class) 

すべきではないと確信しています。

EDIT 2:BufferedReaderをStringに変換し、そのように関数に渡してみてください。また、HTTPフェッチが正しく機能していることを確認するために文字列を出力することもできます。これが最善の方法かどうかは分かりませんが、うまくいくはずです。

BufferedReader br = new BufferedReader(fr); 
String line; 
StringBuilder result = new StringBuilder(); 
while ((line = br.readLine()) != null) { 
    result.append(line); 
} 

-Woody

+0

私はうまく動作しませんでした。文字列の "with \"を置換する必要がありますか? – user533844

0

Gsonストリーミングライブラリを使用してみてください - https://sites.google.com/site/gson/streaming

ArrayList<YourObject> yourObjects = new ArrayList<YourObject>(); 
URL url = new URL("http://..."); 
JsonReader reader = new JsonReader(new InputStreamReader(url.openStream())); 
reader.beginArray(); 
while(reader.hasNext()) 
{ 
    YourObject o = gson.fromJson(reader, YourObject.class); 
    yourObjects.add(o); 
} 
reader.endArray(); 
reader.close();