如何从 Firebase 获取从一个活动到第二个活动的选定图像



我是安卓开发的新手,我想通过从第一个活动中获取选定的图像来在另一个片段中显示图像,但我收到错误

这是我的网格视图,用户在其中选择图像

@Override
public void onGridImageSelected(Photo photo, int activityNumber) {
Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
FullScreenProductFragment fragment = new FullScreenProductFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
args.putInt(getString(R.string.activity_number), activityNumber);
fragment.setArguments(args);
FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_post_fragment));
transaction.commit();
}

这是所选图像应查看的

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentfullscreenlayout, container, false);
mImageView = view.findViewById(R.id.zoom_image);
Bundle bundle = getActivity().getIntent().getExtras();
UnivarsalImageLoader.setImage(getPhotoFromBundle().getImage_path(),mImageView, null, "");
Log.d(TAG, "onCreateView: getphoto from bundle"+getPhotoFromBundle().getImage_path());
return view;
}
private Photo getPhotoFromBundle(){
Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
Bundle bundle = this.getArguments();
if (bundle != null){
return bundle.getParcelable(getString(R.string.photo));
}else {
return null;
}
}

这是我的日志

java.lang.NullPointerException: Attempt to invoke virtual method  'java.lang.String com.example.alpha.lapid.models.Photo.getImage_path()' on a null object reference
at com.example.alpha.lapid.Utils.FullScreenProductFragment.onCreateView(FullScreenProductFragment.java:56)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.j va:1428)

当我在片段中记录此 getphotobundle 时,我没有得到任何问题,问题出在哪里,请告诉我

05-20 08:52:23.534 668-668/com.example.alpha.lapid 
D/FullScreenProductFragme: getPhotoFragment: argumentdBundle[{}]
Bundle bundle = getActivity().getIntent().getExtras();
Photo photo = getPhotoFromBundle(bundle);
if (photo==null) {
Toast( ... Photo is null ..);
return;
}
String path = photo.getImage_path();
File file = new File(path);
if (!file.exists()) {
Toast( .. file does not exist ..);
return;
}

UnivarsalImageLoader.setImage(file.getAbsolutePath(), mImageView, null, "");

我通过在主要活动中调用它来解决,因为我正在调用片段 如果您尝试获取所选图像的所有照片详细信息,则可以使用此代码,否则您想要单个图像使用我的朋友GreenApps代码

public class Profile_Activity extends AppCompatActivity implements
ProfileFragment.OnGridImageSelectedListner ,
ViewPostFragment.OnCommentThreadSelectedListener,
ViewProfileFragment.OnGridImageSelectedListner,

ViewPostFragment.Ontiemlistner{

private static final String TAG = "ProfileActivity";
@Override
public void ontimlistner(Photo photo) {
Bundle args = new Bundle();
FullScreenProductFragment fragment = new FullScreenProductFragment();
args.putParcelable("large", photo);
fragment.setArguments(args);
FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.full_screen_container, fragment);
transaction.addToBackStack(getString(R.string.fragment_full_screen_product));
transaction.commit();
}
@Override
public void onCommentThreadSelectedListener(Photo photo) {
ViewCommetFragment fragment = new ViewCommetFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
fragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_comments_fragment));
transaction.commit();
}
@Override
public void onGridImageSelected(Photo photo, int activityNumber) {
Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
ViewPostFragment fragment = new ViewPostFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
args.putInt(getString(R.string.activity_number), activityNumber);
fragment.setArguments(args);
FragmentTransaction transaction  = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_post_fragment));
transaction.commit();
}

我在我希望显示该图像的片段中调用了它

public FullScreenProductFragment(){
super();
setArguments(new Bundle());
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable      ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentfullscreenlayout,    container, false);
mImageView = view.findViewById(R.id.zoom_image);
Bundle bundle = this.getArguments();

photo = getPhotoFromBundle();
setProduct();

return view;
}
public Photo getPhotoFromBundle(){
Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
Bundle bundle = this.getArguments();
if (bundle != null){
return bundle.getParcelable("large");
}else {
return null;
}
}

这段代码片段,我在该网格视图上的单击侦听器中添加了该代码

public  interface  Ontiemlistner{
void ontimlistner(Photo photo);
}
Ontiemlistner ontiemlistner;
public ViewPostFragment(){
super();
setArguments(new Bundle());
}

added this code in my gridon item click listener 
Photo = mPhoto;
ontiemlistner.ontimlistner(mPhoto);

相关内容

  • 没有找到相关文章

最新更新