2013-05-24 3 views
0

Привет всем, кто пытается отобразить все файлы в определенной папке на SD-карте устройства Android в ListView, и до сих пор им не повезло, он сбой с исключением nullpointer, поэтому i было интересно, может ли кто-нибудь здесь осветить какую-нибудь облегченную ситуацию на моей почтенной почве моей деятельности и ломать ниже и спасибо.Исключение ошибки нулевого указателя для Android.

активность

package com.mkyong.android; 

import java.io.File; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.view.View; 

public class ListMobileActivity extends ListActivity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.res); 

    } 
     public ArrayList<String> GetFiles(String DirectoryPath) { 
      ArrayList<String> MyFiles = new ArrayList<String>(); 
      File f = new File(DirectoryPath); 

      f.mkdirs(); 
      File[] files = f.listFiles(); 
      if (files.length == 0) 
       return null; 
      else { 
       for (int i=0; i<files.length; i++) 
        MyFiles.add(files[i].getName()); 
      } 

      return MyFiles; 
     } 
     { 
     ListView lv; 
     ArrayList<String> FilesInFolder = GetFiles("/sdcard/RootBox"); 
     lv = (ListView)findViewById(R.id.listView1); 

     lv.setAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, FilesInFolder)); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 

      } 
     }); 
    } 




    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 

     //get selected items 
     String selectedValue = (String) getListAdapter().getItem(position); 
     Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show(); 

    } 

} 

и LogCat

05-24 06:42:28.992: E/AndroidRuntime(796): FATAL EXCEPTION: main 
05-24 06:42:28.992: E/AndroidRuntime(796): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mkyong.android/com.mkyong.android.ListMobileActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 
05-24 06:42:28.992: E/AndroidRuntime(796): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
05-24 06:42:28.992: E/AndroidRuntime(796): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
05-24 06:42:28.992: E/AndroidRuntime(796): at android.app.ActivityThread.access$600(ActivityThread.java:141) 
05-24 06:42:28.992: E/AndroidRuntime(796): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
05-24 06:42:28.992: E/AndroidRuntime(796): at android.os.Handler.dispatchMessage(Handler.java:99) 
+0

, какая линия, дающую исключение? – Nermeen

+0

, на котором линия падает? – Shrikant

+0

плохо просто получить другие строки журнала – user2416330

ответ

0

как в журнале:

ListMobileActivity}: java.lang.RuntimeException: Ваше содержание должно есть ListView, чей идентификатор атрибута 'android.R.id.list'

вам вам нужно будет установить идентификатор ListView в xml в 'android.R.id.list', если вы расширяете ListActivity для создания ListView. сделать это как res расположение:

<ListView android:id="@id/android:list" <!--set ListView id to android.R.id.list--> 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:drawSelectorOnTop="false" 
     android:scrollbars="vertical"/> 

и в коде инициализации экземпляра ListView как:

lv = (ListView)findViewById(android.R.id.list); 

ИЛИ

lv =ListMobileActivity.this.getListView(); 
+0

im my res xml or .. – user2416330

+0

@ user2416330: yes in res layout xml –

+0

ok попробуйте сейчас надеяться, что это сработает – user2416330

1

Если вы попросили разрешения в андроида манифеста для чтения памяти, то это может быть проблемой.

По-видимому, из кода вы запрашиваете экземпляр списка в блоке экземпляра. Это может быть вызвано до вызова setContentView. Вы должны создать экземпляр компонента пользовательского интерфейса в XML после того, как макет будет завышен, иначе вы столкнетесь с исключением.

Попробуйте это.

public class ListMobileActivity extends ListActivity { 

    ListView lv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.res); 

     ArrayList<String> FilesInFolder = GetFiles("/sdcard/RootBox"); 
     lv = (ListView) findViewById(R.id.listView1); 

     lv.setAdapter(new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, FilesInFolder)); 

     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View v, 
        int position, long id) { 

      } 
     }); 
    } 

    public ArrayList<String> GetFiles(String DirectoryPath) { 
     ArrayList<String> MyFiles = new ArrayList<String>(); 
     File f = new File(DirectoryPath); 

     f.mkdirs(); 
     File[] files = f.listFiles(); 
     if (files.length == 0) 
      return null; 
     else { 
      for (int i = 0; i < files.length; i++) 
       MyFiles.add(files[i].getName()); 
     } 

     return MyFiles; 
    } 

} 

Должно работать.

0

Попробуйте:

package com.mkyong.android; 

import java.io.File; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import android.view.View; 

public class ListMobileActivity extends ListActivity { 

    ListView lv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.res); 

     ArrayList<String> FilesInFolder = GetFiles("/sdcard/RootBox"); 

     setListAdapter(new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, FilesInFolder)); 
    } 

    public ArrayList<String> GetFiles(String DirectoryPath) { 
     ArrayList<String> MyFiles = new ArrayList<String>(); 
     File f = new File(DirectoryPath); 

     f.mkdirs(); 
     File[] files = f.listFiles(); 
     if (files.length == 0) 
      return null; 
     else { 
      for (int i=0; i<files.length; i++){ 
       MyFiles.add(files[i].getName()); 
      } 
     } 

     return MyFiles; 
    }  

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 

     //get selected items 
     String selectedValue = (String) getListAdapter().getItem(position); 
     Toast.makeText(this, selectedValue, Toast.LENGTH_SHORT).show(); 

    } 

} 
+0

Вам также нужно будет сделать, как @ ρяσѕρєяK сказал относительно вашего списка. –

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