Как я могу прочитать JSON массив данных из URL-адреса правильно - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь проанализировать json данные из URL в моем приложении, используя VOLLEY, это мой JSON:

{
  "code": 200,
  "status": "OK",
  "data": {
    "number": 1,
    "name": "سُورَةُ ٱلْفَاتِحَةِ",
    "englishName": "Al-Faatiha",
    "englishNameTranslation": "The Opening",
    "revelationType": "Meccan",
    "numberOfAyahs": 7,
    "ayahs": [
      {
        "number": 1,
        "text": "بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ",
        "numberInSurah": 1,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 2,
        "text": "الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ",
        "numberInSurah": 2,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 3,
        "text": "الرَّحْمَٰنِ الرَّحِيمِ",
        "numberInSurah": 3,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 4,
        "text": "مَالِكِ يَوْمِ الدِّينِ",
        "numberInSurah": 4,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 5,
        "text": "إِيَّاكَ نَعْبُدُ وَإِيَّاكَ نَسْتَعِينُ",
        "numberInSurah": 5,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 6,
        "text": "اهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ",
        "numberInSurah": 6,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      },
      {
        "number": 7,
        "text": "صِرَاطَ الَّذِينَ أَنْعَمْتَ عَلَيْهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِمْ وَلَا الضَّالِّينَ",
        "numberInSurah": 7,
        "juz": 1,
        "manzil": 1,
        "page": 1,
        "ruku": 1,
        "hizbQuarter": 1,
        "sajda": false
      }
    ],
    "edition": {
      "identifier": "quran-simple",
      "language": "ar",
      "name": "Simple",
      "englishName": "Simple",
      "format": "text",
      "type": "quran",
      "direction": "rtl"
    }
  }
}

Я хочу отобразить массив "ayahs", но только "текст" объект помещает их в string и отправляет их другому activity с помощью intent и отображает их в textView Помогите мне, пожалуйста

, это мой метод синтаксического анализа

public String[] parseJSON(){

    final String[] myText=new String[6];
    String url = "http://api.alquran.cloud/v1/surah/1";

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

                    try {
                        JSONObject jsonObject=response.getJSONObject("data");
                        JSONArray jsonArray=jsonObject.getJSONArray("ayahs");
                        for(int i=0;i==jsonArray.length();i++){

                            JSONObject aya=jsonArray.getJSONObject(i);
                            String text=aya.getString("text");

                            myText[i] =text;

                        }


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

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

        }
    });
    mRequestQueue.add(request);


    return myText;
}

это мой метод отправки намерений

public void onItemClick(int position) {

    //ExampleItem clickedItem = mExampleList.get(position);
    // final int sorahNumber=++position;


    Intent detailIntent = new Intent(this, DetailActivity.class);
    String[] myText = parseJSON();
    detailIntent.putExtra("text", myText);
    startActivity(detailIntent);


}

это мой ловец намерений

public class DetailActivity extends AppCompatActivity {

    private TextView sorah_tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);


        sorah_tv=findViewById(R.id.sorah_tv);

        Intent intent=getIntent();
        String[] text=intent.getStringArrayExtra("text") ;
        for(int i=0;i<text.length;i++){

            sorah_tv.setText(text[i]);
        }

помогите мне, пожалуйста

1 Ответ

0 голосов
/ 19 апреля 2020

Я думаю, что l oop неправильный вместо этого:

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

JSONObject aya=jsonArray.getJSONObject(i);
String text=aya.getString("text");

myText[i] =text;

}

Сделайте это:

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

JSONObject aya=jsonArray.getJSONObject(i);
String text=aya.getString("text");

myText[i] =text;

}

ОБНОВЛЕНИЕ:

Я думаю, что вы получаете ошибку OutOfBoundException, потому что у вас есть 7 объектов в массиве JSON, а массив myText имеет размер 6:

, поэтому вместо этого:

final String[] myText=new String[6];

сделать это:

final String[] myText=new String[7];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...