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-configxmlns: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 :
Komentar
Posting Komentar