Когда я использую залп в Android Studio, как получить ответ и перебрать Json?если это многомерный массив - PullRequest
0 голосов
/ 25 января 2019

Я не могу использовать JsonObjectRequest вместо StringRequest, потому что мне нужно отправить его методом POST

После анализа множества решений я разместил вопрос здесь

Мой вывод php api выглядит так

[
  {
    "username": "arun",
    "password": "kumar"
  },
  {
    "username": "arun",
    "password": "ak"
  },
  {
    "username": "arun",
    "password": "mypass"
  },
  {
    "username": "arun",
    "password": "TestPW"
  }
]

На стороне Android я использую приведенный ниже код для извлечения данных из Интернета, в методе public void onresponse () я не знаю, как получить выше ответ json, а также перебрать ответ, чтобы напечатать вседанные в ответе

String url = "http://myipaddress/index.php";

StringRequest request = new StringRequest(Request.Method.POST, url, new response.Listener<String>() {
  @Override
  public void onResponse(String response) {
    try {
      JSONObject jsonobject = new JSONObject(response);
      String output = "";
      for (int i = 0; i < jsonobject.length(); i++) {
        // print all usernames and passwords
      }

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

  }
}, new Response.ErrorListener() {
  @Override
  public void onErrorResponse(VolleyError error) {

  }
}) {
  @Override
  protected Map<String, String> getParams() throws AuthFailureError {
    Map<String, String> params = new HashMap<>();
    params.put("username", username);
    return params;
  }
};

RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(request);

1 Ответ

0 голосов
/ 25 января 2019

Вам нужно будет перебрать JSONArray и получить каждый элемент как JSONObject, а затем получить String свойства с именами "username" и "password" от каждого из них.

попробуйте это:

    String url = "http://myipaddress/index.php";

    StringRequest request = new StringRequest(Request.Method.POST, url, new response.Listener<String>() {
      @Override
      public void onResponse(String response) {
        try {
          JSONArray array = new JSONArray(response);
          for (int i = 0; i < array.length(); i++) {
            JSONObject object = array.getJSONObject(i);
            final String username = object.getString("username");
            final String password = object.getString("password");
            // print the output
            Log.d("TAG", "username=" + username + ", password=" + password);
          }
        } catch (JSONException e) {
          e.printStackTrace();
        }
      }
    }, new Response.ErrorListener() {
      @Override
      public void onErrorResponse(VolleyError error) {

      }
    }) {
      @Override
      protected Map<String, String> getParams() throws AuthFailureError {
        Map<String, String> params = new HashMap<>();
        params.put("username", username);
        return params;
      }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(request);

В идеале вместо этого следует использовать модели классов и десериализовать их непосредственно в этот класс.

public class UserLoginInfo {
  public String username;
  public String password;
}

Это сделает объект намного более простым в использовании и даст вам преимущества безопасности типов и автозаполнения.

Это ссылка от короткого Googleнайдите, как это сделать с помощью библиотеки Google gson.

ИМО использовать дооснащение .

Удачного кодирования!:)

...