我一直在开发应用程序,因为我有两项活动 第一个活动被叫第二个以获得下载URL。
在第一个Activity的OnActivityResult
函数中,有一个ProgressDialog
它显示使用该URL的图像下载状态。
问题是该活动中未显示进度对话框。
protected void onActivityResult(int requestCode, int resultCode, Intent imagePicked)
{
super.onActivityResult(requestCode, resultCode, imagePicked);
if(resultCode==RESULT_OK)
{
ProgressDialog progressDialog=ProgressDialog.show(this, "", "Loading Image");
switch(requestCode)
{
case CharacterSelector.GetFaceBookImage:
//Toast.makeText(this, "onFacebookimageresult", Toast.LENGTH_SHORT).show();
String ImageUrl=imagePicked.getStringExtra("DownloadLink");
WebService getImage=new WebService(ImageUrl);
Log.d("Selected Img url", ""+ImageUrl);
InputStream inputStream;
try
{
inputStream = getImage.getHttpStream(ImageUrl);
getImage=null;
Bitmap bitmap=BitmapFactory.decodeStream(inputStream);
inputStream=null;
mybitmapDrawable=new BitmapDrawable(bitmap);
addImageUserImage(mybitmapDrawable.mutate());
progressDialog.dismiss();
bitmap=null;
}
catch (IOException e)
{
//Show server Error message:
e.printStackTrace();
}
break;
此致 Kariyachan
答案 0 :(得分:5)
您不应该在主线程上执行长时间运行的任务(即通过网络获取图像),因为这会阻止UI重绘。
使用AsyncTask在后台执行长时间运行的任务,同时更新用户界面。
答案 1 :(得分:2)
如果您的WebService类异步下载,则会在show之后立即调用dismiss,因此您的进度对话框会同时显示并消失。
如果您的Webservice类同步下载,则可能导致ANR,并且您的活动可能会被系统杀死。您必须使用AsyncTask
例如
答案 2 :(得分:0)
开始一个新线程
verlauf = ProgressDialog.show(ctx, "Infrarotauslesung", "initialisiere Bluetooth",true,false);
new Thread(){
@Override
public void run(){
Looper.prepare();
}.start();
答案 3 :(得分:0)
我认为ProgressDialog
已经被展示了很短的时间。您应该在使用请求代码Activity
开始CharacterSelector.GetFaceBookImage
之前显示它。