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

استفاده از Asynctask در پروژه Downloader

Hossein Kurd  11 سال پیش  11 سال پیش
+7 0

آقای علیرضا در استفاده از AsyncTask مشکل داشتن

من هم بهتر دیدم اینجا یک توضیح مفید و مختصری در موردش بدم

AsyncTask دارای سه متد مهم هست که خیلی به کارمون می آم:

1. doInBackground : که کدهایی که در پسزمینه اجرا می شن رو در بر داره به صورتی که صفحه رو فریز نکنه

2. onPreExecute : که پیش از doInBackground عمل می کنه و وظیفه استفاده از UI رو بر عهده داره

3. onPostExecute : همانند onPreExecute عمل می کنه با این تفاوت که پس از اتمام متد doInBackground اجرا می شه

و اما کدها:

permission:

 

 

    <uses-permission android:name="android.permission.internet"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <uses-permission android:name="android.permission.write_external_storage"></uses-permission>

 

MainActivity:

 

 private String url;
    private String fileName;
    private AlertDialog.Builder builder;

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

        G.activity = this;

        url = "http://mobile-phone.pk/images/wallpapers/light_blue_background_hd_mobile_wallpaper.jpg";
        // Pick File Name, From Last '/' + 1(l of light) to End Of The url
        fileName = url.substring(url.lastIndexOf("/") + 1,url.length());
        Log.i("fileName","fileName >> " + fileName);

        builder = new AlertDialog.Builder(MainActivity.this);
        builder.setIcon(android.R.drawable.ic_dialog_alert)
                .setTitle("Download : ")
                .setMessage(fileName + " ?")
                .setPositiveButton("Download", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
                                Log.i("fileName","Downloading Started ...");
                                new FileDonloader(url).execute();
                            }
                        })

                .setNegativeButton("Cancel !", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                                Log.i("fileName","Downloading Canceled ...");
                    }
                });
        builder.create().show();

    }

 

 

G:

 

 public static Context context;
    public static Activity activity;
    public static String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
    public static String DIR_APP;


    @Override
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();

        DIR_APP = DIR_SDCARD + "/Android/data/" + G.context.getPackageName() + "/files/";
        DIR_APP = DIR_APP.replace("//", "/");
        new File(DIR_APP).mkdirs();
    }

 

 

FileDonloader:

 

 public class FileDonloader extends AsyncTask<Void, Void, Void> {

    private String urlPath;
    private String fileName;
    private String downloadPath;

    public FileDonloader (String urlPath){
        this.urlPath = urlPath;
    }

    @Override
    protected void onPreExecute() {
        // Run UI Code Snd Views Before Beginning Progress
        Toast.makeText(G.context, "Downloading ...", Toast.LENGTH_LONG).show();
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        // Run UI Code Snd Views After Beginning Progress
        Toast.makeText(G.context,"File Downloaded >> '" + fileName +
                "' \n To Directory  >> '"  + downloadPath + "'", Toast.LENGTH_LONG).show();
                super.onPostExecute(aVoid);
    }

    @Override
    protected Void doInBackground(Void... voids) {
        // Your Codes Exception UI Codes And Views, Run At BackGround
        downloadPath = G.DIR_APP;
        fileName = urlPath.substring(urlPath.lastIndexOf("/")+1,urlPath.length());
        Log.i("Log","File's Name Is >>  '" + fileName + "'");
        Log.i("Log","Local Director Is >>  '" + downloadPath + "'");
        Log.i("Log","Online Path Is >>  '" + urlPath + "'");

        try {
        URL url = new URL(urlPath);
            HttpURLConnection connection  = (HttpURLConnection) url.openConnection();
            connection.connect();

            File file = new File(downloadPath + "/" + fileName);

            if(file.exists()){
                file.delete();
            }
            FileOutputStream outputStream = new FileOutputStream(downloadPath + "/" + fileName);
            InputStream inputStream = connection.getInputStream();
            byte[] buffer = new byte[32 * 1024];
            int len = 0;
            while ((len = inputStream.read(buffer)) > 0){
                outputStream.write(buffer, 0, len);
                Log.i("Log", "Current Download Length: " + len);
            }
            outputStream.flush();
            outputStream.close();
            inputStream.close();

        } catch (IOException e) {
            e.printStackTrace();
            Log.e("Error", "IOException Error >> " + e);
        }

        return null;
    }
}

 

البته صحیحش این هست که از پروگرسبار استفاده بشه(در onPreExecute و onPostExecute ) که به قول آقای آقاجانی : این رو به خودتون می سپارم :D :P

دانلود سمپل

+1 0
دستتون درد نکنه فقط ای کاش آموزش استفاده تو پروژه notes را هم میدادید...:) (11 سال پیش)
0 0
دستتون درد نکنه فقط ای کاش آموزش استفاده تو پروژه notes را هم میدادید...:) (11 سال پیش)
 برای این سوال پاسخی وجود ندارد.

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