Предоставление возможности поделиться изображениями сетки - PullRequest
1 голос
/ 10 июля 2020

Я создаю приложение, в котором хочу делиться изображениями на любой социальной платформе. Я успешно использовал сетку. Я хочу добавить функцию социального обмена в приложения, которые получают местоположение изображения и делятся на социальной платформе. Я пробовал этот метод

BitmapDrawable bm = (BitmapDrawable) yourImageView.getDrawable();
Bitmap mysharebmp = bm.getBitmap();
 String path = Images.Media.insertImage(getContentResolver(),
                mysharebmp, "MyImage", null);
Uri uri = Uri.parse(path);
Intent sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("image/png");
sharingIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(sharingIntent,
                "Share image using"));

он дает фатальную ошибку, как я могу поделиться изображением при нажатии из gridView? Я получаю

java .lang.NullPointerException: попытка вызвать виртуальный метод 'android .graphics.drawable.Drawable android .widget.ImageView.getDrawable ()' для ссылки на нулевой объект `` Я получаю эту ошибку

    gridView = (GridView) findViewById(R.id.gridView);
    list = new ArrayList<>();
    adapter = new FoodListAdapter(this, R.layout.food_items, list);
    gridView.setAdapter(adapter);

    // get all data from sqlite
    Cursor cursor = MainActivity.sqLiteHelper.getData("SELECT * FROM FOOD");
    list.clear();
    while (cursor.moveToNext()) {
        int id = cursor.getInt(0);
        String name = cursor.getString(1);
        String price = cursor.getString(2);
        byte[] image = cursor.getBlob(3);

        list.add(new Food(name, price, image, id));
    }
    adapter.notifyDataSetChanged();
    gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                
        }
    });
    @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

    if(requestCode == 888){
        if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
            Intent intent = new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, 888);
        }
        else {
            Toast.makeText(getApplicationContext(), "You don't have permission to access file location!", Toast.LENGTH_SHORT).show();
        }
        return;
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}

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

    if(requestCode == 888 && resultCode == RESULT_OK && data != null){
        Uri uri = data.getData();
        try {
            InputStream inputStream = getContentResolver().openInputStream(uri);
            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            imageViewFood.setImageBitmap(bitmap);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    super.onActivityResult(requestCode, resultCode, data);
}

1 Ответ

0 голосов
/ 11 июля 2020

Вызов startActivity внутри onItemClickListener. Вам нужно будет вставить logi c, который получает местоположение изображения внутри clickListener, прикрепить этот путь как дополнительный к намерению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...