Есть ли способ получить данные из JSON URL - PullRequest
1 голос
/ 09 апреля 2019

Я работаю на 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 время

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

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Вы должны использовать 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 голосов
/ 10 апреля 2019

Если ваш запрос возвращает опубликованный 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 вы должны пройти по этой ссылке

...