مشکل با پروژه downloader
سلام و عرض خسته نباشید خدمت تمامی دوستان
در این پروژه بنده تمام کدها رو شبیه به پروژه استاد نوشتم . تمام permisionها رو در manifest ست کردم هم internet و هم نوشتن درsd card و همچنین مطمئن هستم که لینک هم درسته و همچنین هر دو طرف هم پسوندش png هست سوالی که دارم این هستش که فایل رو داخلsdcard ایجاد میکنه و بدون خطا هم اجرا میشه اما فایل sample-image.png رو ایجاد نمیکنه و exception میده (java.io.FileNotFoundException)می خواستم بدونم دلیلش چیه؟
لازم به ذکر هستش که قبلا هم این سوال پرسیده شده و پاسخهای کاربران دیگه هم رو دیدم بعضی از دوستان گفته بودن خط کد زیر رو هم ننویسم که باز درست نشد.
connection.setDoOutput(true)
و همچنین یکی از دوستان دیگه هم گفته بودند که برای ارسال درخواست از tread با استفاده از کلاس AsyncTask استفاده کنید که اونم باز مشکل رو حل نکرد.
اگر از دوستان راه حلی داره بگه ممنون میشم
کدهای به صورت زیره لطفا بگید مشکل از کجاست
کدهای مربوط به کلاس G
public class G extends Application {
public static Context context;
public static final String DIR_SDCRD= Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String DIR_APP=DIR_SDCRD+"/file-downloader";
public static final int DOWNLOAD_BUFFER_SIZE=8*1024;
public static final Handler HANDLER=new Handler();
@Override
public void onCreate() {
super.onCreate();
new File(DIR_APP).mkdirs();
context=getApplicationContext();
}
}
کدهای مربوط به کلاس Filedownloader
public class FileDownloader {
public static void download(final String downloadPath, final String filePath, final OnProgressDownloadListener listener){
Thread thread =new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL(downloadPath);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.connect();
final int filesize=connection.getContentLength();
File file=new File(filePath);
if(file.exists()){
file.delete();
}
FileOutputStream outputStream=new FileOutputStream(filePath);
InputStream inputStream=connection.getInputStream();
byte[] buffer=new byte[G.DOWNLOAD_BUFFER_SIZE];
int len=0;
int downloadSize=0;
while((len=inputStream.read(buffer))>0){
outputStream.write(buffer,0,len);
downloadSize+=len;
final int finaldownloadSize=downloadSize;
final float downloadPercent=(float) downloadSize/filesize;
Log.i("Log","downloadsize="+downloadSize+", filesize="+filesize+",percent="+downloadPercent);
if (listener!=null){
G.HANDLER.post(new Runnable() {
@Override
public void run() {
listener.OnProgressDownload((int) downloadPercent , finaldownloadSize , filesize);
}
});
}
}
outputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
});
thread.start();
}
}
کدهای مربوط به کلاس Main
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnDownload=(Button) findViewById(R.id.btnDownload);
final TextView txtDownload=(TextView) findViewById(R.id.txtDownload);
final ProgressBar prgDownload=(ProgressBar) findViewById(R.id.prgDownload);
btnDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OnProgressDownloadListener listener=new OnProgressDownloadListener() {
private String convertByteToMB(int byteLength){
float sizeInKB=(float) byteLength/1024;
float sizeInMb=(float) sizeInKB/1024;
return String.format("%.1fMB",sizeInMb);
}
@Override
public void OnProgressDownload(int percent, int downloadSize, int fileSize) {
prgDownload.setProgress(percent);
txtDownload.setText(percent+"%"+convertByteToMB(downloadSize)+"/"+convertByteToMB(fileSize));
//Log.i("Log",""+percent);
}
};
FileDownloader.download("http:/192.168.1.105/file-server/image-4.png", G.DIR_APP + "/sample-image.png" , listener);
}
});
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .