java.lang.IllegalStateException: при передаче растрового изображения через Intent.createChooser - PullRequest
0 голосов
/ 29 августа 2018

Для этого действия требуется добавить изображение, подпись и QR-код к этому изображению и нарисоватьBitmap с именем mutableBitmap. Я должен поделиться им через все доступные приложения

Произошла ошибка после добавления метода обмена при нажатии кнопки. Код работает нормально, если я комментирую часть ресурса

Ошибка

java.lang.IllegalStateException: Could not execute method for android:onClick
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)
    at android.view.View.performClick(View.java:5215)
    at android.view.View$PerformClick.run(View.java:21196)
    at android.os.Handler.handleCallback(Handler.java:742)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:157)
    at android.app.ActivityThread.main(ActivityThread.java:5613)
    at java.lang.reflect.Method.invoke(Native Method)

Certificate.java

public class Certificate extends AppCompatActivity {

    private ImageView img1,qrcode;
    public Bitmap mutableBitmap;


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

        img1=(ImageView) findViewById(R.id.img1);

        // Getting name saved on Shared Preferance for Certificate

        SharedPreferences prefs = getSharedPreferences("Settings", Activity.MODE_PRIVATE);
        String name = prefs.getString("name","");


        int certificate_height,certificate_width;   // used to position name over signature


        String text="Ravi Ranjan" ; // Whatever you need to encode in the QR code
        MultiFormatWriter multiFormatWriter = new MultiFormatWriter();
        try {
            //QR CODE DEPENDENCY CODE
            BitMatrix bitMatrix = multiFormatWriter.encode(text, BarcodeFormat.QR_CODE,200,200);
            BarcodeEncoder barcodeEncoder = new BarcodeEncoder();
            Bitmap qrcode_bitmap = barcodeEncoder.createBitmap(bitMatrix);


            //Drawing Signature on IMAGE
            Bitmap certificate_bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.certificate);// Load your bitmap here
            certificate_height=certificate_bitmap.getHeight();
            certificate_width=certificate_bitmap.getWidth();
            mutableBitmap = certificate_bitmap.copy(Bitmap.Config.ARGB_8888, true);
            Canvas canvas = new Canvas(mutableBitmap);
            Paint paint = new Paint();
            paint.setColor(Color.BLACK);
            paint.setTextSize(50);
            canvas.drawText(name.toString(), certificate_width-600, certificate_height-350, paint); // Drawing Signature
            canvas.drawBitmap(qrcode_bitmap,250,1100,paint); // Drawing QR CODE
            img1.setImageBitmap(mutableBitmap);
} catch (WriterException e ) {
            e.printStackTrace();
        }
    }
    //method to Share bitmap

    public void share(View view){
        String bitmapPath = MediaStore.Images.Media.insertImage(getContentResolver(), mutableBitmap,"certificate", null);
        Uri bitmapUri = Uri.parse(bitmapPath);
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setType("image/png");
        intent.putExtra(Intent.EXTRA_STREAM, bitmapUri );
        startActivity(Intent.createChooser(intent, "Share"));
    }
}

activity_certificate.xml

<Button
        android:id="@+id/but_share"
        android:layout_width="match_parent"
        android:onClick="share"
        android:layout_height="50dp"
        android:text="Share" />
...