بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

نمایش progress dialog در حین گرفتن دیتا از سرور

مدیریت گفتگو
Tahi 12 سال پیش
آخرین تغییر: 12 سال پیش

با سلام

من  می خوام تو پروژه ساخت مارکت با بانک آنلاین هنگامی که اطلاعات جیسون شده داره از سرور گرفته میشه تا توی لیست ویو نشون داده بشه یه پروگرس دیالوگ رو نشون بدم 

یعنی تا وقتی اطلاعات نیومده به جای اینکه صفحم سیاه شه پروگرس دیالوگ نمایش داده شه

به چه طریقی هست؟

نظرات

javac 12 سال پیش
بايد از thread ها استفاده كنيد
Tahi 12 سال پیش
خوب میدونم ولی چه جوری؟

پاسخ‌ها 5

مجتبی یگانه 12 سال پیش

ببینید ، وقتی خروجی از سرور میاد مثلا تو متغییر به اسم result ذخیره میشه ، شما کناراین متغییر یکی دیگه به اسم iscomplete تغریف کن ، هر وقت کاره استریمینگ تموم شد ، این متغییر true بشه

از اون طرف تا وقتی false هست Dialog نشون بدید :) ، چون سورس نبود همین جوری گفتم دیگه ! ، ییهو !

نظرات

uncocoder 12 سال پیش
نیازی به متغیر دیگری نیست.
uncocoder 12 سال پیش

شما اول از همه یک صفحه Loading نشون بده و بعدش وب سرویس رو برای درخواست اطلاعات از سرور صدا بزن. بعد از دریافت اطلاعات ( که توسط Listener ) اطلاع داده میشه ، در متد Listener دیالوگ Loading رو dismiss کنید. اگر واضح نبود اطلاع بدید.

نظرات

Borhani 12 سال پیش
نه استاد واضح نبود بیشتر توضیح دهید
مجتبی یگانه 12 سال پیش
یعنی از همون اول دیالوگ رو نشون بدیم ، وقتی کار Thread تموم شد فقط باید Dismiss بشه :)
mak332 12 سال پیش
استاد واضح نبود. من از همون پروژه Notes شما استفاده میکنم و یکسری اطلاعات رو از بانک میخونم و توی یک ListView نمایش میدم. اگر بخوام کلاس هایی که در Command هستند رو صدا بزنم ولی با نمایش یک Loading باید چکار کنم. ممنون میشم راهنمایی کنید.
javac 12 سال پیش

چه طوری توسط Listenre اطلاع داده میشه؟

نظرات

Borhani 12 سال پیش

سلام با این سورس توانستم به جواب برسم

  private class LongOperation_img_update_images extends AsyncTask<String, Void, Void> {

private ProgressDialog Dialog = new ProgressDialog(Activity_Menu.this);



@Override
protected void onPreExecute() {
// NOTE: You can call UI Element here.

//UI Element
Dialog.setMessage(G.getResource.getString(R.string.Updating));
Dialog.show();
}



// Call after onPreExecute method
@Override
protected Void doInBackground(String... urls) {

Main_Food_DB.download_image_main_food();
Drink_DB.download_image_drinks();

return null;

}



@Override
protected void onPostExecute(Void unused) {
// NOTE: You can call UI Element here.

// Close progress dialog
Dialog.dismiss();

}

} // END Class with extends AsyncTask class*** LongOperation_img_update_images

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

newLongOperation_img_update_images().execute();

نظرات

mak332 12 سال پیش
من همین رو میزنم ولی بهم ارور میده. میگه که Private رو باید از اول کلاس برداری. و وقتی هم بر میدارم باید پس از پایان کلاس اونو فراخوانی کنم. تا بهم ارور نده. وقتی هم اجرا میکنم دیالوگ همینطوری کار میکنه تا کرش میشه.
mak332 12 سال پیش

این کدی هست که نوشتم ولی کار نمیکنه. همون پروژه Notes هستش ولی یکم دستکاریش کردم. میشه استد راهنمایی کنن.

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ListView lstContent = (ListView) findViewById(R.id.lstContent);

        adapter = new AdapterNote(G.list);
        lstContent.setAdapter(adapter);
        //    if ("1".equals("db_select")) {
        // Commands.article();

        //    }

        private class get_data_server extends AsyncTask<String, Void, Void> {

            private ProgressDialog Dialog = new ProgressDialog(ActivityMain.this);


            @Override
            protected void onPreExecute() {
                // NOTE: You can call UI Element here.

                //UI Element
                Dialog.setMessage("Please Wait...");
                Dialog.show();
            }


            // Call after onPreExecute method
            @Override
            protected Void doInBackground(String... urls) {
                String db_select = "";
                TextView txtCatName = (TextView) findViewById(R.id.txtCatName);

                Bundle extras = getIntent().getExtras();
                if (extras != null) {
                    db_select = extras.getString("db_select");
                    //Toast.makeText(G.context, "variable sent : " + db_select, Toast.LENGTH_SHORT).show();
                    if ("2".equals(db_select)) {
                        Commands.article();
                        txtCatName.setText("مقالات حفاری");
                    } else if ("0".equals(db_select)) {
                        Commands.film();
                        txtCatName.setText("فیلم و انیمیشن");
                    } else if ("1".equals(db_select)) {
                        Commands.ebook();
                        txtCatName.setText("کتب الکترونیک");
                    } else if ("5".equals(db_select)) {
                        Commands.program();
                        txtCatName.setText("برنامه و نرم افزار");
                    }
                }
                adapter.notifyDataSetChanged();

                return null;
            }


            @Override
            protected void onPostExecute(Void unused) {
                // NOTE: You can call UI Element here.

                // Close progress dialog
                Dialog.dismiss();

            }
        }
        new get_data_server().execute();
    }



نظرات

Hossein Kurd 12 سال پیش
کلاس get_data_server مستقل هست، اون رو جداگانه بسازید و خارج از OnCreate قرار بدین

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .