بسم الله الرحمن الرحيم
نكمل وننتهي مما قد بدأنا به في عدة دروس لبرمجة تطبيق لمدونتك أو موقعك من خلال جلب الخلاصات الخاصة بموقعك وعرضها في تطبيق اندرويد.
الدرس الأول : تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (1)
الدرس الثاني : تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (2)
الدرس الثالث : تعلم برمجة تطبيق اندرويد لمدونتك البلوجر (3)
وهذا الدرس الأخير .. سوف تصل به للنتيجة التي اخبرناكم بها سابقاً بهذا الفيديو :
ما تبقى لنا فقط الواجهة الرئيسية البرمجة وهي الاكتفتي التي سوف يتم اطلاقها مع فتح التطبيق.
وفي مشروعنا تحمل اسم MainActivity.
في البداية نقوم بتعريف الكلاس الذي قمنا بإنشائه سابقاً بإسم Parser لكي نستطيع استخدام الدوال التي فيه بداخل هذه الاكتفتي الرئيسية, بالشكل التالي :
Parser parser = new Parser();
عرفناه بإسم parser إي عند استخدام هذا المتغير اي اننا نقصد فيه الكلاس السابق.
ثم نقوم بتعريف List تحمل داخلها بينانات فقط الانواع التي حددنها في الكلاس المنشأ سابقاً بإسم Item, بالشكل التالي :
List<Item> items = new ArrayList<>();
هذه اللست سوف تكون الوسيط بين استقبال البيانات من الـ RSS بالشكل الذي حددناه حسب المتغيرات التي حددناها.
ومن ثم تعريف ArrayList اخيرة التي تقوم بأخذ البيانات من اللست السابقة واستخدامها في مشروعنا وعرضها للمستخدمين بداخل عنصر ListView. وهذه اللست سوف تكون HashMap يحمل مفتاح وقيمة لاستخدام المتغيرات التي حددناها سابقاً واستدعاء قيمها بإستخدام اسمها المحدد, بالشكل التالي :
ArrayList<HashMap<String, String>> rssItemList = new ArrayList<>();
الآن بداخل دالة الاون كريت onCreate الدالة التي سوف يتم تشغيلها بعد فتح تطبيقك, نقوم بتجهيز ExecutorService + Handler
نقوم اولاً بتعريف متغير من نوع ExecutorService للقيام بمهمة في الخلفية مرة واحدة واستخدام نتائجها في التطبيق, وتلك المهمة هي التي سوف نحددها : قراءة رابط موقعك الخلاصات RSS وجلب التاجات التي نحتاجها منه وتخزينها لدينا في مصفوفة مؤقتة وهي التي تخزن نوع كلاس item التي قمنا بإنشائها سابقاً, بالشكل التالي :
ExecutorService executor = Executors.newSingleThreadExecutor();
والان نقوم بتعريف الـ Handler ليقوم بإستقبال كل بوست او موضوع او مقال من موقعك وإضافته مباشرة للقائمة لعرضه للمستخدمين, بالشكل التالي :
Handler handler = new Handler(Looper.getMainLooper());
حتى الآن الكود الذي وصلنا له هو :
package com.andrody.bloggerproject; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MainActivity extends AppCompatActivity { Parser parser = new Parser(); List<Item> items = new ArrayList<>(); ArrayList<HashMap<String, String>> rssItemList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); } }
الآن نقوم بما عرفنا سابقاً, واختصاراً سوف اقوم بالتعليق في سطور تعليقات على الكود للتوضيح لتصبح النتيجة النهائية للاكتفتي الرئيسية :
package com.andrody.bloggerproject; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.view.View; import android.widget.AdapterView; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MainActivity extends AppCompatActivity { Parser parser = new Parser(); List<Item> items = new ArrayList<>(); ArrayList<HashMap<String, String>> rssItemList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ExecutorService executor = Executors.newSingleThreadExecutor(); Handler handler = new Handler(Looper.getMainLooper()); executor.execute(() -> { // رابط الخلاصات لموقعك String rss_url = "http://www.turkish-language.com/feeds/posts/default"; // من خلال الاستعانة بكلاس ال Parser نقوم بإرسال الرابط اليه واستخراج البيانات التي نحتاجها وتخزينها في المصفوفة المؤقتة items = parser.getRSSFeedItems(rss_url); // نقوم بحلقة فور تدور كل مرة عند عنصر من عناصر القائمة المؤقتة اي عند كل موضوع او مقال for (Item item : items) { // انشاء قائمة مؤقتة لنرتب فيها البيانات واضافتها للقائمة الاساسية التي سوف تخزن كل المقالات فيها HashMap<String, String> map = new HashMap<>(); // نعرف الاسماء التي نريد استدعاء فيها القيم وهي متغيرة حسب موقعك والتاجات الذي يحمله map.put("title", item.getTitle()); map.put("link", item.getLink()); map.put("pubDate", item.getDate()); // اضافة هذا العنصر القائمة المؤقتة للقائمة الاساسية rssItemList.add(map); } // هنا يبدأ دول الهاندلر لتجهيز الادابتر وتجهيز المعلومات وعرضها بداخل عنصر اللست فيو الذي لديك handler.post(() -> { ListAdapter adapter = new SimpleAdapter( // قمنا بإنشاء ادابتر جديد getApplicationContext(), // قمنا بتعيين الكونتكست وهو الواجهة التي نحن فيها rssItemList, R.layout.list_row, // قمنا بالإشارة إلى القائمة الاساسية + لياوت الفيو لكل عنصر بالقائمة new String[]{"link", "title", "pubDate"}, // هذه البيانات بالترتيب كما قمنا بتخزينها بالاعلى new int[]{R.id.page_url, R.id.title, R.id.pub_date}); // ربط هذه البيانات بالترتيب بالعناصر بداخل الفيو اين سوف تعرض // تحديث عنصر اللست فيو وتفعيل الادابتر الجديد عليه ListView lv = findViewById(R.id.listview); lv.setAdapter(adapter); }); }); // تعريف من جديد اللست فيو لنقوم بإعطاء اوامر الضغط على كل عنصر ListView lv = findViewById(R.id.listview); //بعد الضغط على كل عنصر من القائمة lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // انتنت جديد للانتقال إلى اكتفتي اسمها WebViewPage قمنا بإنشائها سابقاً Intent in = new Intent(getApplicationContext(), WebViewPage.class); // جلب رابط المقال وتخزينه في سترنج جديد اسمه page_url String page_url = ((TextView) view.findViewById(R.id.page_url)).getText().toString(); // خذ رابط المقال معك واذهب الى الاكتفتي لعرض صفحة الويب هناك in.putExtra("page_url", page_url); // قم بالانتقال الان startActivity(in); } }); } }
وهكذا نكون قد انتهينا من هذا المشروع البسيط .. ومستقبلاً سوف نفكر في تطويره بخصائص وشكل جذاب ونشره لكم مفتوح المصدر ..
لا تنسى متابعة الدروس السابقة وتطبيق تنفيذ هذا المشروع, مفيد جداً وسوف تحتاجه بالتأكيد سواء لعملك كمبرمج او لموقعك أو مدونتك ..
وبالتوفيق لكم جميعاً اصدقائي .. لا تنسى الاشتراك في صندوق البريد أسفل الموقع ليصلك كل جديد وحصري في موقعنا .. كما نرحب بإي اقتراحات لتطوير موقعكم اندرودي عربي.
والسلام عليكم جميعاً ~