2012-06-30 2 views
0

В моей программе я пытаюсь отобразить изображение из файла с помощью ImageView. Я объявила, что ImageView связан с XML-файлом ImageView и установил значение для изображения из файла с помощью BitmapFactory. В конце концов, я все еще получаю исключение NullPointerException, потому что переменная ImageView по-прежнему остается нулевой. Если у вас есть какие-либо идеи или советы, пожалуйста, дайте мне знать, спасибо!переменная ImageView, возвращающая значение null даже после определения; Android

Вот код, я говорю:

public void imageViewMethod(String file){ 
    Logger log = Logger.getLogger("com.example.myclass"); 

    try { 

    File fileName = new File(root, file); 
    if(fileName.exists()){ 
    String dirFileName = fileName.toString(); 
    Toast.makeText(getApplicationContext(), dirFileName, Toast.LENGTH_LONG).show(); 
    ImageView iv = (ImageView)findViewById(R.id.image); 

    iv.setImageBitmap(BitmapFactory.decodeFile(dirFileName)); 
    super.setContentView(iv); 
    } 
    }catch(Exception e){ 
     Toast.makeText(getApplicationContext(), "Hit Exception", Toast.LENGTH_LONG).show(); 
     log.log(Level.SEVERE, "uncaught exception", e); 
    } 
} 

И соответствующий XML-файл:

<?xml version="1.0" encoding="utf-8"?> 
<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 

android:layout_margin="5dp"> 
</ImageView> 

ответ

0

выглядит вы не установили ContentView в OnCreate вы должны установить ContentView перед тем, как ImageView

public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.correspondingXML); 
+0

Причина, по которой я не установил ContentView в onCreate, состоит в том, что изначально дисплей представляет собой список, содержащий имена файлов. После выбора имени файла он открывает этот метод при попытке отобразить изображение. Возможно, я должен использовать намерения и начать новую деятельность? Есть еще идеи? – chRyNaN

+0

Итак, ваша текущая деятельность имеет список не xml, как в вопросе, как contentview? –

+0

Да, в текущей активности есть адаптер списка для отображения имен файлов. Затем в методе onItemClick я получаю имя файла, которое было нажато, и вызываю 'imageViewMethod (f2);' - с именем файла f2. – chRyNaN

0

Вы правильно установить contentView()? Кажется, вы использовали super.setContentView(iv); в неправильном месте. setContentView(R.layout.imageviewLayout.xml) используется в классе onCreate().

Проверьте, если у вас есть следующий код в классе деятельности:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.imageviewLayout.xml); 

HTH.

0

Вы не можете получить ImageView перед установкой contentview.

0

Если вы хотите изменить расположение в то время как ваша активность запущена, попробуйте использовать LayoutInflater:

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View view = inflater.inflate(R.layout.image_layout, null); 
setContentView(view); 

findViewById(R.id.image) Теперь будет работать.

Смежные вопросы