我正在尝试加强我对asyncTask的了解,所以我按照教程下载了一个图像,但我不明白,我得到了一个错误的ArrayOutofBound索引,所以如果有人告诉我原因这里是代码,请告诉我为什么他迭代进度条最大
public class MainActivity extends AppCompatActivity {
ProgressBar progessBar;
ImageView MyImage;
private final String IMAGE_URL = "http://www.101apps.co.za/images/headers/101_logo_very_small.jpg";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyImage = findViewById(R.id.imageView);
ImageButton downloaad = findViewById(R.id.imageButton);
downloaad.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new downloadFile(MainActivity.this).execute(IMAGE_URL);
}
});
}
public class downloadFile extends AsyncTask<String , Integer , String>{
private int PROGRESS_BAR_MAX = 100;
Context context;
public downloadFile(Context cxt){
this.context = cxt;
}
@Override
protected String doInBackground(String... strings) {
String result = "";
String path = context.getFilesDir() + File.pathSeparator + "downloadFile.png";
HttpURLConnection httpURLConnection = null;
try{
final URL url = new URL(strings[0]);
httpURLConnection = (HttpURLConnection) url.openConnection();
int length = httpURLConnection.getContentLength();
InputStream IS = (InputStream) url.getContent();
byte[] imageData = new byte[length];
Log.d("aho" , "" + length);
int buffersize = (int) Math.ceil(length/(double)PROGRESS_BAR_MAX);
int download = 0;
for(int i = 1 ; i < PROGRESS_BAR_MAX ; i++){
long read = IS.read(imageData , download , buffersize);
download += read;
publishProgress(i);
}
BufferedInputStream bufferedReader = new BufferedInputStream(httpURLConnection.getInputStream());
FileOutputStream Fo = new FileOutputStream(path);
int data = bufferedReader.read();
while(data != -1){
Fo.write(data);
data = bufferedReader.read();
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(httpURLConnection == null){
httpURLConnection.disconnect();
}
}
publishProgress(PROGRESS_BAR_MAX);
return path;
}
@Override
protected void onPreExecute() {
super.onPreExecute();
progessBar = findViewById(R.id.progressBar);
progessBar.setMax(PROGRESS_BAR_MAX);
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
progessBar.setProgress(values[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if(s != null) {
progessBar.setVisibility(View.INVISIBLE);
Bitmap bitmap = BitmapFactory.decodeFile(s);
MyImage.setImageBitmap(bitmap);
}
}
}
}
下面是堆栈跟踪01-20 03:37:40.607 407 5-4096/com.gamecodeschool.bodybuilder E/AndroidRuntime:致命异常:AsyncTask#1进程:com.gamecodeschool.bodybuilder,PID:4075 java.lang.RuntimeException:在Android.os.AsyncTask$3执行doInBackground()时出错。done(AsyncTask.java:353)在java.util.concurrent.FutureTask.FinishCompletion(futureTask.java:383)在FferedSource.java:368)在com.gamecodeschool.bodybuilder.MainActivity$DownloadFile.DoinBackgroun(mainActivity.java:66)在com.gamecodeschool.bodybuilder.MainActivity$DownloadFile.DoinBackgroun(mainActivity.java:45)在android.os.AsyncTask$2。调用(asynctask.java:333)在java.util.concurrent.FutureTask.Run(FutureTask.java:266)
这是因为您的read循环是在进度计数上循环,而不是在下载的资源大小上循环。循环访问资源的大小(确保检查读取错误),并根据读取的数量与总长度计算进度。
在处理上述异常时,又发生了一个异常: 回溯(最近一次调用):文件“/users/macintosh/pycharmprojects/claculatorer/bucky.py”,第9行,在download_web_image(“https://upload.wikimedia.org/wikipedia/commons/b/b4/jpeg_example_jpg_rip_100.jpg”)中;文件
我正在做一个简单的天气应用程序,我有一个问题,通过AsyncTask读取变量。我是andorid编程的初学者,所以我要求理解。因此,我想将变量“latitude”和“longitude”从place picker中选择到asynctask.execute(“latitude”,“longitude”)中,并刷新屏幕以显示新位置的天气。但我注意到,当我在代码中不是通过变量(例如asynctask.e
问题内容: 我正在尝试使用asyncTask下载文件,但无法正常工作,没有错误消息或什么都没有,只是不下载文件…我尝试了所有操作,但似乎并没有输入…任何人都知道可以是问题吗?我在手机上测试过,网址也可以。 问题答案: 我只运行了您的代码,它对我来说很好用。该图像已下载到sdcard。 请注意,请确保在AndroidManifest.xml中设置了以下权限: 这是我得到的日志(请注意,我添加了):
我正在制作这个应用程序,用户可以有一张个人资料图片(但只有一张图片每人)。我得到了所有的设置,但当图片是2MB+时,它需要一些时间来加载,实际上我只需要图片是50KB左右(只有图片的小显示,最大40像素)。我做了一些代码将图像直接放入实时数据库(转换为画布并使它们成为一个7KB的base64字符串)。但是,这并不是真的干净,最好使用Firebase存储。 自从新的更新3.3.0以来,您可以使用pu
我在我的应用程序中使用了XSD中的gml(3.1.1)XSDs。我想下载版本3.1.1中的所有gml XSD,例如zip文件。换句话说:基本xsd在这里,我想下载这个xsd,所有的导入都在zip文件或类似zip文件的东西中。是否有任何应用程序支持这一点?我找到了这个下载器,但它对我不起作用(我认为这个应用程序不支持gml.xsd3.1.1中出现的导入中的相对路径)。有什么想法吗?
本文向大家介绍Android带进度条的下载图片示例(AsyncTask异步任务),包括了Android带进度条的下载图片示例(AsyncTask异步任务)的使用技巧和注意事项,需要的朋友参考一下 为什么要用异步任务? 在Android中只有在主线程才能对ui进行更新操作,而其它线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把所有的操作都放在主线程中操作 ,比如一些耗