انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
پروژه دریافت مقدار در دو field و نمایش آن های درnotification

پروژه دریافت مقدار در دو field و نمایش آن های درnotification

#2
سلام.
ابتدا کدهای رایج WebView نوشته شده است و بعد خط زیر را داریم که مهمترین بخش کدها است (منظورشان از key ، مهم بودن این خط از کدها بوده) :

کد پی‌اچ‌پی:
webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer"); 

این خط از کدها، باعث می شود که اگر در کدهای javascript ، به شیء (object) با نام HtmlViewer ، ارجاع داده شد (در واقع این را را به دلخواه تعیین کرده ایم)، یک شیء جدید از روس کلاسی (class) که دارای نام MyJavaScriptInterface می باشد، ساخته شود. از کلمه new ، می توان ساخته شدن شیء از روی کلاس را متوجه شد (برای آشنایی با مفاهیم کلاس و ساخت شیء از روی کلاس، می توانید به کلید شماره 2796 مراجعه کنید).
کلاس MyJavaScriptInterface ، با کد زیر تعریف شده است :

کد پی‌اچ‌پی:
class MyJavaScriptInterface {

    private 
Context ctx;

    
MyJavaScriptInterface(Context ctx) {
        
this.ctx ctx;
    }

    public 
void showHTML(String html) {
        new 
AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html)
                .
setPositiveButton(android.R.string.oknull).setCancelable(false).create().show();
    }


این کلاس (Class)، یک روش (method) (کلید شماره 2801) با نام showHTML دارد که به صورت زیر تعریف شده :

کد پی‌اچ‌پی:
public void showHTML(String html) {
    new 
AlertDialog.Builder(ctx).setTitle("HTML").setMessage(html)
            .
setPositiveButton(android.R.string.oknull).setCancelable(false).create().show();


بنابراین کدی که توسط روش showHTML اجرا می شود، به این صورت است که یک رشته (متن - String) را دریافت کرده و به صورت یک پیام، در یک AlertDialog (کلید شماره 2407) نمایش می دهد. شما بعدا می توانید که این کدها را تغییر دهید و بعد از دریافت متن (که همان خروجی صفحه اینترنتی است)، کدهای مورد نظر خود را اجرا نمایید.

خوب حالا به سراغ ادامه کدهای WebView می رویم. این کدها را ببینید :

کد پی‌اچ‌پی:
webview.setWebViewClient(new WebViewClient() {
        @
Override
        
public void onPageFinished(WebView viewString url) {
            
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                    
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
        }
    }); 

در آن، روش onPageFinished تعریف شده که یعنی وقتی کد اجرا می شود که بارگذاری صفحه تمام شده باشد (صفحه اینترنتی، دیگر در حالت load شدن نباشد و پاسخ کامل صفحه را دریافت کرده باشیم). بنابراین بعد از دریافت خروجی کامل صفحه، کد زیر اجرا خواهد شد :

کد پی‌اچ‌پی:
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                    
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); 

با این کد، در واقع در حال اجرای کد javascript مورد نظرمان برای دریافت خروجی صفحه هستیم، زیرا اصلا کل این کدهایی که نوشته شده، از javascript به عنوان یک واسطه برای دریافت خروجی صفحه در WebView و سپس ارسال آن به روش های موجود در Activity ، استفاده کرده است.
در کد javascript ، به شیء زیر ارجاع داده شده :

کد پی‌اچ‌پی:
window.HtmlViewer.showHTML 

در javascript ، بالاترین شیء ، همان window می باشد (کلید شماره 622)، که در ابتدا ذکر شده، بعد شیء HtmlViewer ذکر شده (همان که گفتیم تعیین کرده ایم که کلاس MyJavaScriptInterface به صورت متناظر با آن ساخته شود) و بعد هم showHTML ذکر شده که همان روش (method) تعریف شده در کلاس MyJavaScriptInterface می باشد. بنابراین کل این عبارت، می گوید که روش showHTML از کلاس MyJavaScriptInterface اجرا شود و اگر دقت کنید، بعد از آن علامت پرانتز است، زیرا این روش باید یک رشته (String) را در ورودی دریافت نماید، که همان خروجی صفحه اینترنتی load شده در WebView است که آن را با کد زیر به دست آورده :

