IF变量或Switch语句中的类变量没有变化

时间:2017-03-21 17:01:58

标签: java android variables if-statement

似乎很简单,但我无法让它发挥作用。我有一个公共类字符串变量,应该在if或switch语句中更改。我还没有在声明中声明变量,因此它应该根据范围进行更改,不是吗?但它只能读取" FROM"当我在适用的if语句中更改它时,它确实会更改为" TO"但只有在那个例子中才会恢复到" FROM"。我会将它传递给方法,但是完整的代码更加混乱,我认为不可能这样做。

公共类MainActivity扩展AppCompatActivity实现了View.OnClickListener {

String typeOfText = "FROM";


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantRequest) {

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



}

@Override
public void onClick(View view) {

    if (view.getId() == R.id.faboptions_favorite) {
        Toast.makeText(MainActivity.this, "FROM", Toast.LENGTH_SHORT).show();
        typeOfText = "FROM";
        cameraSource.takePicture(null, new CameraSource.PictureCallback() {
            @Override
            public void onPictureTaken(byte[] bytes) {
                Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                cropPicFile(bmp);
            }
        });
    } else if (view.getId() == R.id.faboptions_textsms) {
        Toast.makeText(MainActivity.this, "TO", Toast.LENGTH_SHORT).show();
        typeOfText = "TO";
        Log.d("VARIABLE","" + typeOfText);
        cameraSource.takePicture(null, new CameraSource.PictureCallback() {
            @Override
            public void onPictureTaken(byte[] bytes) {
                Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                cropPicFile(bmp);
            }
        });
    } else {
        typeOfText = "FROM";
        Toast.makeText(MainActivity.this, "Share", Toast.LENGTH_SHORT).show();

        createDialogSaveInfo();
    }

}

private void createDialogSaveInfo() {
    final Dialog dialog = new Dialog(MainActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog_confirm_address_scan);

    //Establish Dialog Views
    Button submit = (Button) dialog.findViewById(R.id.button_dialog_scanner_submit);
    Button cancel = (Button) dialog.findViewById(R.id.button_dialog_scanner_cancel);
    final EditText fromEditText = (EditText) dialog.findViewById(R.id.editText_dialog_scanner_from);
    final EditText toEditText = (EditText) dialog.findViewById(R.id.editText_dialog_scanner_to);

    //Set text from captured strings in surface view
    fromEditText.setText(fromAddress);
    toEditText.setText(toAddress);

    //Setup listeners
    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //TODO save info to realm

            saveLabelInfoIntoRealm(fromEditText.getText().toString(), toEditText.getText().toString());

            dialog.dismiss();
        }
    });

    cancel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            dialog.dismiss();
        }
    });


    dialog.show();

}

private void saveLabelInfoIntoRealm(final String from, final String to) {

    realm.executeTransaction(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            Package userPackage = realm.createObject(Package.class, 0);
            userPackage.setFromAddress(from);
            userPackage.setToAddress(to);

        }
    });

}

private int getPrimaryKey() {
    try {
        return realm.where(Package.class).max("primaryKey").intValue() + 1;
    } catch (ArrayIndexOutOfBoundsException e) {
        return 0;
    }
}

private void configureListeners() {

    fabOptions.setOnClickListener(this);


}

public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);

    if (path == null) {
        Log.d("TAG", "" + path.toString());
    }

    return Uri.parse(path);
}

private void cropPicFile(Bitmap file) {

    Uri imageToCrop = getImageUri(this, file);
    CropImage.activity(imageToCrop)
            .setGuidelines(CropImageView.Guidelines.ON)
            .start(this);

}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == RESULT_OK) {

            Uri photo = result.getUri();

            readImage(photo);

        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }
}

private void readImage(Uri photo) {
    StringBuilder stringBuilder = new StringBuilder();

    try {
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), photo);
        Frame imageFrame = new Frame.Builder()
                .setBitmap(bitmap)
                .build();

        final SparseArray<TextBlock> items = textRecognizer.detect(imageFrame);


        for (int i = 0; i < items.size(); i++) {
            TextBlock item = items.valueAt(i);
            stringBuilder.append(item.getValue());
            stringBuilder.append("\n");
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
    Log.d("VARIABLE","" + typeOfText);

    if (typeOfText.equals("FROM")) {
        fromAddress = stringBuilder.toString();
    } else if (typeOfText.equals("TO")){
        toAddress = stringBuilder.toString();
    }

}

}

2 个答案:

答案 0 :(得分:0)

代码保持还原的原因是因为DefaultTableModel的调用位于//selectedItemsTable.setModel(t); // get rid of this 中,在调用时会重新创建活动。所以基本上,你得到一个新的对象,readImage()被重新初始化。 onActivityResult()基本上是您之前活动的回调。

答案 1 :(得分:0)

由于未将clicklistener指定给R.id.faboptions_favorite而另一个View

,因此未调用onClick() onCreate中的

添加:

findViewById(R.id.faboptions_favorite).setOnClickListener(this);

和其他观点相同。