web-dev-qa-db-ja.com

解析AndroidボレーJSONArray応答

VolleyでJSONArrayGETリクエストを送信すると、指定されたJSON配列が返されます。これが私のリクエストです:

JsonArrayRequest getRequest = new JsonArrayRequest(url,
                    new Response.Listener<JSONArray>()
                    {
                        @Override public void onResponse(JSONArray response) {

                            Log.d("Response", response.toString());
                        }
                    },
                    new Response.ErrorListener()
                    {
                        @Override public void onErrorResponse(VolleyError error) {
                            Log.d("Error.Response", error.toString());
                        }
                    }
                  );
                  VolleySingleton.getInstance(this).addToRequestQueue(getRequest); //Call to get dashboard feed
}

ご覧のとおり、現在、応答をログアウトしています。ただし、配列を解析して、結果をリストビューに表示したいと思います。これに関するドキュメントは素晴らしいものではなく、Androiddev。VolleyからJSON配列を解析し、結果をリストビューに表示する適切な方法は何ですか? ? 収集しましたparseNetworkResponseを使用する必要がありますが、実装方法がわかりません。

9
settheline

JSON解析にはGSONライブラリに固執することをお勧めします。次に、JSON処理が埋め込まれたVolleyリクエストがどのように見えるかを示します。

import Java.io.UnsupportedEncodingException;

import com.Android.volley.NetworkResponse;
import com.Android.volley.ParseError;
import com.Android.volley.Request;
import com.Android.volley.Response;
import com.Android.volley.Response.ErrorListener;
import com.Android.volley.Response.Listener;
import com.Android.volley.toolbox.HttpHeaderParser;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;

/**
 * Volley GET request which parses JSON server response into Java object.
 */
public class GsonRequest<T> extends Request<T> {

    /** JSON parsing engine */
    protected final Gson gson;

    /** class of type of response */
    protected final Class<T> clazz;

    /** result listener */
    private final Listener<T> listener;

    public GsonRequest(String url, Class<T> clazz, Listener<T> listener, 
            ErrorListener errorListener) {
        super(Method.GET, url, errorListener);

        this.clazz = clazz;
        this.listener = listener;
        this.gson = new Gson();
    }

    @Override
    protected void deliverResponse(T response) {
        listener.onResponse(response);
    }

    @Override
    protected Response<T> parseNetworkResponse(NetworkResponse response) {
        try {
            String json = new String(
                    response.data, HttpHeaderParser.parseCharset(response.headers));
            return Response.success(
                    gson.fromJson(json, clazz), HttpHeaderParser.parseCacheHeaders(response));

        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        } catch (JsonSyntaxException e) {
            return Response.error(new ParseError(e));
        }
    }
}

http://example.com/api/persons/ にサーバーメソッドがあり、PersonのJSON配列を返すとします。人は次のとおりです。

public class Person {
    String firstName;
    String lastName;
}

上記のメソッドは次のように呼び出すことができます。

GsonRequest<Person[]> getPersons = 
        new GsonRequest<Person[]>("http://example.com/api/persons/", Person[].class,

            new Listener<Person[]>() {
                @Override
                public void onResponse(Person[] response) {
                    List<Person> persons = Arrays.asList(response);
                    // TODO deal with persons
                }

            }, new ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // TODO deal with error
                }
            });

VolleyQueue.get().add(getPersons);

そして最後に、応答リスナーで、リストに変換してListViewのアダプターに供給することができるPersonの配列を取得します。

40
Alexey Dmitriev

Gson プロジェクトを使用してJava and Android appで、jsonを操作できます。このリンクはサンプルリンクです。 gsonを使用する

変換方法Java Object To/From JSON(Gson)

0
Amin Bahiraei

AndroidフレームワークでネイティブのJSONParsorを使用することもできます。要件は比較的少なく、JSONsimple. ここ はチュートリアルへのリンクです。

ただし、complexJSONオブジェクトを使用している場合は、次のようなライブラリを使用してください。

  • [〜#〜] gson [〜#〜]
  • ジャクソン

[〜#〜] gson [〜#〜]の方が使いやすく、効果的だと思います。あなたはそれについてもっと知っています ここ

0
SathMK