کد پی‌اچ‌پی:
'<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>' 

بعد از تعریف این موارد، با خط زیر، صفحه اصلی رو در WebView نمایش داده (تا بارگذاری شده . بعد از پایان بارگذاری، آن کدها اجرا شوند) :

کد پی‌اچ‌پی:
webview.loadUrl("http://android-in-action.com/index.php?post/" +
            
"Common-errors-and-bugs-and-how-to-solve-avoid-them"); 

--------------------------------------------------------------------------------------------

با درک این موارد، اکنون می توانید کدها را به صورت مناسب برای حالت مورد نظر خود، تغییر بدهید. مثلا همان طور که گفتم، با کد زیر تعیین کرده ایم که بعد از بارگذاری کامل صفحه، دریافت خروجی صفحه و نمایش در AlertDialog ، اتفاق بیفتد :

کد پی‌اچ‌پی:
webview.setWebViewClient(new WebViewClient() {
    @
Override
    
public void onPageFinished(WebView viewString url) {
        
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
    }
}); 

حال، به جای کد بالا، مثلا می توانیم یک دکمه تعریف کنیم و تعیین کنیم که با اشاره بر روی آن دکمه (Button)، کد زیر اجرا شود :

کد پی‌اچ‌پی:
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                    
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');"); 

یا مثلا می توانید بخش مربوط به نمایش در AlertDialog را تغییر بدهید و پردازش های دلخواه را بر روی خروجی صفحه، پیاده سازی کنید یا خروجی را در یک متغیر از جنس رشته ذخیره کنید و ... .
یا چنانچه مواردی مثل چک کردن خروجی به صورت هر چند ثانیه یک بار مد نظرتان است، می توانید از کلید شماره 2861 استفاده نمایید و همان کد مربوط به دریافت خروجی را هر چند ثانیه یک بار اجرا نمایید.

---------------------------------------------------------------------------------------------

اما یک موردی که در توضیحاتتان خواندم، وارد کردن اتوماتیک مقادیر در WebView بود، اگر واقعا ورود دستی اطلاعات نداریم، اصلا WebView را کنار بگذارید و از روش های مربوط به ارسال و دریافت اطلاعات به سرور اینترنتی، استفاده کنید :

http://www.kelidestan.com/keys/categorie...ategory=18

یا جتی برای دریافت ورودی ها، می توان از EditText استفاده کرد :

http://www.kelidestan.com/keys/categorie...ategory=11

در هر فرم (Form) اینترنتی، یک سری پارامتر هست که با روش های GET یا POST ارسال می شوند و با خواندن کدهای HTML فرم می توان آن پارامترها را چک کرد :

http://www.kelidestan.com/keys/categorie...Category=8

وقتی پارامترها را بدانیم، دیگر واسطه گرافیکی (کد HTML فرم) را حذف کرده و مستقیما پارامترها را به صفحه PHP پردازش کننده ارسال کرده و خروجی را دریافت می کنیم.
حتی برخی سایت ها، API هایی (امکان تبادل اطلاعات با سایت، از طریق یک سری صفحات خاص و بدون رابط های گرافیکی رایج) رو در اختیار برنامه نویسان قرار می دهند و پارامترهای مربوط به صفحات را هم اعلام می کنند تا برنامه نویسان بتوانند از آنها استفاده کنند.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط am5152 ، rayej.ir


پیام‌های این موضوع
RE: پروژه دریافت مقدار در دو field و نمایش آن های درnotification - توسط admin - ۱۳۹۳/۱۲/۰۴, ۰۳:۱۱ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان