Java 片段中的字节数组参数为null

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

我是android新手,我对viewpager、activity和fragment做了一些研究,但我的问题是在我拍摄了照片之后,图像没有显示在布局中

以下是我拍摄照片的代码:

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之前。我得到了错误