1

实际上它正在改变,但变成了空白!更改ImageView源不会正确更改ImageView的图像

在我的应用程序中,我将从数据库获取我的Images-Path并在主要活动中显示它们。该过程通过在DialogFragment中选择图像的缩略图并使用用于在片段活动之间进行通信的接口将其Record ID发送到主Activity来实现。 在这一点上,我打算使用Asynctask内部类来获取选定图像的FilePath并将其显示给ImageView。

各种各样的作品完美除了ImageView没有正确显示它,它只是显示空白!

P.S .: FilePath是正确的,我用它在onActivityResult上的一些地方在应用程序。

谢谢。

主要活动代码:

public class AnnotateDiagramActivity extends Activity implements Communicator { 

@Override 
    public void respond(String data , int requestCode) { 
     //Passing Project ID from CPDialogFragment or PLDialogFragment 


     switch(requestCode) { 

     case OPEN_PROJECTID: 
      PROJECTID = Integer.valueOf(data); 
      loadProject(PROJECTID); 
      ToastShort(data); 
      break; 
     default: 
      break; 

    } 


} 

    public class loadMainImage extends AsyncTask<Project,Integer,String> 
{ 

    @Override 
    protected String doInBackground(Project... params) { 


     return project.GetFilePath(); 
    } 

    protected void onPostExecute(String result) { 
    //here is my main issue: 

     fragmentView.setImageBitmap(new ImageDecoder().decodeFile(new File(project.GetFilePath()))); 

     fragmentView.postInvalidate(); 
    } 

} 

public void loadProject(int ID) 
{ 
    project = new Project(); 
    project= expertDbHelper.getProject(ID); 
    SharedPreferences openedProject = getSharedPreferences("openedProject", 0); 
    SharedPreferences.Editor projectEditor = openedProject.edit(); 
    projectEditor.putInt("id",project.GetID()); 
    projectEditor.putString("filePath",project.GetFilePath()); 
    projectEditor.commit(); 

    new loadMainImage().execute(project); 
} 

} 

编辑用于验证在返回图片来自文件路径:

protected void onPostExecute(String result) { 
     ImageDecoder imageDecoder = new ImageDecoder(); 
     Bitmap bmp = null; 
     File file =new File(result); 
     if(file.isFile()) { 
      bmp=imageDecoder.decodeFile(file,500); 
      fragmentView.setImageBitmap(bmp); 
      fragmentView.postInvalidate(); 
     } 
     else 
     { Log.e("Async Task Is File: " ,String.valueOf(file.isFile()));} 

    } 
+0

你验证过“new ImageDecoder()。decodeFile(new File(project.GetFilePath()))”返回一个图像吗? – 2015-04-05 07:47:09

+0

我在很多地方使用这行代码来获取图像,但请让我再次检查 – Adnan 2015-04-05 08:30:58

+0

@DavidJhones我通过更改OnPostExecute来检查此: – Adnan 2015-04-05 10:12:20

回答

0

我发现我的图像不正确设置一些标准,由于该计算从以前加载的图像,所以我检查我的代码,并找到(布局布尔参数)在我的代码需要重置。

protected void onPostExecute(String result) { 

     ImageDecoder imageDecoder = new ImageDecoder(); 
     Bitmap bmp = null; 
     File file =new File(result); 
     Log.e("Async Task Result: " ,result); 
     if(file.isFile()) { 
      bmp=imageDecoder.decodeFile(file,500); 
      fragmentView.reset(); 
      fragmentView.recycle(); 
      fragmentView.layout= false; 
      fragmentView.setImageBitmap(bmp); 
     } 
     else 
     { 
      Log.e("Async Task Is File: " ,String.valueOf(file.isFile())); 
     } 

    } 
+0

@DavidJhones和感谢你没有你的帮助上帝知道我什么时候能够解决我的问题 – Adnan 2015-04-05 15:50:03