0

最初に: Android コード

public class MachineController extends AsyncTask<String, String,List<Machine>> {

private static String REST_URL = "...";
List<Machine> machines;


@Override
protected List<Machine> doInBackground(String... params) {
    machines = new ArrayList<Machine>();


    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(REST_URL);
    httpGet.addHeader("accept", "application/json");

    HttpResponse response;
    try {
        response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();

        if (entity != null) {
            InputStream instream = entity.getContent();

            BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
            StringBuilder sb = new StringBuilder();
            String line = null;

            while ((line = reader.readLine()) != null)
                sb.append(line + "n");

            String result = sb.toString();


            Gson gson = new Gson();
            JsonReader jsonReader = new JsonReader(new StringReader(result));
            jsonReader.setLenient(true);

            JsonParser parser = new JsonParser();
            JsonArray jsonArray = parser.parse(jsonReader).getAsJsonArray();

            for (JsonElement obj : jsonArray) {
                Machine machine = gson.fromJson(obj.getAsJsonObject().get("mobileMachine"), Machine.class);
                machines.add(machine);
                machines.get(0);

            }

            instream.close();

        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return machines;
}

}

JSONファイルのコードは次のとおりです

 [ 
{ "mobileMachine": 
{ "condition":"VERY_GOOD",
 "document":"", . . .
 "mobileCategory": {   "idNr":"1816e5697eb3e0c8442786be5274cb05cff04c06b4338467c8679770bff32313f7f372b5ec2f7527dad0de47d0fb117e",
 "mobileCategoryEng":"Bookletmaker",
 "mobileCategoryGer":"Broschuerenfertigung" }, 
"modelYear":2006, 
Abmessungen: 665x810mm " } }

{ "mobileMachine": 
{
     "condition":"VERY_GOOD"," ...... } } ]

内部に mobileCategory が含まれている場合があります。リスト内の mobileCategoryGer と mobileCategoryEng は常に null です。

JSON ファイルを編集できません。Json ファイルからの mobileCategoryGer と mobileCategoryEng の値のみが必要です。残りは正常に動作します。あなたが理解し、正しく解析するのを手伝ってくれることを願っています。

(私の英語でごめんなさい)

4

2 に答える 2

0

どうぞ。

    Type listType = new TypeToken<List<Machine>>() {}.getType();
    ArrayList<Result> results = gson.fromJson(result, listType);

変更した完全なコードは次のとおりです。

  public class MachineController extends AsyncTask<String, String,List<Machine>> {

     private static String REST_URL = "...";
     List<Machine> machines;


     @Override
   protected List<Machine> doInBackground(String... params) {

    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(REST_URL);
    httpGet.addHeader("accept", "application/json");

   HttpResponse response;
   try {
    response = httpClient.execute(httpGet);
    HttpEntity entity = response.getEntity();

    if (entity != null) {
        InputStream instream = entity.getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(instream));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null)
            sb.append(line + "n");

        String result = sb.toString();


        Gson gson = new Gson();

       Type listType = new TypeToken<List<Machine>>() {}.getType();
       machines= gson.fromJson(result, listType);

        instream.close();

    }
} catch (ClientProtocolException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
return machines;

}

于 2013-10-29T15:08:32.073 に答える