بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
استفاده از Asynctask در پروژه Downloader
آقای علیرضا در استفاده از 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 سال پیش)
برای این سوال پاسخی وجود ندارد.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .