Java 片段中的字节数组参数为null
我是android新手,我对viewpager、activity和fragment做了一些研究,但我的问题是在我拍摄了照片之后,图像没有显示在布局中 以下是我拍摄照片的代码:Java 片段中的字节数组参数为null,java,android,android-fragments,Java,Android,Android Fragments,我是android新手,我对viewpager、activity和fragment做了一些研究,但我的问题是在我拍摄了照片之后,图像没有显示在布局中 以下是我拍摄照片的代码: public class MainStepView extends AppCompatActivity { private StepperIndicator indicator; private FloatingActionButton fabCapture; @Override protected void onC
public class MainStepView extends AppCompatActivity {
private StepperIndicator indicator;
private FloatingActionButton fabCapture;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.stepview_main);
setTitle("New Customer");
indicator = (StepperIndicator) findViewById(R.id.stepper_indicator);
fabCapture = (FloatingActionButton) findViewById(R.id.fabCamera);
final ViewPager pager = findViewById(R.id.viewPager);
pager.setAdapter(new PagerAdapter(getSupportFragmentManager()));
indicator.setViewPager(pager, true);
indicator.addOnStepClickListener(new StepperIndicator.OnStepClickListener() {
@Override
public void onStepClicked(int step) {
pager.setCurrentItem(step, true);
}
});
fabCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, indicator.getCurrentStep());
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(resultCode == Activity.RESULT_OK){
if(requestCode == 3){
Bundle bundle = data.getExtras();
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
final Bitmap bmp = (Bitmap) bundle.get("data");
bmp.compress(Bitmap.CompressFormat.PNG, 100, bStream);
byte[] byteArray = bStream.toByteArray();
ClientIdFragment fragment = new ClientIdFragment();
bundle.putByteArray("image", byteArray);
fragment.setArguments(bundle);
}
}
}
}
下面是显示图像的代码
public class ClientIdFragment extends Fragment {
ImageView ivClientId;
FloatingActionButton fabCapture;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.stepview_client_id, container, false);
Bitmap bmp;
ivClientId = (ImageView) v.findViewById(R.id.ivClientId);
fabCapture = (FloatingActionButton) v.findViewById(R.id.fabCamera);
byte[] byteArray = null;
if (byteArray != null && byteArray.length > 0){
byteArray = getActivity().getIntent().getByteArrayExtra("image");
bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ivClientId.setImageBitmap(bmp);
}
return v;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState){
super.onViewCreated(view, savedInstanceState);
ivClientId = (ImageView) view.findViewById(R.id.ivClientId);
}
}
这里是我显示不同布局的地方:
public class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position){
case 0: return new ClientInfoFragment();
case 1: return new ClientAddressFragment();
case 2: return new ClientOtherFragment();
case 3: return new ClientIdFragment();
case 4: return new ClientSelfieFragment();
case 5: return new ClientWithIdFragment();
case 6: return new ClientSignatureFragment();
default : return new ClientSummaryFragment();
}
}
@Override
public int getCount() {
return 9;
}
}
以下是我的场景:在我拍摄照片之前,我使用stepperindicator使用viewpager调用了7个布局。我进入将显示图像的布局并启动fab,然后在我拍摄照片之后,图像未显示在布局中
注意:图像已保存在库中。感谢您的回答您正在从活动的意图参数中读取字节数组: byteArray=getActivity.getIntent.getByteArrayExtraimage; 但它存储在片段的参数中。你应该做: byteArray=getArguments.getByteArrayimage; 此外,您仅在始终为false的条件中检索它: 字节[]byteArray=null; 如果是byteArray!=null&&byteArray.length>0{ byteArray总是为null,因为您只是将它设置为null。您可能想在读取它之后检查它 整个街区可能是: 字节[]byteArray=getArguments.getByteArrayimage; 如果byteArray!=null&&byteArray.length>0{ bmp=BitmapFactory.decodebytearraybybybybytybarray,0,byteArray.length; ivClientId.setImageBitmapbmp; }
最后但并非最不重要的一点是,您在没有添加的情况下丢弃了片段,然后在PagerAdapter中创建了另一个没有参数的片段。您需要在该实例上设置参数。图像没有显示在布局中。可能我的PagerAdapter中有问题?我刚刚注意到另一个错误,更新了答案-希望能够修复它。当它尝试该代码时,表示尝试调用虚拟方法的字节[]android.os.Bundle.getByteArrayjava.lang.String'在一个空对象引用上你能显示你的实际代码吗?你粘贴的代码显然不是它,因为你从来没有添加ClientIdFragment,所以无法调用它。实际上它是我的实际代码,在我到达步骤3之前。我得到了错误