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


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

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

#1
سلام
ممنون از سایت خوبتون.
من یک پروژه اندروید دارم که با یک webview یک url رو مستقیم باز میکنه.
و در 2 فیلد ، کاربر باید دو مقدار رو وارد کنه.من میخوام این دو مقدار برای یکبار که وارد شد ، برای همیشه ذخیره شود و نیازی به وارد کردن مجدد نباشد !
همچنین ، فایل php ما احتمالا از javascript استفاده می کند که در واقع بعد از وارد شدن مقدار در دو فیلد ، برای از یک تایم زمانی مشخص ، reload می شود.
و برای مثال بنده میخواهم خروجی فایل php را در یک نوتیفیکیشن نمایش دهم (در یک تایم زمانی مشخص) مثلا هر 5 ثانیه یکبار ، مقادیر ذخیره شده اتوماتیک وارد دو فیلد شود و خروجی را در نوتیفیکیشن نمایش دهد.
سوال رو درstackoverflow و انجمن برنامه نویس ها مطرح کردم ، جواب قطعی و کاملی نگرفتم ، اما یک مورد پاسخ داده شد که کد ان را در ادامه خواهم گذاشت :

http://stackoverflow.com/questions/28661...tification


کد پی‌اچ‌پی:
public class TestActivity extends Activity {

@
Override
protected void onCreate(Bundle savedInstanceState) {
    
super.onCreate(savedInstanceState);
    
setContentView(R.layout.webview);
    final 
WebView webview = (WebViewfindViewById(R.id.browser);
    
webview.getSettings().setJavaScriptEnabled(true);
    
webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");

    
webview.setWebViewClient(new WebViewClient() {

        @
Override
        
public void onPageFinished(WebView viewString url) {
            
webview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                    
"('<html>'+document.getElementsByTagName('html')[0].innerHTML+'</html>');");
        }
    });

    
webview.loadUrl("http://android-in-action.com/index.php?post/" +
            
"Common-errors-and-bugs-and-how-to-solve-avoid-them");
}

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();
    }
}}
[/
code

در لینک بالا محتویات webview را قرار داده ام.خوش حال میشم کسی ایده ایی به ذهنش میرسد مارا بی نصیب نگذارد.
همچنین گفته شده بود که :

webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");

key شما هست.اما نمی دونم واقعا چجوری باید استفاده کرد و اطلاعات بیشتری نیاز هست.
ممنون .
پاسخ

پروژه دریافت مقدار در دو 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

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

#3
متشکرم که تایم گذاشتید.
راستش تو جاوا و فیلد برنامه نویسی آندروید مبتدی هستم و بهتره بگوییم تازه شروع کردم.
اما با توجه به توضیحات کاملتون ،بنده چک کردم مقادیری که برای اولین بار وارد میشند ، بعد از یک تایم که کاربر وارد میکنه ، صفحه بعد از ورود اطلاعات در همون پیج رفرش میشه.
به نظر شما میشه از همون webview خروجی رو در نوتیفیکیشن بعد از یک تایم (که مشخص میکنیم) نمایش داد ؟
نیازی به ذخیره مقادیر هم نیست Smile
ممنون میشم در این مورد مثال هایی قرار بدید (با مثال دارم کار میکنم)
ضمنا مقاله یا pdf از یادگیری زبان جاوا به زبان فارسی (مثل کتاب ترجمه جعفرنژاد قمی) که برای دانلود گیرم نیومد، سراغ ندارید ؟
انگلیسی دارم مثل : http://www.apress.com/9781430264545
اما خوب ترجمه نیازه و خلاصه بسیار زیاد کار میبره.چه بهتره زبان مادری خودمون باشه...
متشکر.


 
پاسخ

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

#4
سلام دوستان
خسته نباشید
من برای این قسمت از کد

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


میخوام مقدار درون یک btn رو از روی html دریافت کنم < اما ممکن نیست !

کد پی‌اچ‌پی:
 mWebview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                        "(document.getElementsByClassName('btn')[0].innerHTML);"); 

از کد بالا که استفاده میکنم مقدار خالی بهم میده

کد پی‌اچ‌پی:
mWebview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                         "(document.getElementsByClassName('btn')[0].value.innerHTML);"); 

و از این کد هم که استفاده میکنم میگه Undefined !

مشکل از چیه ؟
دقیقا باید چی رو وارد کنم ؟ ممنون میشم راهنمایی کنید <
پاسخ

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

#5
(۱۳۹۳/۱۲/۱۴, ۱۱:۳۳ ب.ظ)'criss' نوشته: سلام دوستان
خسته نباشید
من برای این قسمت از کد

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


میخوام مقدار درون یک btn رو از روی html دریافت کنم < اما ممکن نیست !

کد پی‌اچ‌پی:
 mWebview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                        "(document.getElementsByClassName('btn')[0].innerHTML);"); 

از کد بالا که استفاده میکنم مقدار خالی بهم میده

کد پی‌اچ‌پی:
mWebview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                         "(document.getElementsByClassName('btn')[0].value.innerHTML);"); 

و از این کد هم که استفاده میکنم میگه Undefined !

مشکل از چیه ؟
دقیقا باید چی رو وارد کنم ؟ ممنون میشم راهنمایی کنید <

 



سلام.
این کدی که ذکر کردید، نباید مشکلی داشته باشه :

کد پی‌اچ‌پی:
mWebview.loadUrl("javascript:window.HtmlViewer.showHTML" +
                        
"(document.getElementsByClassName('btn')[0].innerHTML);"); 

حالا بنده دو حدس دارم :

1- روش getElementsByClassName برای اشاره به تعدادی عنصر، بر اساس نام کلاس (Class) آنها می باشد، بنابراین ببینید که نام کلاس برای عنصر مورد نظرتان به درستی تعیین شده باشد.
2- روش innerHTML ، محتوای HTML بین زوج تگ را به ما می دهد. یعنی مثلا اگر برای زوج تگ p به کار رود، تمامی محتوای بین <p> و <p/> را به ما می دهد (یا به اصطلاح، یک تگ p با آن نام کلاس). حالا ممکنه که شما این روش را برای عنصری به کار بردید که اصلا به شکل زوج تگ نیست که محتوایی بین دو تگ ابتدا و انتهای آن باشد (یا اینکه اصلا محتوایی بین زوج تگ نبوده، یا تگ پایانی را ننوشته ایم). 
بهتر است کد HTML صفحه را نیز ذکر کنید.

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


پرش به انجمن:


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