PENGENALAN ASYNCTASK DAN ASYNCTASKLOADER PADA ANDROID STUDIO

Berikut pelaksanaan praktikum AsyncTask dan AsyncTaskLoader pada Android Studio : 

Asynctask Android adalah salah satu class dari android yang menjalakan perintah di belakang atau background. Asynctask android biasanya digunakan untuk menjalankan perintah yang membutuhkan proses lama seperti proses download, upload, looping, ataupun proses query ke database. Karena jika suatu perintah yang membutuhkan proses lama di jalankan tanpa Asynctask android, maka akan berakibat tampilan jadi hang atau berhenti selama perintah itu masih berjalan, oleh karena itu Asynctask android mencegahnya dengan membikin perintah tersebut berjalan di belakang/background sehingga tampilan di androidnya tidak terganggu.

Pelaksaan Praktikum : 

  • Buka Aplikasi Android Studio. Setelah muncul seperti ini, klik Star a new Android Studio project.

  • Pilih template yang akan digunakan sesuai dengan kebutuhan, dan next.

  • Akan muncul tampilan seperti dibawah ini. Kita hanya perlu memberi nama project pada “Name” dan pilih lokasi penyimpanan project-nya akan disimpan difolder mana pada bagian “Save location”, selebihnya cukup biarkan saja. Kali ini kita nama kan "AsyncTaskDownload". Jika sudah, klik “Finish”.

  • Ketikkan script dibawah ini pada Activity_main.xml : 
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp"
    android:paddingTop="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    tools:context=".MainActivity">

   <Button
       android:id="@+id/button1"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Download" />

    <TextView
        android:id="@+id/attrs"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
     
       android:layout_alignParentRight="true"
   android:layout_alignParentBottom="true"
        android:layout_marginBottom="15dp"
        android:layout_marginRight="15dp"
        android:text="unggasid.com"
        android:textStyle="bold" />
    </RelativeLayout>

  • Ubah script pada bagian MainActivity.java seperti dibawah ini : 
        package dewiratnawati246.blogspot.com.asynctaskdownload;

         import android.Manifest;
         import android.content.Intent;
         import android.content.pm.PackageManager;
         import android.os.Bundle;
         import java.io.BufferedInputStream;
         import java.io.File;
         import java.io.FileOutputStream;
         import java.io.InputStream;
         import java.io.OutputStream;
         import java.net.MalformedURLException;
         import java.net.URL;
         import java.net.URLConnection;
         import java.net.URLDecoder;
         import java.sql.Struct;
         import java.util.Map;
         import java.util.concurrent.TimeUnit;

         import androidx.appcompat.app.AppCompatActivity;
         import androidx.core.app.ActivityCompat;
         import androidx.core.content.ContextCompat;
         import androidx.fragment.app.FragmentActivity;

         import android.app.Dialog;
         import android.app.ProgressDialog;
         import android.os.AsyncTask;
         import android.os.Environment;
         import android.view.View;
         import  android.view.View.OnClickListener;
         import android.widget.Button;
         import android.widget.Toast;
         import android.util.Log;

         public class MainActivity extends AppCompatActivity implements OnClickListener {
    public static final int download_progress = 0;
    private String file_url = "http://dewiratnawati246.blogspot.com/wp-content/uploads/2021/Ringkasan-Tesis-Dewi-Ratnawati.pdf";
    Button btn_download;
    ProgressDialog prgDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_download = (Button) findViewById(R.id.button1);
        btn_download.setOnClickListener(this);
    }

    @Override
    public void onClick (View v) {
        if 
(ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED){
            Log.i("Permission", "Permission is Denied");
            ActivityCompat.requestPermissions(MainActivity.this,new String[] {
                    Manifest.permission.WRITE_EXTERNAL_STORAGE},101);
        }else{
            new DownloadFileAsync().execute(file_url);
        }
    }

    @Override
    protected Dialog onCreateDialog(int id){
        switch (id) {
            case download_progress:
            prgDialog = new ProgressDialog(this);
            prgDialog.setMessage("Download file...");
            prgDialog.setIndeterminate(false);
            prgDialog.setMax(100);
            prgDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

prgDialog.setCancelable(false);
            prgDialog.show();
            return prgDialog;
            default:
                return null;
        }
    }

    class DownloadFileAsync extends AsyncTask<String, Integer, String> {
        @Override
        protected  void onPreExecute() {
            showDialog(download_progress);
        }

        @Override
        protected String doInBackground(String... aurl) {
            Log.i("testing", "url download : " + aurl[0]);
            URL url = null;
            int count;
            try {
                url = new URL(aurl[0]);
                URLConnection conexion = url.openConnection();

conexion.connect();
                Log.i("koneksi", "koneksi berhasil");
                int lenghtOfFile = conexion.getContentLength();
                Log.i("UkuranFile", "ukuran : " + String.valueOf(lenghtOfFile));
                InputStream input = new BufferedInputStream(url.openStream(), 10 * 1024);
                String fileName = conexion.getHeaderField("Content-Disposition");
                if (fileName == null || fileName.length() < 1) {
                    URL downloadeUrl = conexion.getURL();
                    fileName = downloadeUrl.getFile();
                    fileName = fileName.substring(fileName.lastIndexOf("/") * 1);
                } else {
                    fileName = URLDecoder.decode(fileName.substring(fileName.indexOf("filename=") + 9),
                      "UTF-8");
                    fileName = fileName.replaceAll("\"", "");
                }

OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory().getPath() + "/Download/" + fileName);

                byte data[] = new byte[1024];
                long total = 0;
                while ((count = input.read(data)) != -1) {
                    total += count;
                    publishProgress((int) ((total * 100) / lenghtOfFile));
                    output.write(data, 0, count);
                }
                output.flush();
                output.close();
                input.close();

            } catch (Exception e) {
                e.printStackTrace();
                Log.d("koneksi", "koneksi gagal");
            }

            return null;
        }

protected  void  onProgressUpdate(Integer... progress) {
            prgDialog.setProgress(progress[0]);
        }
        protected  void  onPostExecute(String result) {
            dismissDialog(download_progress);
            Toast.makeText(getApplicationContext(),"Download complete. File in /sdcard/Donwload", Toast.LENGTH_SHORT).show();
        }
    }
}

  • Ubah script pada Network_security_config.xml : 
    <?xml version="1.0" encoding="utf-8"?>
    <network-security-config
        xmlns:android="http://schemas.android.com/apk/res/android">
        <base-config cleartextTrafficPermitted="true" />
    </network-security-config> 

  • Lalu ubah script pada androidmanifest.xml seperti dibawah ini : 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="dewiratnawati246.blogspot.com.asynctaskdownload">
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    <application
 
android:requestLegacyExternalStorage="true"
        android:usesCleartextTraffic="true"
        android:networkSecurityConfig="@xml/network_security_config"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

  • Setelah selesai mengubah script - script seperti yang ada diatas. klik Run/dijalankan, maka akan muncul tampilan seperti dibawah ini : 


Sekian pelaksanaan praktikum penggunaan AsyncTask pada Android Studio, dan semoga bermanfaat🙂

Komentar

Postingan populer dari blog ini

PENGENALAN LAYOUTING (LinearLayout, RelativeLayout, TableLayout, AbsoluteLayout) PADA ANDROID STUDIO

PENGENALAN SQLITE PADA ANDROID STUDIO

CRUD Database MySQL dengan PHP Pada Apk Andoroid