شرح JSON في الاندرويد

برنامج تعليمي لتحليل JSON مع مثال في Android Studio [خطوة بخطوة]

يرمز JSON إلى JavaScript Object Notation. إنه منظم وخفيف الوزن وقابل للقراءة ويسهل تحليله. إنه أفضل بديل لـ XML عندما يحتاج تطبيق Android الخاص بنا إلى تبادل البيانات من الخادم. تحليل XML معقد جدًا مقارنة بتحليل JSON .

JSON هي طريقة أقصر وأسرع وأسهل لتبادل البيانات من الخادم. حقق JSON نجاحًا كبيرًا ومعظم واجهة برمجة التطبيقات المتاحة تدعم تنسيق JSON.

يوفر Android لنا أربع فئات مختلفة لمعالجة بيانات JSON. هذه الفئات هي JSONObject و JSONArray و JSONStringer و JSONTokenizer.


نموذج تنسيق JSON

يوجد أدناه نموذج رمز JSON. إنه رمز JSON البسيط للغاية الذي يعطينا قائمة بالمستخدمين حيث يحتوي كل كائن على معلومات مثل معرف المستخدم والاسم والبريد الإلكتروني والجنس وأرقام الاتصال المختلفة.

 {
  "users": [
  {
  "id": "1087",
  "name": "Abhishek Saini",
  "email": "info@abhiandroid.com",
  "gender" : "male",
  "contact": {
  "mobile": "+91 0000000000",
  "home": "00 000000",
  "office": "00 000000"
  }
  },
  {
  "id": "1088",
  "name": "Gourav",
  "email": "gourav9188@gmail.com",
  "gender" : "male",
  "contact": {
  "mobile": "+91 0000000000",
  "home": "00 000000",
  "office": "00 000000"
  }
  },
  .
  .
  .
  .
  ]
  }

عناصر JSON في Android

في Android ، يتكون JSON من العديد من المكونات. أدناه نحدد بعض المكونات المشتركة.

