Есть ли способ получить данные из JSON URL

1

Я работаю на Android, и я пытаюсь проанализировать данные JSON из URL, чтобы получить строку из массива.

Я пытался использовать volley но я не получил ожидаемый результат.

{
code: 200,
status: "OK",
data: [
{
timings: {
Fajr: "04:13 (+04)",
Sunrise: "05:36 (+04)",
Dhuhr: "12:14 (+04)",
Asr: "15:42 (+04)",
Sunset: "18:51 (+04)",
Maghrib: "18:51 (+04)",
Isha: "20:15 (+04)",
Imsak: "04:03 (+04)",
Midnight: "00:14 (+04)"
},

StringRequest stringRequest = new StringRequest(Request.Method.GET,
                URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {

                        progressBar.setVisibility(View.GONE);

                        try {
                            //JSONObject jsonObject = new JSONObject(response);
                            JSONArray jsonArray = new JSONArray(response);

                            for(int i=0; i<jsonArray.length(); i++){

                                JSONObject o = jsonArray.getJSONObject(i);
                                ModelActivity modelActivity = new ModelActivity(
                                        o.getString("Fajr")
                                        o.getString("Dhuhr"),
                                        o.getString("Asr"),
                                        o.getString("Maghrib"),
                                        o.getString("Isha")
                                );
                                modelActivityList.add(modelActivity);
                            }

Я хочу fajr dhuhr asr magrhrib isha тайминги

любая помощь будет оценена

Теги:
android-volley

2 ответа

0

Вы должны использовать JsonObjectRequest вместо StringRequest. Вот пример:

    public void getRate(String tripDate) {

    Rate = 0.54;

    String url = "https://myserver/api/rates/" + tripDate;

    JsonObjectRequest postRequest = new JsonObjectRequest(Request.Method.GET,url,null,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {

            try {

                // since response is a JSONObject use getJSONArray to
                // get the JSONArray out of the JSONObject
                JSONArray rates = response.getJSONArray("rates");

            } catch (Exception e) {
                e.printStackTrace();
                Rate = 0.54;

                Log.i("Test", "Default Rate:" + Rate);

            }

        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e("Test", "Response Error: " + error.getLocalizedMessage());
            Rate = 0.54;

            Log.i("Test", "Default Rate:" + Rate);


        }
    }) {


   @Override
   public Map<String, String> getHeaders() throws AuthFailureError {
       HashMap<String, String> headers = new HashMap<String, String>();
        String authValue = "Bearer ";
        headers.put("Authorization", authValue);
        headers.put("Accept", "application/json; charset=utf-8");
        headers.put("Content-Type", "application/json; charset=utf-8");
       return headers;
   }


};


MyApplication.getInstance().addToRequestQueue(postRequest);

}

Если ваш API возвращает JSONArray, то вместо этого вы можете использовать JSONArrayRequest...

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                    Request.Method.GET,
                    mJSONURLString,
                    null,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
0

Если ваш запрос возвращает опубликованный JSON, то проблема заключается не в библиотеке volley которая выполняет запрос, а в том, как вы пытаетесь его проанализировать.

В представлении JSON {} означает, что у вас есть объект. И [] что существует массив.

Таким образом, вы должны проверить в первом объекте json для элемента данных, а затем в этом массиве для каждого объекта искать время, а затем элементы.

Хотя я не скомпилировал и не запустил код, синтаксический анализ должен выглядеть примерно так:

JSONObject jsonObject = new JSONObject(response);
JSONArray data = jsonObject.getJSONObject("data");
for(int j=0; j<data.length(); j++){
    JSONObject jObj = data.getJSONObject(j);
    JSONArray jsonArrayTimings = new JSONArray(jObj.getJSONObject("timings"));

    for(int i=0; i<jsonArray.length(); i++){

        JSONObject o = jsonArray.getJSONObject(i);
        ModelActivity modelActivity = new ModelActivity(
                o.getString("Fajr")
                o.getString("Dhuhr"),
                o.getString("Asr"),
                o.getString("Maghrib"),
                o.getString("Isha")
        );
        modelActivityList.add(modelActivity);
    }
}

Для получения дополнительной информации о синтаксическом анализе JSON вы должны пройти по этой ссылке

  • 0
    JSONArray jsonArrayTimings = new JSONArray (jObj.getJSONObject ("timings")); эта строка выдает ошибку Call требует API уровня 19 (текущий минимум 15): new org.json.JSONArray
  • 0
    Я предполагаю, что будет какой-то эквивалент для более старых версий ... лично я всегда использую gson library как мои объекты json предопределены, а синтаксический анализ gson library меньше кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню