简体   繁体   English

如何正确读取 url 中的 JSON 数组数据

[英]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:我正在尝试使用 VOLLEY 将 json 数据从 url 解析到我的应用程序,这是我的 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我想显示“ayahs”数组,但只有“文本”object 将它们放在string中并使用intent将它们发送到另一个activity并在textView中显示它们 请帮帮我

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:我认为您收到错误 OutOfBoundException,因为 JSON 数组中有 7 个对象,而myText数组的大小为 6:

so instead of this:所以而不是这个:

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

do this:做这个:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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