关于安卓7.0及以上的拍照问题

zkw261123 2017-10-12 05:59:46
我想实现一个功能:宿主Activity拍照后裁剪,裁剪的图片保存到外置存储中,然后将裁剪后的图片通过接口回调的方式传给fragment,fragment显示该图片。
以下是我的代码:
MainActivity.java

public class MainActivity extends BaseActivity implements SetMyInfoAvatar{

... ...

private static final int REQ_CAMERA = 0x01;
private static final int REQ_CUT = 0x04;
private File picName;
private File cropPicName;

... ...

@Override
public Bitmap getAvatar(){
//拍照,并通过onActivityResult函数调用裁剪图片的方法
applyPermissionForCamera();
//返回裁剪完成后图片的Bitmap对象
return BitmapFactory.decodeFile(cropPicName.getAbsolutePath());
//这句话报NullPointerException异常
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == RESULT_OK)
{
switch (requestCode){
case REQ_CAMERA:
//拍照完成,开始裁剪
cropPic(picName);
//裁剪完成,保存在cropPicName中
break;
case REQ_CUT:
break;
}
}
}
}


SetMyInfoAvatar.java

public interface SetMyInfoAvatar {
public Bitmap getAvatar();
}


MyFragment.java

public class MyFragment extends Fragment{

private SetMyInfoAvatar setAvatar;

... ...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.layout_myinfofragment,container,false);
ImageView mAvatar = view.findViewById(R.id.Avatar);
mAvatar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mAvatar.setImageBitmap(setAvatar.getAvatar());
}
});
return view;
}

@Override
public void onAttach(Context context){
super.onAttach(context);
setAvatar = (SetMyInfoAvatar)((Activity)context);
}

... ...

}


感觉我的代码没什么问题,图片也确实保存到了外部存储而且可以打开来看,但是在实现接口的函数中,return语句报了空指针的异常,怎么回事...
...全文
406 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zkw261123 2017-10-16
  • 打赏
  • 举报
回复
引用 2 楼 jklwan 的回复:
裁剪后的图片有吗,报错日志是什么,空指针问题自己debug。而且你好像写反了,Activity向fragment传值,应该是fragment实现接口,Activity调用fragment的接口。按照你的写法,点击fragment的view获取图片,如果此时Activity还没数据的话肯定是空。正常的逻辑应该是Activity拍照完成,调用fragment的方法。

public interface SetMyInfoAvatar {
    public void setAvatar(Bitmap bitmap);
}
fragment在setAvatar中设置图片。 ps:在fragment中的拍照和裁剪就行了,不必使用Activity的方法再传递到fragment中,多此一举吧。
已解决,谢谢!!!
liaocc114 2017-10-14
  • 打赏
  • 举报
回复
换一个版本是7.0以上的手机试试就知道了
jklwan 2017-10-13
  • 打赏
  • 举报
回复
裁剪后的图片有吗,报错日志是什么,空指针问题自己debug。而且你好像写反了,Activity向fragment传值,应该是fragment实现接口,Activity调用fragment的接口。按照你的写法,点击fragment的view获取图片,如果此时Activity还没数据的话肯定是空。正常的逻辑应该是Activity拍照完成,调用fragment的方法。

public interface SetMyInfoAvatar {
    public void setAvatar(Bitmap bitmap);
}
fragment在setAvatar中设置图片。 ps:在fragment中的拍照和裁剪就行了,不必使用Activity的方法再传递到fragment中,多此一举吧。
AndroidDev2022 2017-10-12
  • 打赏
  • 举报
回复
请先确认是否与Android版本有关,换低版本手机试试

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