更改 ImageView 源不会正确更改 ImageView 的图像
Changing ImageView Source Does not Change Properly Image of ImageView
其实它正在变化,但变成了空白!
在我的应用程序中,我将从数据库中获取我的图像路径并在主 activity 中显示它们。这个过程是通过在 DialogFragment 中选择图像的缩略图并将它们的记录 ID 发送到主 Activity 以及用于在 Fragment-Activity 之间进行通信的接口来实现的。
在这一点上,我将使用 Asynctask 内部 class 来获取所选图像的文件路径并将其显示到 ImageView。
一切正常,除了 ImageView 没有正确显示它,它只是显示空白!
P.S.: FilePath 是正确的,我在 onActivityResult 中的某个地方使用了它。
谢谢。
主要Activity代码:
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()));}
}
我发现由于根据之前加载的图像计算出的一些标准,我的图像设置不正确,所以我检查了我的代码并在我的代码中找到需要重置的(布局布尔参数)。
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()));
}
}
其实它正在变化,但变成了空白!
在我的应用程序中,我将从数据库中获取我的图像路径并在主 activity 中显示它们。这个过程是通过在 DialogFragment 中选择图像的缩略图并将它们的记录 ID 发送到主 Activity 以及用于在 Fragment-Activity 之间进行通信的接口来实现的。 在这一点上,我将使用 Asynctask 内部 class 来获取所选图像的文件路径并将其显示到 ImageView。
一切正常,除了 ImageView 没有正确显示它,它只是显示空白!
P.S.: FilePath 是正确的,我在 onActivityResult 中的某个地方使用了它。
谢谢。
主要Activity代码:
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()));}
}
我发现由于根据之前加载的图像计算出的一些标准,我的图像设置不正确,所以我检查了我的代码并在我的代码中找到需要重置的(布局布尔参数)。
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()));
}
}