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