1. Array ([):  في JSON ، القوس المربع ([) يمثل JSONArray. قد تكون قيم JSONArray أي مزيج من JSONObjects أو صفائف JSON أخرى أو سلاسل أو قيم منطقية أو صحيحة أو طويلة أو مزدوجة أو فارغة أو فارغة. قد لا تكون القيم NaNs أو ما لا نهاية أو من أي نوع غير مدرج هنا.

2. Objects ({): في JSON ، يمثل القوس المتعرج ({) كائن JSONObject. يمثل JSONObject البيانات في شكل زوج مفتاح وقيمة. قد تكون قيم JSONObject أي مزيج من عناصر JSONObjects أو JSON arrays أو سلاسل أو قيم منطقية أو صحيحة أو طويلة أو مزدوجة أو فارغة أو فارغة. قد لا تكون القيم NaNs أو ما لا نهاية أو من أي نوع غير مدرج هنا.

3. key يحتوي JSONObject على مفتاح في تنسيق سلسلة. يقوم زوج من المفاتيح والقيمة بإنشاء JSONObject.

4. Value  يحتوي كل مفتاح على قيمة يمكن أن تكون نوع بيانات بدائي (عدد صحيح ، عدد عشري ، سلسلة ، إلخ).


تحليل JSON في Android

عادةً ما تحتوي JSON على نوعين من العقد JSONArray و JSONObject ، لذلك أثناء التحليل ، يتعين علينا استخدام الطريقة المناسبة. إذا كانت JSON تبدأ من قوس مربع ([) ، فإننا نستخدم طريقة getJSONArray () وإذا كانت تبدأ من قوس متعرج ({) ، فعلينا استخدام طريقة getJSONObject (). بصرف النظر عن هذه ، هناك بعض الطرق الأخرى لتحليل بيانات JSON بشكل أفضل.


طرق تحليل JSONObjet

نحدد أدناه بعض الطرق المهمة لتحليل JSONObject والتي تستخدم بشكل أساسي لتحليل البيانات من JSONObject.

1. get (String name): تُستخدم هذه الطريقة للحصول على القيمة من JSONObject. تقوم بإرجاع قيمة نوع الكائن. نقوم بتمرير مفتاح نوع السلسلة ويعيد قيمة نوع الكائن إذا كان موجودًا وإلا فإنه يرمي JSONException.

2. getBoolean (String name ):  تُستخدم هذه الطريقة للحصول على القيمة المنطقية من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد قيمة النوع المنطقي إذا كان موجودًا وإلا فإنه يرمي JSONException.

3. getDouble ( String name):  تُستخدم هذه الطريقة للحصول على قيمة النوع المزدوج من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في نوع مزدوج إذا كان موجودًا وإلا فإنه يرمي JSONException.

4. getInt ( String name):  تُستخدم هذه الطريقة للحصول على قيمة نوع int من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في نوع int إذا كان موجودًا وإلا فإنه يرمي JSONException.

5. getJSONArray (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONArray. نقوم بتمرير مفتاح نوع السلسلة ويعيد JSONArray إذا كان موجودًا وإلا فإنه يرمي JSONException.

6. getJSONObject (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONObject. نقوم بتمرير مفتاح نوع String ويعيد قيمة JSONObject إذا كانت موجودة وإلا فإنه يرمي JSONException.

7. getLong (String name ): تُستخدم هذه الطريقة للحصول على قيمة النوع الطويل من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في النوع الطويل إذا كان موجودًا وإلا فإنه يرمي JSONException.

8. getString (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع السلسلة من JSONObject. نقوم بتمرير مفتاح نوع String ويعيد القيمة في نوع String إذا كان موجودًا وإلا فإنه يرمي JSONException.

9. length (): تُستخدم هذه الطريقة للحصول على عدد تعيينات الاسم / القيمة في هذا الكائن.

10. keys (): تستخدم هذه الطريقة للحصول على مكرر أسماء السلسلة في الكائن.

11. opt (String name): تُستخدم هذه الطريقة للحصول على القيمة من JSONObject. تقوم بإرجاع قيمة نوع الكائن. نقوم بتمرير مفتاح نوع السلسلة ويعيد قيمة نوع الكائن إذا كان موجودًا وإلا فإنه يُرجع فارغًا.

12. optBoolean (String name ): تُستخدم هذه الطريقة للحصول على القيمة المنطقية من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد قيمة النوع المنطقي إذا كان موجودًا وإلا فإنه يقوم بإرجاع القيمة false.

13. optDouble (String name): تُستخدم هذه الطريقة للحصول على قيمة النوع المزدوج من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في نوع مزدوج إذا كان موجودًا وإلا فإنه يقوم بإرجاع NaN.

14. optInt (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع int من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في نوع int إذا كان موجودًا وإلا فإنه يقوم بإرجاع القيمة 0.

15. optJSONArray (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONArray من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد JSONArray إذا كان موجودًا وإلا فإنه يُرجع فارغًا.

16. optJSONObject (String name ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONObject الأخرى من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد قيمة JSONObject إذا كان موجودًا وإلا فإنه يُرجع قيمة خالية.

17. optLong (String name ): تُستخدم هذه الطريقة للحصول على قيمة النوع الطويل من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في النوع الطويل إذا كان موجودًا وإلا فإنه يقوم بإرجاع القيمة 0.

18. optString (String name): تُستخدم هذه الطريقة للحصول على قيمة نوع String من JSONObject. نقوم بتمرير مفتاح نوع السلسلة ويعيد القيمة في نوع السلسلة إذا كان موجودًا وإلا فإنه يقوم بإرجاع السلسلة فارغة ("").


طرق تحليل JSONArray 

نحدد أدناه بعض الطرق المهمة لتحليل JSONArray والتي تستخدم بشكل أساسي لتحليل البيانات من JSONArray.

1. get (int index): تستخدم هذه الطريقة للحصول على القيمة من JSONArray. تقوم بإرجاع قيمة نوع الكائن. نقوم بتمرير الفهرس وإرجاع قيمة نوع الكائن إذا كان موجودًا وإلا فإنه يرمي JSONException.

2. getBoolean ( int index): تُستخدم هذه الطريقة للحصول على القيمة المنطقية من JSONArray. نقوم بتمرير الفهرس وإرجاع قيمة النوع المنطقي إذا كان موجودًا وإلا فإنه يرمي JSONException.

3. getDouble (int index ): تُستخدم هذه الطريقة للحصول على قيمة النوع المزدوج من JSONArray. نقوم بتمرير الفهرس ويعيد القيمة في نوع مزدوج إذا كان موجودًا وإلا فإنه يرمي JSONException.

4. getInt ( int index): تُستخدم هذه الطريقة للحصول على قيمة نوع int من JSONArray. نقوم بتمرير الفهرس ويعيد القيمة في نوع int إذا كان موجودًا وإلا فإنه يرمي JSONException.

5. getJSONArray (int index ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONArray. نقوم بتمرير الفهرس وإرجاع JSONArray إذا كان موجودًا وإلا فإنه يرمي JSONException.

6. getJSONObject (int index ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONObject. نقوم بتمرير الفهرس وإرجاع قيمة JSONObject إذا كانت موجودة وإلا فإنها ترمي JSONException.

7. getLong ( int index): تُستخدم هذه الطريقة للحصول على قيمة النوع الطويل من JSONArray. نقوم بتمرير الفهرس وإرجاع القيمة في نوع طويل إذا كان موجودًا وإلا فإنه يرمي JSONException.

8. getString (int index ): تستخدم هذه الطريقة للحصول على قيمة نوع السلسلة من JSONArray. نقوم بتمرير الفهرس وإرجاع القيمة في نوع String إذا كان موجودًا وإلا فإنه يرمي JSONException.

9. length (): تستخدم هذه الطريقة للحصول على عدد القيم في هذه المصفوفة.

10. opt (int index): تُستخدم هذه الطريقة للحصول على القيمة من JSONArray. تقوم بإرجاع قيمة نوع الكائن. نقوم بتمرير الفهرس وإرجاع القيمة في فهرس نوع الكائن إذا كان موجودًا وإلا فإنه يُرجع القيمة فارغة.

11. optBoolean (int index ): تُستخدم هذه الطريقة للحصول على القيمة المنطقية من JSONArray. نقوم بتمرير الفهرس وإرجاع قيمة النوع المنطقي إذا كان موجودًا وإلا فإنه يُرجع القيمة false.

12. optDouble (int index ): تُستخدم هذه الطريقة للحصول على قيمة النوع المزدوج من JSONArray. نقوم بتمرير الفهرس ويعيد القيمة في نوع مزدوج إذا كان موجودًا وإلا فإنه يُرجع NaN.

13. optInt (int index ): تُستخدم هذه الطريقة للحصول على قيمة نوع int من JSONArray. نقوم بتمرير الفهرس ويعيد القيمة في نوع int إذا كان موجودًا وإلا فإنه يُرجع 0.

14. optJSONArray ( int index): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONArray الأخرى من JSONArray. نقوم بتمرير الفهرس وإرجاع JSONArray إذا كان موجودًا وإلا فإنه يُرجع فارغًا.

15. optJSONObject (int index ): تُستخدم هذه الطريقة للحصول على قيمة نوع JSONObject من JSONArray. نقوم بتمرير الفهرس وإرجاع قيمة JSONObject إذا كانت موجودة ، وإلا فإنها ترجع قيمة خالية.

16. optLong (int index ): تُستخدم هذه الطريقة للحصول على قيمة النوع الطويل من JSONArray. نمرر الفهرس ويعيد القيمة في نوع طويل إذا كان موجودًا وإلا فإنه يُرجع 0.

17. optString ( int index): تُستخدم هذه الطريقة للحصول على قيمة نوع String من JSONArray. نقوم بتمرير الفهرس وإرجاع القيمة في نوع String إذا كان موجودًا وإلا فإنه يُرجع سلسلة فارغة ("").


مثال 1  لتحليل JSON البسيط في Android Studio

فيما يلي مثال لتحليل JSON في Android ، في هذا المثال نقوم بتحليل البيانات من JSON ثم نعرضها في واجهة المستخدم. في هذا ، لدينا اسم الموظف والراتب مخزنين بتنسيق JSON. أولاً ، نقوم بإنشاء ملفين TextView في ملف XML الخاص بنا ، ثم في نشاطنا نقوم بتحليل البيانات باستخدام أساليب JSONObject وتعيينها في TextView .

يمكنك أدناه تنزيل الكود ، والاطلاع على الإخراج النهائي والشرح خطوة بخطوة للمثال:

كود التحميل

مثال تحليل JSON في Android Studio

الخطوة 1:  قم بإنشاء مشروع جديد وقم بتسميته JSONParsingExample.

الخطوة 2: افتح res -> layout -> activity_main.xml (أو) main.xml وأضف الكود التالي:

في هذه الخطوة ، نقوم بإنشاء ملفي TextView لعرض اسم الموظف والراتب.

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="abhiandroid.com.jsonparsingexample.MainActivity">

  <TextView
  android:id="@+id/name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerHorizontal="true"
  android:layout_marginTop="50dp"
  android:text="Name"
  android:textColor="#000"
  android:textSize="20sp" />

  <TextView
  android:id="@+id/salary"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_centerHorizontal="true"
  android:layout_marginTop="80dp"
  android:text="Salary"
  android:textColor="#000"
  android:textSize="20sp" />
  </RelativeLayout>

الخطوة 3: الآن افتح التطبيق -> java -> package -> MainActivity. جافا وإضافة الكود أدناه.

في هذه الخطوة ، نحصل أولاً على مرجع كل من TextView ثم نقوم بتحليل JSON باستخدام طرق JSONObject وأخيراً قمنا بتعيين البيانات في Textview's.

package abhiandroid.com.jsonparsingexample;

  import android.os.Bundle;
  import android.support.v7.app.AppCompatActivity;
  import android.widget.TextView;

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

  public class MainActivity extends AppCompatActivity {


  String JSON_STRING = "{\"employee\":{\"name\":\"Abhishek Saini\",\"salary\":65000}}";
  String name, salary;
  TextView employeeName, employeeSalary;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // get the reference of TextView's
  employeeName = (TextView) findViewById(R.id.name);
  employeeSalary = (TextView) findViewById(R.id.salary);

  try {
  // get JSONObject from JSON file
  JSONObject obj = new JSONObject(JSON_STRING);
  // fetch JSONObject named employee
  JSONObject employee = obj.getJSONObject("employee");
  // get employee name and salary
  name = employee.getString("name");
  salary = employee.getString("salary");
  // set employee name and salary in TextView's
  employeeName.setText("Name: "+name);
  employeeSalary.setText("Salary: "+salary);

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

تحليل ملف JSON مثال 2 في Android Studio

يوجد أدناه المثال الثاني لتحليل JSON في Android Studio . في هذا المثال ، نقوم بإنشاء ملف JSON وتخزينه في مجلد أصول Android. في ملف JSON هذا ، لدينا قائمة بالمستخدمين حيث يحتوي كل كائن على معلومات مثل معرف المستخدم والاسم والبريد الإلكتروني والجنس وأرقام الاتصال المختلفة. في هذا نحن نستخدم LinearLayoutManager مع الاتجاه الرأسي لعرض عناصر المصفوفة. أولاً ، نعلن عن RecyclerView في ملف XML الخاص بنا ثم نحصل على مرجع له في نشاطنا. بعد ذلك نحضر ملف JSON ثم نحلل بيانات JSONArray ونقوم في النهاية بتعيين المحول لإظهار العناصر في RecyclerView . عندما ينقر المستخدم على عنصر ما ، يتم عرض اسم الشخص على الشاشة بمساعدة Toast .

كود التحميل

مثال على تحليل ملف JSON في Android Studio

الخطوة 1: قم بإنشاء مشروع جديد وقم بتسميته JSONParsingExample.

الخطوة 2: توسيع Gradle > build.gradle وإضافة مكتبة RecyclerView و CardView مكتبة الاعتماد في ذلك.

apply plugin: 'com.android.application'

  android {
  compileSdkVersion 24
  buildToolsVersion "24.0.1"

  defaultConfig {
  applicationId "abhiandroid.com.jsonparsingexample"
  minSdkVersion 16
  targetSdkVersion 24
  versionCode 1
  versionName "1.0"
  }
  buildTypes {
  release {
  minifyEnabled false
  proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  }
  }
  }

  dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  testCompile 'junit:junit:4.12'
  compile 'com.android.support:appcompat-v7:24.1.1'
  compile "com.android.support:recyclerview-v7:23.0.1" // dependency file for RecyclerView
  compile 'com.android.support:cardview-v7:23.0.1' // dependency file for CardView
  }

الخطوة 3: افتح res -> layout -> activity_main.xml (أو) main.xml وأضف الكود التالي:

في هذه الخطوة ، نقوم بإنشاء RecyclerView في ملف XML الخاص بنا.

<?xml version="1.0" encoding="utf-8"?>
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  tools:context="abhiandroid.com.jsonparsingexample.MainActivity">

  <android.support.v7.widget.RecyclerView
  android:id="@+id/recyclerView"
  android:layout_width="match_parent"
  android:layout_height="match_parent" />
  </RelativeLayout>

الخطوة 4: قم بإنشاء ملف XML جديد rowlayout.xml لعنصر RecyclerView والصق الكود التالي فيه.

في هذه الخطوة ، نقوم بإنشاء ملف xml جديد لصف العناصر حيث نقوم بإنشاء TextView لإظهار البيانات.

 <?xml version="1.0" encoding="utf-8"?>

  <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:card_view="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:id="@+id/card_view"
  android:layout_width="match_parent"
  android:layout_margin="5dp"
  android:layout_height="wrap_content">

  <LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="vertical"
  android:padding="10dp">
  <!--
  items for a single row of RecyclerView
  -->
  <TextView
  android:id="@+id/name"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="Name"
  android:textColor="#000"
  android:textSize="20sp" />

  <TextView
  android:id="@+id/email"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="email@email.com"
  android:textColor="#000"
  android:textSize="15sp" />

  <TextView
  android:id="@+id/mobileNo"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="e9999999999"
  android:textColor="#000"
  android:textSize="15sp" />
  </LinearLayout>
  </android.support.v7.widget.CardView>

الخطوة 5: الآن افتح التطبيق -> جافا -> الحزمة -> MainActivity.java وأضف الكود أدناه.

في هذه الخطوة أولاً نحصل على مرجع RecyclerView. بعد ذلك ، نحضر ملف JSON من الأصول ونحلل بيانات JSON باستخدام أساليب JSONArray و JSONObject ثم نضبط LayoutManager وأخيرًا قمنا بتعيين المحول لإظهار العناصر في RecyclerView.

package abhiandroid.com.jsonparsingexample;

  import android.os.Bundle;
  import android.support.v7.app.AppCompatActivity;
  import android.support.v7.widget.LinearLayoutManager;
  import android.support.v7.widget.RecyclerView;
  import android.util.Log;

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

  import java.io.IOException;
  import java.io.InputStream;
  import java.util.ArrayList;
  import java.util.Arrays;

  public class MainActivity extends AppCompatActivity {

  // ArrayList for person names, email Id's and mobile numbers
  ArrayList<String> personNames = new ArrayList<>();
  ArrayList<String> emailIds = new ArrayList<>();
  ArrayList<String> mobileNumbers = new ArrayList<>();

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  // get the reference of RecyclerView
  RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
  // set a LinearLayoutManager with default vertical orientation
  LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext());
  recyclerView.setLayoutManager(linearLayoutManager);

  try {
  // get JSONObject from JSON file
  JSONObject obj = new JSONObject(loadJSONFromAsset());
  // fetch JSONArray named users
  JSONArray userArray = obj.getJSONArray("users");
  // implement for loop for getting users list data
  for (int i = 0; i < userArray.length(); i++) {
  // create a JSONObject for fetching single user data
  JSONObject userDetail = userArray.getJSONObject(i);
  // fetch email and name and store it in arraylist
  personNames.add(userDetail.getString("name"));
  emailIds.add(userDetail.getString("email"));
  // create a object for getting contact data from JSONObject
  JSONObject contact = userDetail.getJSONObject("contact");
  // fetch mobile number and store it in arraylist
  mobileNumbers.add(contact.getString("mobile"));
  }
  } catch (JSONException e) {
  e.printStackTrace();
  }

  //  call the constructor of CustomAdapter to send the reference and data to Adapter
  CustomAdapter customAdapter = new CustomAdapter(MainActivity.this, personNames, emailIds, mobileNumbers);
  recyclerView.setAdapter(customAdapter); // set the Adapter to RecyclerView
  }

  public String loadJSONFromAsset() {
  String json = null;
  try {
  InputStream is = getAssets().open("users_list.json");
  int size = is.available();
  byte[] buffer = new byte[size];
  is.read(buffer);
  is.close();
  json = new String(buffer, "UTF-8");
  } catch (IOException ex) {
  ex.printStackTrace();
  return null;
  }
  return json;
  }
  }

الخطوة 6: إنشاء فئة جديدة CustomAdapter.java داخل الحزمة وإضافة التعليمات البرمجية التالية.

في هذه الخطوة ، نقوم بإنشاء فئة CustomAdapter وتوسيع RecyclerView. فئة المحول Adapter  مع ViewHolder بداخله. بعد ذلك نقوم بتنفيذ الطرق التي تم تجاوزها وإنشاء مُنشئ للحصول على البيانات من النشاط ، في هذا المحول المخصص طريقتان أكثر أهمية أولاً هما onCreateViewHolder حيث نقوم بتضخيم عنصر التخطيط xml وتمريره إلى View Holder والآخر onBindViewHolder فيه نقوم بتعيين البيانات في طريقة العرض بمساعدة ViewHolder.

package abhiandroid.com.jsonparsingexample;

  import android.content.Context;
  import android.support.v7.widget.RecyclerView;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.widget.TextView;
  import android.widget.Toast;

  import java.util.ArrayList;


  public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

  ArrayList<String> personNames;
  ArrayList<String> emailIds;
  ArrayList<String> mobileNumbers;
  Context context;

  public CustomAdapter(Context context, ArrayList<String> personNames, ArrayList<String> emailIds, ArrayList<String> mobileNumbers) {
  this.context = context;
  this.personNames = personNames;
  this.emailIds = emailIds;
  this.mobileNumbers = mobileNumbers;
  }

  @Override
  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  // infalte the item Layout
  View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
  MyViewHolder vh = new MyViewHolder(v); // pass the view to View Holder
  return vh;
  }

  @Override
  public void onBindViewHolder(MyViewHolder holder, final int position) {
  // set the data in items
  holder.name.setText(personNames.get(position));
  holder.email.setText(emailIds.get(position));
  holder.mobileNo.setText(mobileNumbers.get(position));
  // implement setOnClickListener event on item view.
  holder.itemView.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View view) {
  // display a toast with person name on item click
  Toast.makeText(context, personNames.get(position), Toast.LENGTH_SHORT).show();
  }
  });

  }


  @Override
  public int getItemCount() {
  return personNames.size();
  }

  public class MyViewHolder extends RecyclerView.ViewHolder {
  TextView name, email, mobileNo;// init the item view's

  public MyViewHolder(View itemView) {
  super(itemView);

  // get the reference of item view's
  name = (TextView) itemView.findViewById(R.id.name);
  email = (TextView) itemView.findViewById(R.id.email);
  mobileNo = (TextView) itemView.findViewById(R.id.mobileNo);

  }
  }
  }