منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أحمد مناع السبت يونيو 29, 2013 12:17 pm

 بسم الله الرحمن الرحيم

اهلا وسهلا بكم أخوانى الكرام ....منذ فترة سأل الزميل reno.vinoos عن كيفية فتح صفحة ويب من الجوال وقد قامت الاخت زهراء مشكورة برفع مثال مفتوح المصدر على المنتدى ...لكن ربما يكون المثال قد أحتوى على كثر من الاكواد و الشفرات التى قد يصعب علينا فهمها ....حاولت بقدر الامكان أن اشرح طريقة الاتصال بالويب على الرابط التالى  لكن الشرح كان يخلوا من كيفية دعم ملفات html ....اليوم ان شاء الله تعالى سنتعلم سويا كيفية فتح موقع بتنسيق html وذلك من خلال المكتبة lwuit و ذلك على النحو التالى :

1_ قم بإنشاء مشروع جديد مع إزالة الخيار Create Hello MIDlet

2_ قم بتحميل المكتبة lwuit من المرفقات ووضعها فى مجلد المشروع ثم قم بادراج المكتبة الى المشروع و ذلك عن طريق تحديد ايقونة Resources فى القائمة الجانبية للمشروع ومن القائمة التى ستظهر أختر الامر Add jar سيتم فتح لك مربع حوارى للتنقل بين الملفات على جهازك أختر منها أختر المكتبة lwuit ثم ok لتجد المكتبة قد اضيفتت للمشروعك .

3_ نقوم بإنشاء فئة MIDlet وذلك من خلال تحديد ايقونة التطبيق ثم كليك يمين ومن القائمة التى ستظهر أختر الامر New ثم الامر MIDlet


سيظهر لك مربع حوارى يطالبك ببعض المعلومات كأسم الملف MIDlet و اسم الكلاس الخاص ب MIDlet ويمكنك تغير البيانات الافتراضية أو تركها كما هى إن شئت ثم قم بالنقر على زر الامر (finsh ) ليتم فتح صفحة كتابة الشفرة كما فى الصور التالية :

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Www.0zz0خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  156446931

4_ نقوم بإستيراد المكتبات التالية :

أ_ استيراد الكائنات التابعة للمكتبة lwuit

الكود:
import com.sun.lwuit.Display;
import com.sun.lwuit.html.DocumentInfo;
import com.sun.lwuit.html.DocumentRequestHandler;
import com.sun.lwuit.html.HTMLComponent;
import com.sun.lwuit.layouts.GridLayout;
import com.sun.lwuit.Form;

ويمكن ملاحظة أن تلك المكتبة ليس فقط لدعم ملفات html بل يمكنك استخدامها لانشاء نافذة وقوائم ....الخ وسيتم شرح المكتبة فى درس أخر ان شاء الله تعالى :

ب_ استيراد الكائنات التابعة للمكتبة java.IO

الكود:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

ج _ استيراد الكائنات التابعة للمكتبة microedition.io

الكود:
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;


5_ لكى نستطيع قراءة ملفات HTML من أي مصدر محلي أو بعيد من خلال المكتبة lwuit يجب تنفيذ واجهة DocumentRequestHandler لذلك سنقوم بانشاء فئة وليكن بأسم HttpRequestHandler تتضمن تلك الوجهة وذلك باستخدام الكود التالى :

