1

Я делаю приложение для Android, в котором я должен выбрать изображение из галереи, нажав кнопку, а затем отобразите его в другом действии с двумя текстовыми полями, проблема в i я в состоянии открыть галерею и выбрать изображение из него, но я не в состоянии отображать изображения в другой деятельности ... вот мой код ... PictureOptions.javaВыберите изображение из галереи и покажите это в другой деятельности

public void buttonGalleryOpen(View view) 
{ 
    Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(intent, RESULT_LOAD_IMAGE); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Bitmap selectedphoto = null; 

    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) { 

     Uri selectedImage = data.getData(); 
     String [] filePathColumn = {MediaStore.Images.Media.DATA}; 
     Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String filePath = cursor.getString(columnIndex); 
     selectedphoto = BitmapFactory.decodeFile(filePath); 
     cursor.close(); 
     Intent intent = new Intent(PictureOptions.this,ShowImage.class); 
     intent.putExtra("data", selectedphoto); 
     startActivity(intent); 
    } 

PictureOptions.xml

<Button 
    android:id="@+id/buttonGalleryOpen" 
    android:layout_width="fill_parent" 
    android:layout_height="66dp" 
    android:layout_weight="0.34" 
    android:onClick="buttonGalleryOpen" 
    android:text="@string/button_gallery_open" /> 

ShowImage.java

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_show_image); 
    ImageView imageview = (ImageView)findViewById(R.id.ImageShow); 
    Bitmap selectedphoto =(Bitmap)this.getIntent().getParcelableExtra("data"); 
    imageview.setImageBitmap(selectedphoto); 
} 

ShowImage.xml

<ImageView 
    android:id="@+id/ImageShow" 
    android:layout_width="200dp" 
    android:layout_height="200dp" /> 

Все вещи работают отлично и второй активности (ShowImage) также открытие за исключением того, что нет iamge не displying .... не знаю почему ..? HELP

ответ

1

Этой линии в коде не имеет смысла:

intent.putExtra("data", "selectedphoto"); 

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

Вместо передачи растрового изображения в действие ShowImage, передайте свой URI, а затем извлеките фактическое растровое изображение в действии ShowImage точно так же, как и сейчас, в своей активности PictureOptions.

intent.setData(uri); 

В вашей ShowImage деятельности сделать:

URI imageUri = getIntent().getData(); 
+0

Я отредактировал его, но он пока не показывает изображение и перенаправляется на первую активность ... помогите мне – Ravi

+0

Посмотрите на журналы, возможно, изображение слишком велико - есть предел в том, насколько большой может быть посылка. Я настоятельно рекомендую вам передать только URI вашей активности ShowImage. – Okas

+0

Я не знаю, как пройти URI .... помогите мне с этим – Ravi

0

У меня есть опечатка в intent.putExtra("data", "selectedphoto");, вы передаете строку, а не растровое изображение. Измените его в

Intent intent = new Intent(PictureOptions.this,ShowImage.class); 
intent.putExtra("data", selectedphoto); 
startActivity(intent); 

удаление кавычки из selectedphoto

+0

я сделал изменения, но теперь вторая активность даже не открывая ... он перенаправляется на первое занятие ... почему? – Ravi

+0

uhm делает логарифм что-то сказать? – Blackbelt

+0

это говорит ... НЕПРАВИЛЬНАЯ ОПЕРАЦИЯ С ДВОЙНЫМИ! Метка: Java Binder – Ravi

0
private void selectImage() { 
    final CharSequence[] items = { "Photo Library", "Camera", "Cancel" }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle("Select"); 
    Utils.hideSoftKeyboard(getActivity()); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Camera")) { 

        // camera intent 

      } else if (items[item].equals("Photo Library")) { 

        Intent intent = new Intent(
          Intent.ACTION_PICK, 
          android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
        intent.setType("image/*"); 
        startActivityForResult(
          Intent.createChooser(intent, "Select File"), 
          SELECT_FILE); 

      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 



@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (resultCode == RESULT_OK) { 

      if (requestCode == SELECT_FILE) { 
      Uri selectedImageUri = data.getData(); 

      String tempPath = getPath(selectedImageUri, getActivity()); 

      BitmapFactory.Options btmapOptions = new BitmapFactory.Options(); 
      bitmap = BitmapFactory.decodeFile(tempPath, btmapOptions); 
      resized = Bitmap.createScaledBitmap(bitmap, 
        (int) (bitmap.getWidth() * 0.8), 
        (int) (bitmap.getHeight() * 0.8), true); 

      profileEditImageView.setImageBitmap(resized); 

    } 
    } 
    } 


public String getPath(Uri uri, Activity activity) { 
    String[] projection = { MediaColumns.DATA }; 
    @SuppressWarnings("deprecation") 
    Cursor cursor = activity 
      .managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
}