0

タイトルが本当に言うように。2つの列があります。それらをテキストビューに入れたいので、それを行いました。ただし、各列から1つずつ、下の2つの結果のみが表示されます。非常に奇妙な。これが私のコードです:http://pastebin.com/qNgfHfT3

解析/onPostExecuteは、問題が発生している下部に向かっています。

注意点:「work」と「dontwork」というラベルの付いたログにはすべての結果が表示されますが、onPostExecute(GoogleとGoogle1)のログには最後の結果しか表示されないため、エラーは解析から表示への転送にあると推測されます。

ここで助けていただければ幸いです。ありがとう。

4

1 に答える 1

2

JSON 応答を受け取っている場合は、Gson を使用して解析することをお勧めします。全体を 2 行で解析できる限り、強くお勧めします。適切なオブジェクトを作成するのは、次のように簡単です。

YourObject object = gson.fromJson(responseReader, YourObject.class);

または、アイテムのリストを取得している場合でも:

Type listType = new TypeToken<List<YourObject>>() {}.getType();
List<YourObject> objects = gson.fromJson(responseReader, listType);

これはあなたのニーズにぴったり合う例です

プロセスが完了すると、オブジェクト (またはオブジェクトのリスト) をアクセス可能な変数で使用できるようになります。

編集: まず、Asynctask には次のパラメーターが必要です。

public class HttpTask extends AsyncTask<Void, Void, ArrayList<Driver>> {

doInBackground メソッドはその配列を onPostExecute に渡す必要があります。

@Override
protected ArrayList<Driver> doInBackground(Void... params) {

残りは、JSON の解析が開始されたときに取得します。

//PARSING JSON DATA
try {
    JSONObject json_data;
    Driver d;

    jArray = new JSONArray(result);
    int l = jArray.length();

    if(l>0){
        ArrayList<Driver> drivers = newArrayListList<Driver>();

        for (int i = 0; i < l; i++) {

            json_data = jArray.getJSONObject(i);

            d = new Driver(json_data.optString("Driver_full_name"), json_data.optString("Drives_for"));
            drivers.add(d);

            Log.i("work", returnString);
            Log.i("dontwork", somethingelse);

        }

   } catch (JSONException e1) {
       Log.d("DB", "Error somewhere");
       CurrentSeasonDrivers_DriverName.this.runOnUiThread(new Runnable() {
           public void run() {
               Toast.makeText(CurrentSeasonDrivers_DriversName, "Could not parse data so shut up", Toast.LENGTH_LONG).show();
           }
       });
   }
   return drivers;
}

protected void onPostExecute(ArrayList<Drivers>... drivers) {

   Log.i("Google", returnString);
   Log.i("Google1", somethingelse);

   String firstDriverName = drivers.get(0).name;
   String firstDriverDrivesFor = drivers.get(0).drivesfor;

   String secondDriverName = drivers.get(1).name;

   TextView drivername = (TextView) findViewById(R.id.DriverName);
   drivername.setText(firstDriverName);

   TextView drivesfor = (TextView) findViewById(R.id.DrivesFor);
   drivesfor.setText(firstDriverDrivesFor);

}

これとドライバー用のオブジェクトで円が完成します。

public class Driver{

    public String name;
    public String drivesfor;

    public Driver(String _name, String _drivesfor){
        name = _name;
        drivesfor = _drivesfor;
    }

}

ここから引き継ぐことができると思います。進捗状況をお知らせください。

于 2012-09-05T21:01:25.290 に答える