الكود:
class HttpRequestHandler implements DocumentRequestHandler {

ويجب ملاحظة أن برنامجنا يحتوى على عدة فئات مجتمعة فى ملف واحد و بالتالى فإن الفئة الرئسية التى تحتوى على الدالة main تبدأ بمحدد الوصول public class أى أن الفئة عامه ...وتبدأ جميع الفئات الاخرى بالكلمة المحجوزة class فقط كما هو ظاهر أعلاه

وايضا للإعلان عن الفئة التي تطبق واجهة كما فى مثالنا الحالى يجب تتضمين شرط تنفذ في تعريف فئة أى استخدام الامر implements كما هو ظاهر اعلاه

6_بداخل الفئة السابقة HttpRequestHandler سنقوم بأنشاء طريقة وليكن بأسم getDomainForLinks لها المعامل (URL)والهدف من ذلك الطريقة هو التأكد من صلاحية الرابط المدخل و الحاق بروتوكل الانترنت https أو http للرابط اذ لم يقم المستخدم بادخالة و ذلك على النحو التالى :


الكود:
static String getDomainForLinks(String url) {
      
String domain = null;
              
 if (url.startsWith("file:")) {
            return "localhost"; // Just a common name to store local files under
        }
 int index = -1;
        if (url.startsWith("http://")) {
            index = 7;
        } else if (url.startsWith("https://")) {
            index = 8;
        }
        if (index != -1) {
            domain = url.substring(index);
            index = domain.indexOf('/');
            if (index != -1) {
                domain = domain.substring(0, index);
            }
        }
        return domain;
    }

7_ بداخل تلك الفئة ايضا سنقوم بتنفيذ واجهة DocumentRequestHandler وذلك من خلال الاسلوب التالى:


الكود:
public InputStream resourceRequested(DocumentInfo docInfo) {


8_ بداخل الواجهة السابقة سنقوم بكتابة الكود التالى :


الكود:
InputStream is = null;
        String url = docInfo.getUrl();
        String linkDomain = getDomainForLinks(url);
        String params = docInfo.getParams();
        if ((!docInfo.isPostRequest()) && (params != null) && (!params.equals(""))) {
            url = url + "?" + params;
        }

        try {
            HttpConnection hc = (HttpConnection) Connector.open(url);
            String encoding = null;
            if (docInfo.isPostRequest()) {
                encoding = "application/x-www-form-urlencoded";
            }
            if (!docInfo.getEncoding().equals(DocumentInfo.ENCODING_ISO)) {
                encoding = docInfo.getEncoding();
            }
            String domain = linkDomain;
            domain = domain.substring(domain.indexOf('.'));

            if (encoding != null) {
                hc.setRequestProperty("Content-Type", encoding);
            }

            if (docInfo.isPostRequest()) {
                hc.setRequestMethod(HttpConnection.POST);
                byte[] paramBuf = params.getBytes();
                hc.setRequestProperty("Content-Length", "" + paramBuf.length);
                OutputStream os = hc.openOutputStream();
                os.write(paramBuf);
                os.close();
            }

            String contentTypeStr = hc.getHeaderField("content-type");
            if (contentTypeStr != null) {
                contentTypeStr = contentTypeStr.toLowerCase();

                if (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_HTML) { //We perform these checks only for text (i.e.
main page), for images/css we just send what the server sends and "hope
for the best"
                    if (contentTypeStr != null) {
  
                      if ((contentTypeStr.startsWith("text/")) ||
(contentTypeStr.startsWith("application/xhtml")) ||
(contentTypeStr.startsWith("application/vnd.wap"))) {
                            docInfo.setExpectedContentType(DocumentInfo.TYPE_HTML);
                        } else if (contentTypeStr.startsWith("image/")) {
                            docInfo.setExpectedContentType(DocumentInfo.TYPE_IMAGE);
                            hc.close();
                        } else {
                            hc.close();
                        }
                    }
                }

                if ((docInfo.getExpectedContentType() == DocumentInfo.TYPE_HTML) ||

                        (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_CSS)) { // Charset is relevant for HTML and CSS only
                    int charsetIndex = contentTypeStr.indexOf("charset=");
                    if (charsetIndex != -1) {
                        String charset = contentTypeStr.substring(charsetIndex + 8);
                        docInfo.setEncoding(charset.trim());
                    }
                }
            }
            int response = hc.getResponseCode();
            if (response / 100 == 3) { // 30x code is redirect
                String newURL = hc.getHeaderField("Location");
                if (newURL != null) {
                    hc.close();
                    docInfo.setUrl(newURL);
                    return resourceRequested(docInfo);
                }
            }
            is = hc.openInputStream();

        } catch (IOException e) {
            System.out.println("HttpRequestHandler->IOException: " + e.getMessage());
        } catch (IllegalArgumentException e) { // For malformed URL
            System.out.println("HttpRequestHandler->IllegalArgumentException: " + e.getMessage());
        }
        return is;
    }


نستخدم الكود السابق للحصول على InputStream من الوثيقة المحدد من خلال رابط الموقع...وهى الملفات HTML ...حيث يتم تخزين المعلومات الوثيقة المطلوبة في كائن DocumentInfo، والتي يتم ملؤها تلقائيا باستخدام HTMLComponent. القيم DocumentInfo يمكن استخدامها لتحديد مسار المستند أو اسم الملف ....الخ

ولمعرفة كيفية قراءة الملفات من خلال المكتبة JAVA.IO يمكنك زيارة الدرس الموجود على الرابط هذا

9_ داخل الطريقة void startApp نقطة البداية للتطبيق نقوم بكتابة الكود التالى :


