简体   繁体   中英

how can i read JSON array data from url correctly

I'm trying to parse a json data from url to my app using VOLLEY this is my 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"
    }
  }
}

i want to display "ayahs" array but only "text" object put them in string and send them to another activity using intent and display them in textView Help me please

this is my parse method

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;
}

this my intent send method

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);


}

this is my intent catcher

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]);
        }

help me please

My guess is the loop is wrong instead of this:

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

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

myText[i] =text;

}

Do this:

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

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

myText[i] =text;

}

UPDATE:

I think you get error OutOfBoundException, because you have 7 objects in the JSON array, and myText array is of size 6:

so instead of this:

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

do this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM