Камера возвращает java.lang.NullPointerException.uri - PullRequest
0 голосов
/ 28 сентября 2019

Я создаю приложение OCR для чтения текста.При нажатии на кнопку открывается камера, и я делаю фотографию, когда я получаю сообщение об ошибке

java.lang.NullPointerException.uri

Исключение происходит где-тов этой строке кода

InputStream stream = getContext().getContentResolver().openInputStream(data.getData());

requestCode равен 100, а resultCode равен -1

Ниже приведен полный код, с которым я сейчас работаю.

public class HomeFragment extends Fragment {

    private HomeViewModel homeViewModel;
    private TextRecognizer detector;
    private TextView textView;
    private static final int REQUEST_IMAGE_CAPTURE = 1888;

    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {
        homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
        View root = inflater.inflate(R.layout.fragment_home, container, false);

         textView = (TextView) root.findViewById(R.id.textView);
         detector = new TextRecognizer.Builder(getActivity()).build();
         root.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener(){

             @Override
             public void onClick(View v) {
                 Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                 startActivityForResult(cameraIntent,100);
             }

         });

        return root;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if( requestCode == 100 && resultCode == RESULT_OK){
            try{
                InputStream stream = getContext().getContentResolver().openInputStream(data.getData());
                Bitmap bitmap = BitmapFactory.decodeStream(stream);
                stream.close();
                if(detector.isOperational() && null != bitmap){
                    Frame frame = new Frame.Builder().setBitmap(bitmap).build();
                    SparseArray<TextBlock> textBlocks = detector.detect(frame);
                    StringBuilder sb = new StringBuilder();
                    for( int i = 0; i < textBlocks.size(); ++i){
                        TextBlock tb = textBlocks.get(i);
                        sb.append(tb.getValue());
                    }
                    if(textBlocks.size() == 0){
                        textView.setText("Scan failed.");
                    } else {
                        textView.setText(sb.toString());
                    }
                } else {
                    textView.setText("Invalid Image");
                }
            } catch (Exception e){
                textView.setText(e.toString());
            }
        }
    }
}
...