Изменить изображение в ImageButton

В активности для введения данных игрока я вставила ImageButton для аватара. Написала код для получения новой картинки с камеры или галереи и установки на место программной. Галерея и камера открываются, картинки я, вроде бы, сохраняю в виде файла, но в устройстве они не вставляются на место аватара. Остаётся тёмный прямоугольник вместо картинки и я не могу после этого вставлять данные пароля и т.п., т.е. активность перестаёт работать. В манифесте есть нужные разрешения и configChanges="orientation/screenSize". В основной активности я объявила строковое значение для аватара. Причём, я достала весь код, который касается ImageButton, из данного кода и вставила в отдельную программу и всё прекрасно работает, картинки вставляются. Может быть, когда ImageButton в сложной активности, нужно было сделать что-то ещё? Помогите, пожалуйста. Я пыталась вставить сюда свой код, но не получилось почему-то. Мой код частично:

public class QuizSettingsActivity extends QuizActivity {
 //Oбъявить уникальные идентификаторы
//Для диалогов
static final int DATE_DIALOG_ID = 0;
static final int PASSWORD_DIALOG_ID = 1;

     //два кода запроса для изображений на аватаре.   
static final int TAKE_AVATAR_CAMERA_REQUEST = 1;.  
static final int TAKE_AVATAR_GALLERY_REQUEST = 2;.  
protected static final String DEBUG_TAG = null;.  
TextView tvDate;. 
ImageButton avatarButton;   
      //объявить переменную-член,  представляющую экземпляр
//класса SharedPreferences.  
 SharedPreferences mGameSettings;.  
    


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.settings);
    
    tvDate=(TextView) findViewById(R.id.TVDR);
    
  //Адрес для обращения к картинке для аватара
    Uri path = Uri.parse(
            "android.resource://az.triviaquiz/drawable/avatar");
  //Инициализируем ImageButton  для аватара
    avatarButton=(ImageButton)findViewById(R.id.bAvatar);
    //Вставляем картинку в аватар
    avatarButton.setImageURI(path);
  //Создаём слушатель нажатия
    avatarButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        // TODO: Launch the Camera and Save the Photo as the Avatar
        //Запуск интента ACTION_IMAGE_CAPTURE для добавления
        //в приложение возможности съёмки фотографий и возвращения снимка
        Intent pictureIntent = new Intent(
        android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(pictureIntent,
                TAKE_AVATAR_CAMERA_REQUEST);
        }
        });
  //Создаём слушатель для длительного нажатия
    avatarButton.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
        // TODO: Launch Image Picker and Save Image as Avatar
        //Cоздаём интент для отображения пользователю всех изображений из галереи,
            //позволяя выбрать одно из них
            Intent pickPhoto = new Intent(Intent.ACTION_PICK);
            pickPhoto.setType("image/*");
            startActivityForResult(pickPhoto, TAKE_AVATAR_GALLERY_REQUEST);
        return false;
        }
        });.   

    ...

         
      //Для обработки результатов,возвращаемых деятельностью,
//необходимо реализовать метод onActivityResult().  
protected void onActivityResult(int requestCode,int resultCode,Intent data) {.  
        switch(requestCode) {.  
        //Изготовление фотографии с помощью камеры.  
        case TAKE_AVATAR_CAMERA_REQUEST:.  
        if (resultCode == Activity.RESULT_CANCELED) {.  
        //Режим камеры был отменён???   
        } else if (resultCode == Activity.RESULT_OK) {.  
            //Обработка выбранного изображения.  
            //Получаем растровое изображение, обратившись.  
            //к параметру типа intent с именем data.   
            Bitmap cameraPic = (Bitmap) data.getExtras().get("data");.  
            //передать полученное растровое.  
            //изображение во вспомогательный метод saveAvatar().  
            saveAvatar(cameraPic);.      
        }.  
        break;.   
        //Выбор фотографии в галерее.  
        case TAKE_AVATAR_GALLERY_REQUEST:.   
        if (resultCode == Activity.RESULT_CANCELED) {.   
        // Выбор аватара в галерее был отменён.              
        } else if (resultCode == Activity.RESULT_OK) {.   
        // Обработка выбранного изображения.   
            // Получаем адрес URI для выбранного изображения,.  
            //обратившись к параметру типа Intent с именем data, как показано в следующем коде:.  
            Uri photoUri = data.getData();.  
            //Чтобы преобразовать адрес типа Url в соответствующий
            //экземпляр класса Bitmap, вы можете использовать, следующий метод:.  
            Bitmap galleryPic = null;.   
            try {.   
                galleryPic = Media.getBitmap(getContentResolver(), photoUri);.  
            } catch (FileNotFoundException e) {.  
                // TODO Auto-generated catch block.   
                e.printStackTrace();.   
            } catch (IOException e) {.   
                // TODO Auto-generated catch block.   
                e.printStackTrace();.   
            }.    
            //передать полученное растровое.   
            //изображение в ваш вспомогательный метод saveAvatar().   
            saveAvatar(galleryPic);        
        }
        break;.   
        }
        }


       //Вспомогательный метод с именем saveAvatar(). Этот метод
//будет принимать растровое изображение и
//сохранять его в виде локального файла.   
private void saveAvatar(Bitmap avatar) {.      
    // TODO:Save the Bitmap as a local file called avatar.jpg.   
    //чтобы сохранить аватар в виде JPG-файла,
    //принадлежащего данному приложению, можно использовать
    //следующий код:.   
    String strAvatarFilename = "avatar.jpg";.   
        //Сжимаем изображение в нужный формат.   
        try {.   
            avatar.compress(CompressFormat.JPEG,
            100, openFileOutput(strAvatarFilename, MODE_PRIVATE));.   
        } catch (FileNotFoundException e) {.   
            // TODO Auto-generated catch block.   
            e.printStackTrace();.   
            System.out.print("У нас проблема");.    
        }.   
      
// TODO:Determine the Uri to the local avatar.jpg file.       
//определить адрес URI файла, используя метод fromFile() класса Uri.       
    Uri imageUri = Uri.fromFile(new File(getFilesDir(),
            strAvatarFilename));.   
    //Преобразуем путь в строку.   
            String strPath=imageUri.toString();    
    
    //Обновить содержимое элемента ImageButton
    avatarButton.setImageURI(Uri.parse(strPath));
}
        
    

Ответы (0 шт):