الكود:
public void startApp() {
        Display.init(this);
        HttpRequestHandler handler = new HttpRequestHandler();
        HTMLComponent htmlC = new HTMLComponent(handler);
        htmlC.setPage("http://google.com");

        Form form = new Form("MyTitle");
        form.setLayout(new GridLayout(1, 1));
        form.addComponent(htmlC);
        form.show();
    }

_ فى السطر الثانى من الكود قمنا باستخدام الكائن Display و الذى يقوم بتهئة المورد MIDlet فى بداية التطبيق

_ السطر الثالث اشتقاق كائن جديد من HttpRequestHandler ....وايضا السطر الرابع الاعلان عن الكائن HTMLComponent و اشتقاق كائن جديد منه مع تمرير الكائن المشتق من HttpRequestHandler الية ....السطر الخامس أستخدمنا الطريقة setPage التابعة للكائن HTMLComponent و التى تقبل نص تحتوي على URL الخاص الموقع المراد فتحة ...

السطر السادس قمنا بإنشاء نافذة باستخدام المكتبة lwuit.Form وذلك الاحتواء صفحة HTML باستخدام الطريقة addComponent


و اليكم الكود بالكامل لفتح صفحة ويب للجولات :


الكود:
import javax.microedition.midlet.*;
import com.sun.lwuit.Display;
import com.sun.lwuit.html.DocumentInfo;
import com.sun.lwuit.html.DocumentRequestHandler;
import com.sun.lwuit.html.HTMLComponent;
import com.sun.lwuit.layouts.GridLayout;
import com.sun.lwuit.Form;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;


 class HttpRequestHandler implements DocumentRequestHandler {

    static String getDomainForLinks(String url) {
        String domain = null;
        if (url.startsWith("file:")) {
            return "localhost"; // Just a common name to store local files under
        }
        int index = -1;
        if (url.startsWith("http://")) {
            index = 7;
        } else if (url.startsWith("https://")) {
            index = 8;
        }
        if (index != -1) {
            domain = url.substring(index);
            index = domain.indexOf('/');
            if (index != -1) {
                domain = domain.substring(0, index);
            }
        }
        return domain;
    }

    public InputStream resourceRequested(DocumentInfo docInfo) {
        InputStream is = null;
        String url = docInfo.getUrl();
        String linkDomain = getDomainForLinks(url);
        String params = docInfo.getParams();
        if ((!docInfo.isPostRequest()) && (params != null) && (!params.equals(""))) {
            url = url + "?" + params;
        }

        try {
            HttpConnection hc = (HttpConnection) Connector.open(url);
            String encoding = null;
            if (docInfo.isPostRequest()) {
                encoding = "application/x-www-form-urlencoded";
            }
            if (!docInfo.getEncoding().equals(DocumentInfo.ENCODING_ISO)) {
                encoding = docInfo.getEncoding();
            }
            String domain = linkDomain;
            domain = domain.substring(domain.indexOf('.'));

            if (encoding != null) {
                hc.setRequestProperty("Content-Type", encoding);
            }

            if (docInfo.isPostRequest()) {
                hc.setRequestMethod(HttpConnection.POST);
                byte[] paramBuf = params.getBytes();
                hc.setRequestProperty("Content-Length", "" + paramBuf.length);
                OutputStream os = hc.openOutputStream();
                os.write(paramBuf);
                os.close();
            }

            String contentTypeStr = hc.getHeaderField("content-type");
            if (contentTypeStr != null) {
                contentTypeStr = contentTypeStr.toLowerCase();

                if (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_HTML) { //We perform these checks only for text (i.e.
main page), for images/css we just send what the server sends and "hope
for the best"
                    if (contentTypeStr != null) {
  
                      if ((contentTypeStr.startsWith("text/")) ||
(contentTypeStr.startsWith("application/xhtml")) ||
(contentTypeStr.startsWith("application/vnd.wap"))) {
                            docInfo.setExpectedContentType(DocumentInfo.TYPE_HTML);
                        } else if (contentTypeStr.startsWith("image/")) {
                            docInfo.setExpectedContentType(DocumentInfo.TYPE_IMAGE);
                            hc.close();
                        } else {
                            hc.close();
                        }
                    }
                }

                if ((docInfo.getExpectedContentType() == DocumentInfo.TYPE_HTML) ||

                        (docInfo.getExpectedContentType() ==
DocumentInfo.TYPE_CSS)) { // Charset is relevant for HTML and CSS only
                    int charsetIndex = contentTypeStr.indexOf("charset=");
                    if (charsetIndex != -1) {
                        String charset = contentTypeStr.substring(charsetIndex + 8);
                        docInfo.setEncoding(charset.trim());
                    }
                }
            }
            int response = hc.getResponseCode();
            if (response / 100 == 3) { // 30x code is redirect
                String newURL = hc.getHeaderField("Location");
                if (newURL != null) {
                    hc.close();
                    docInfo.setUrl(newURL);
                    return resourceRequested(docInfo);
                }
            }
            is = hc.openInputStream();

        } catch (IOException e) {
            System.out.println("HttpRequestHandler->IOException: " + e.getMessage());
        } catch (IllegalArgumentException e) { // For malformed URL
            System.out.println("HttpRequestHandler->IllegalArgumentException: " + e.getMessage());
        }
        return is;
    }
}

