قراءة و استخراج بيانات الـJSON في الـAndroid Studio

Rami Shalahمنذ 7 سنوات

السلام عليكم و رحمة الله و بركاته.

في هذه المقالة سنتعلم كيفية قراءة و استخراج بيانات الـJSON  في الـAndroid  Studio.

ملاحظة: يفضل أن تكون قد قرأت مقالتي السابقة عن كيفية تحميل بيانات الـJSON في Android Studio من هنا.

 

قبل أن نبدأ باستخراج البيانات أود أن نلقي نظرة على ماهية الـJSON المتعلق ب Flicker Api. باستخدام موقع jsonlint حيث يمكننا أن نرى التكوين الداخلي للـJSON بالاضافة الى التأكد من أن الملف هوة عبارة عن JSON.

رابط ملف الـJSON هو: https://api.flickr.com/services/feeds/photos_public.gne?format=json&nojsoncallback=1

jsonlint.thumb.png.f81f6701ac00503b4d0527db8e44c0ad.png

كما نلاحظ أعلاه، الأشياء المحاطة بـ{} هي عبارة عن object و الأشياء المحاطة بـ[] هي عبارة عن array، لذلك نستنتج بأن الـJSON هو عبارة عن objects و arrays.
في هذا الدرس سوف نقوم باستخراج الـtitle و الـtags  من الـarray التي تدعى items.

و الآن ننتقل الى التطبيق في الـ Android Studio...

 

في البداية يجب علينا عمل التالي:

  • ننشئ كلاس ونسميه photo و الذي يحتوي على متغيرات: title, tags و الذي بدوره سوف يخزن البيانات المطلوبة من الـJSON.
  • إضافة getters and setters  لهذه المتغيرات.

package org.example.rami.flickerbrowser;
import java.io.Serializable;

/**
 * Created by Rami on 5/2/2017.
 */

class Photo implements Serializable{
    private static final long serialVersionUID = 1L;
    private String mTitle;
    private String mTags;


    public Photo(String title, String tags) {
        mTitle = title;
        mTags = tags;
    }

    String getTitle() {
        return mTitle;
    }

    String getTags() {
        return mTags;
    }

    @Override
    public String toString() {
        return "Photo{" +
                "mTitle='" + mTitle + '\'' +
                ", mTags='" + mTags + '\'' +
                '}';
    }
}

 

ثم ننشئ كلاس آخر و نسميه على سبيل المثال GetFlickerJsonData و الذي بدوره سوف يحتوي على الميثود onDownloadComplete التي تقوم بقراءة و استخراج المعلومات المطلوبة من الـJSON  بالاضافة الى تخزينها في الاوبجكت من نوع Photo.
 

ملاحظة: الميثود onDownloadComplete يتم استدعاؤها من الكلاس GetRawData الموجود في الدرس السابق الذي قام بتحميل ملف الـJSON و تمرير بياناته على شكل String للميثود.

package org.example.rami.flickerbrowser;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Rami on 5/3/2017.
 */

class GetFlickerJsonData implements GetRawData.OnDownloadComplete {
    private static final String TAG = "GetFlickerJsonData";

    private List<Photo> mPhotoList = null;

    public GetFlickerJsonData() {
        Log.d(TAG, "GetFlickerJsonData called");
      	//here you do somthing additional
    }

    @Override
    public void onDownloadComplete(String data) {
            mPhotoList = new ArrayList<>();

            try {
                JSONObject jsonData = new JSONObject(data);
                JSONArray itemsArray = jsonData.getJSONArray("items");

                for(int i = 0; i < itemsArray.length(); i++){
                    JSONObject jsonPhoto = itemsArray.getJSONObject(i);
                    String title = jsonPhoto.getString("title");
                    String tags = jsonPhoto.getString("tags");

                    Photo photoObject = new Photo(title, tags);
                    mPhotoList.add(photoObject);

                    Log.d(TAG, "onDownloadComplete: " + photoObject.toString());
                }
            }catch (JSONException jsone){
                jsone.printStackTrace();
                Log.e(TAG, "onDownloadComplete: Error processing json data " + jsone.getMessage());
            }
        }
        Log.d(TAG, "onDownloadComplete ends");
}

لقد قمنا بعمل التالي: 

  • احاطة الكود بالكامل بtry و catch لمعالجة ظهور أي خطأ في ملف الـJSON.
  • اضافة متغير  mPhotoList من نوع List و الذي سوف يتم تخزين فيه الـphotos و التي تحتوي على بيانات الـJSON المستخرجة.
  • اضافة Constructor  لانشاء object من هذا الكلاس بحيث يتم اضافة أي شيء فيه على حسب تصميمك للبرنامج الكامل و طريقة عمله.
  • اضافة الـmethod و هي onDownloadComplete  و التي بدورها سوف تستخرج المعلومات المطلوبة من الـJSON المحمل كما هو موضح أعلاه.

و هذه الـmethod  تحتوي على:

  • المتغير jsonData من نوع ـJSONObject و الذي يحتوي على كامل ملف الـJSON.
  • المتغير itemsArray من نوع JSONArray  والذي يحتوي على الـarray  و التي تدعى items.

 

و الآن نقوم باضافة loop و التي بدورها تقوم بالتالي:

  • استخراج الـtitle و تخزينه بالمتغير title من نوع String.
  • استخراج الـtags و تخزينه بالمتغير tags من نوع String.
  • في النهاية نقوم بانشاء اوبجكت من نوع Photo و اضافته الى الـmPhotoList و التي تحتوي على جميع الـobjects من نوع Photo.

 

لمزيد من المعلومات عن org.json package و الكلاسات الموجودة فيهhttps://developer.android.com/reference/org/json/package-summary.html

و هنا وصلنا الى نهاية هذا الدرس.
?
أتمنى أني قد وفقت بايصال المعلومة.

كلمات دليلية:
1
إعجاب
5684
مشاهدات
0
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !