مشکل در دانلود عکس از اینترنت
سلام
من با استفاده از Async Class یه کد نوشتم برای دانلود کردن یه عکس از اینترنت و نشون دادنش روی یه imageview ولی وقتی دانلود رو میزنم کار نمیکنه برنامه (کرش نمیکنه البته . ) ولی دانلود نمیکنه فایل رو . این کدم هست :
import android.app.ProgressDialog;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class MainActivity extends AppCompatActivity {
String image_url = "http://p1.img.cctvpic.com/photoworkspace/contentimg/2016/01/27/2016012716310473095.jpg";
Button btnDownload;
ImageView imgView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnDownload = (Button) findViewById(R.id.btnDownload);
imgView = (ImageView) findViewById(R.id.imgView);
btnDownload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DownloadTask downloadTask = new DownloadTask();
downloadTask.execute(image_url);
}
});
}
class DownloadTask extends AsyncTask<String, Integer, String> {
ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setTitle("Download in Progress...");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMax(100);
progressDialog.setProgress(0);
progressDialog.show();
}
@Override
protected String doInBackground(String... params) {
String path = params[0];
int fileLength = 0;
try {
URL url = new URL(path);
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
fileLength = urlConnection.getContentLength();
File newFolder = new File("sdcard/photoalbum");
if (!newFolder.exists()) {
newFolder.mkdir();
}
File inputFile = new File(newFolder, "downloaded_image.jpg");
InputStream inputStream = new BufferedInputStream(url.openStream(), 8192);
byte[] data = new byte[1024];
int total = 0;
int count = 0;
OutputStream outputStream = new FileOutputStream(inputFile);
while ((count = inputStream.read(data)) != -1) {
total += count;
outputStream.write(data, 0, count);
int progress = (int) (total * 100 / fileLength);
publishProgress(progress);
}
inputStream.close();
outputStream.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "Download Complete";
}
@Override
protected void onProgressUpdate(Integer... values) {
progressDialog.setProgress(values[0]);
}
@Override
protected void onPostExecute(String result) {
progressDialog.hide();
Toast.makeText(getApplicationContext(),result,Toast.LENGTH_SHORT).show();
String path = "sdcard/photoalbum/downloaded_image.jpg";
imgView.setImageDrawable(Drawable.createFromPath(path));
}
}
}
توی Android Manifest هم اینارو وارد کردم :
<uses-permission android:name="android.permission.INTERNET"> </uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
این هم ۳ خط آخر LogCat که به صورت قرمز (ارور) نمایش میده :
09-01 13:08:28.398 30713-30713/com.arash.downloadtest E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: sdcard/photoalbum/downloaded_image.jpg: open failed: ENOENT (No such file or directory)
09-01 13:08:28.408 30713-30754/com.arash.downloadtest E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f7233465070
09-01 13:08:30.402 30713-30754/com.arash.downloadtest E/Surface: getSlotFromBufferLocked: unknown buffer: 0x7f72334665e0
ممنون میشم اگه کمک کنین و مشکلم رو بگین .
فکر کنم متوجه شدم مشکل از چیه , چون هر برنامه ای که مربوط به یه سری Permission ها هست و مینویسم مشکل به وجود میاد , مثل این که توی Android 6 باید یه سری تغییرات ایجاد کنیم توی code برای Permission ها . حالا راهی هست تغییری ندم و یه جوری API رو بیارم پایین ؟ یعنی از Android 6 استفاده نکنم ؟
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .