java - 如何正确从 url 读取 JSON 数组数据

标签 java android json parsing android-volley

我正在尝试使用 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"
    }
  }
}

我想显示“ayahs”数组,但只显示“text”对象 将它们放入 string 中,并使用 intent 将它们发送到另一个 activity 并在 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;
}

这是我的 Intent 发送方法

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


}

这是我的 Intent 捕捉器

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

请帮帮我

最佳答案

我的猜测是循环是错误的而不是这个:

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,因为 JSON 数组中有 7 个对象,而 myText 数组的大小为 6:

所以代替这个:

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

这样做:

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

关于java - 如何正确从 url 读取 JSON 数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61308767/

相关文章:

java - 获取父框架的requestURL

java.io.StreamCorruptedException : invalid stream header: 00000000

java - AsyncTask和Application的生命周期?

java - 如何创建具有原始数据的java POJO类/Json字符串的映射?

c# - Newtonsoft JSON 反序列化问题 [将值转换为类型时出错]

java - Minecraft Bukkit Java 执行命令时出错

android - 无法在额外属性扩展上获取属性 'compileSdkVersion',因为它不存在

android - HTML 代码 index.html 设计不适合 Phonegap android 应用程序的移动 View ?

javascript - 使用 ngFor 时的 Angular 4 样式背景图像

java - HTML 中的 Jar 小程序