آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

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

alireza  11 سال پیش  11 سال پیش
0 0

سلام 

استاد من اولین برنامه ی خودم رو تکمیل کردم و تمام کارهاش رو انجام دادم و خیلی خوب کار می کنه اما یه مشکل اساسی دارم و هنوز نتونستم حلش کنم و اون هم اینه که برنامه من اطلاعات رو از سرور می خونه و روی یک دیتابیس ذخیره میکنه و من اطلاعات رو از روی دیتا بیس می خونم و نمایش می دم تمام قسمت های که مربوط به اینترنت هست مثل خوندن اطلاعات از سرور و یا دانلود عکس و فایل رو در یه شرط گذاشتم که اگر اینترنت وصل بود این کار رو انجام بده اما باز برنامه وقتی اینترنت وصل نیست اجرا نمی شه و کرش می کنه ممنون میشم راهنمایی کنید برای یه برنامه خوندن اطلاعات از سرور برای اینکه زمانی که اینترنت وصل نیست برنامه اجرا بشه و همون اطلعاتی که روی دیتا بیس ذخیره شده رو نمایش بده باید چکار کنم  ؟ ممنون 

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Rabbit  11 سال پیش
+1 0

یک شرط بذار چک کن کن اگه برنامه به اینترنت دسترسی داره از سرور بخون.

من خودم همیشه اطلاعات رو از دیتابیس میخونم فقط وقتی که اینترنت وصل هست توی background دیتابیس رو آپدیت می‌کنم.

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

 public class ConnectionDetector {

    private Context _context;


    public ConnectionDetector(Context context) {
        this._context = context;
    }


    public boolean isConnectingToInternet() {
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null)
        {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED)
                    {
                        return true;
                    }

        }
        return false;
    }

}

 

0 0
خب بعد باید بگم که هروقت این کلاس true رو return کرد یعنی اینترنت وصل هست و بگم که اطلاعات رو از سرور وبخون و یا عملیات دانلود رو انجام بده درسته ؟ (11 سال پیش)
0 0
در واقع من یه کلاس دارم که مربوط به دانلود و یه کلاس مربوط به خوندن اطلاعات از سرور Download Request & ActivittyReadUrl و که توشون تابعی هست که کار من رو انجام می ده و توی کلاس G این تابع خوندن اطلاعا از سرور رو صدا زدم البته این کار هم به صورتی انجام میشه که هر زمان نتیفیکیشن دریافت بشه و ... حالا اینکه اگه کلاسی که گفتین true بود این توابع که نیاز به دسترسی به اینترنت دارن صدا زده بشن مشکل رو حل می کنه ؟ (11 سال پیش)
0 0
در واقع من برای خوندن اطلاعات از دیتا بیس خودم که نیاز به اینترنت ندارم که دیگه ؟ یا باید برای اینکه بدون دسترسی به اینترنت اطلاعات رو از دیتا بیس گوشی بخونم باید کدی رو بنویسم و اجازه این دسترسی رو فعال کنم ؟ (11 سال پیش)
0 0
درسته هر جا نیاز به اینترنت بود ببین اگه کلاس true برگردوند کارت رو انجام بده. دیتابیس خودت هم نیازی به اینترنت نداره داخل گوشی ذخیره شده. (11 سال پیش)
0 0
اوکی (11 سال پیش)
0 0
یه مساله امید جان من این کلاسرو تعریف کردم باید چطور توی مثلا کلاس G به مقداری که برمی گردونه دسترسی پیدا کنم ؟ (11 سال پیش)
0 0
حل شد (11 سال پیش)
0 0
ببینید من اومدم متد isConnectingToInternet() رو static کردم که همه جا بهش دسترسی داشته باشم و نوشتم توی شرطم اگر این true او کاری که نیاز به نت داره رو انجام بده اما اتفاقی که افتاد برنامه حتی به اینترنت هم دسترسی داشت ولی کرش کرد و گیر کرد (11 سال پیش)
0 0
مشکل چیه ؟ بعد ببینید من اینترنت emulator رو قطع می کنم بدون استفاده از کلاس شما برنامه کار می کنه ولی روی گوشی که می برم برنامه کرش می کنه وقتی اینترنت وصل نیست و forse close میده (11 سال پیش)
0 0
نباید استاتیک کنی. باید ازش یه نمونه بسازی و با اون چک کنی به اینترنت وصل هست یا نه. (11 سال پیش)
0 0
یعنی چی ازش یه نمونه بسازم ؟ (11 سال پیش)
0 0
یعنی چی ازش یه نمونه بسازم ؟ یعنی توی هر کلاس باز بیام این رو تعریف کنم ؟ من متد هام توی کلاسهای مختلف هست (11 سال پیش)
0 0
توی هر کلاس ازش یک object بساز دیگه. همینجوری که میگی int a بگو ConnectionDetector a بعد بگو a.isConnectingToInternet() d که یک true یا false بر میگردونه. (11 سال پیش)
0 0
public ConnectionDetector a =a.isConnectingToInternet(); اینطور یعنی ؟ این از من ایراد می گیره که type رو از نوع boolean قرار بده خب ؟ (11 سال پیش)
پاسخ به سوال 
Rabbit  11 سال پیش
0 0

اینطوری:

  ConnectionDetector cd = new ConnectionDetector(myCurrentActivity.this);
                Boolean ans = cd.isConnectingToInternet();
0 0
اقا خیلی ممنون درست شد البته تا یه حدی درواقع یه سری قسمت ها رو کنترل کردم مثلا وقتی اینترنت نداشته باشم اگه برای دانلود فایل کلیک کنه دیگه کرش نمی کنه برنامه و درست شد اما نتونستم قسمت مربوط به خوندن اطلاعات رو کنترل کنم درواقع من یه ماژول وب سرویس دارم یه کلاس که از این ماژول استفاده میکنه برای خوندن اطلاعات از سرور و در کلاس G هم تابعی که توی این کلاس هست صدا می زنم مشابه کاری که استاد کردن حالا من وقتی توی کلاس G اون صدا زدن تابع رو در این شرط چک کردن نت می ذارم برنامه موقع اجرا یه صفحه سیاه می شه (11 سال پیش)
0 0
ضمن اینکه من توی کلاس G تابع نتیفیکیشن دارم که هر ده ثانیه یه بار سروری رو چک می کنه اگه اطلاعیه ای بود اطلاعات رو بخونه بنابراین در واقع بایستی این تابع نتیفیکیشن کنترل بشه در این صورت عملا تابع خوندن اطلاعات از سرور که مشروط به نتیفیکیشن هست کنترل می شه (11 سال پیش)
0 0
با این حال نمی دونم مشکل چیه که صفحه سیاه میاد فقط و عملا برنامه اجرا نمی شه وقتی این تابع رو در این شرط چک کردن نت می ذارم تو کلاس G (11 سال پیش)
0 0
ممنون میشم راهنماییم کنید باید چکار کنم (11 سال پیش)
0 0
من اصلا متوجه مشکل شما نمیشم. یعنی وقتی میخوای اطلاعات رو از اینترنت بخونی صفحه سیاه میشه و اصلا داخل برنامه نمیشه؟ اگه اینطور هست احتمالا سرور پاسخ نمیده اول از سمت سرور مطمئن شو بعد هم برای اینکه حتی اگر سرور پاسخ نمیداد برنامه اجرا شود و هنگ نکند کارهای مربوط به آن را داخل یک asyntask یا یک thread دیگر انجام دهید. اگر مشکلتون رو درست متوجه نشده‌ام کمی شفاف تر توضیح بدین (11 سال پیش)

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