public class web extends MIDlet {

    public void startApp() {
        Display.init(this);
        HttpRequestHandler handler = new HttpRequestHandler();
        HTMLComponent htmlC = new HTMLComponent(handler);
        htmlC.setPage("http://google.com");

        Form form = new Form("MyTitle");
        form.setLayout(new GridLayout(1, 1));
        form.addComponent(htmlC);
        form.show();
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
}



و النتيجة كما فى الصور التالية

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  969774946

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  395836682

وفى النهاية ارجوا أن اكون قد وفقت فى الشرح و اعتذر لكم مقدما لعدم قدرتى على شرح بعض الاكواد شرح وافى و ذلك لكونى لاول مرة أتعامل مع المكتبة lwuit



ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أحمد مناع السبت يونيو 29, 2013 12:33 pm

المكتبة LWUIT_MIDP فى المرفقات
المرفقات
خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Attachment
LWUIT_MIDP.zip لا تتوفر على صلاحيات كافية لتحميل هذه المرفقات.(709 Ko) عدد مرات التنزيل 16

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أيمن الإبراهيم السبت يونيو 29, 2013 10:31 pm

مشكور جدا على الشرح
أيمن الإبراهيم
أيمن الإبراهيم
........
........

تاريخ التسجيل : 19/03/2013
المساهمات : 251
النقاط : 398
التقيم : 1
الدولة : سوريا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف لمار عادل الإثنين يوليو 01, 2013 8:58 am

فيه خطأ بيظهر فى الكود ومش عارفة اية السبب ؟
لمار عادل
لمار عادل
..
..

تاريخ التسجيل : 29/05/2013
المساهمات : 28
النقاط : 46
التقيم : 2
الدولة : مصر
الجنس : انثى

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أحمد مناع الثلاثاء يوليو 02, 2013 6:46 am

لمار عادل كتب:فيه خطأ بيظهر فى الكود ومش عارفة اية السبب ؟

 الاخت لمار بداية صباح الخيرات ......هل من الممكن تطلعينا على هذا الخطأ لكى يتثنى لنا الاجابة ؟

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أيمن الإبراهيم الجمعة سبتمبر 06, 2013 11:44 am

ممكن استاذ احمد تحميل المشروع كامل ولك جزيل الشكر
أيمن الإبراهيم
أيمن الإبراهيم
........
........

تاريخ التسجيل : 19/03/2013
المساهمات : 251
النقاط : 398
التقيم : 1
الدولة : سوريا
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف أحمد مناع السبت سبتمبر 07, 2013 8:46 am

أيمن الإبراهيم كتب:ممكن استاذ احمد تحميل المشروع كامل ولك جزيل الشكر
أرجوا المعذرة فضاء الحفظ للمرفقات قد انتهى ......لذلك جارى حل مشكلة فضاء الحفظ للمرفقات و سيتم رفع المشروع فى اقرب وقت ممكن .......

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
أحمد مناع
أحمد مناع
.
.

تاريخ التسجيل : 15/02/2011
المساهمات : 1108
النقاط : 202034
التقيم : 144
الدولة : مصر
الجنس : ذكر

https://egy-tech.forumegypt.net

الرجوع الى أعلى الصفحة اذهب الى الأسفل

خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Empty رد: خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit

مُساهمة من طرف NEXT الخميس يناير 02, 2020 6:53 pm

الله يكرمك  خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  1f603  خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  1f603 

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
خطوة بخطوة لبرمجة مستعرض ويب للجولات باستخدام المكتبة lwuit  Do.php?imgf=154090993464951
NEXT
NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى