我正在尝试使用目录中的文件创建ListView。我阅读了this教程,但我的应用程序崩溃了..
所以这是LogCat:
03-16 15:46:03.781: D/AndroidRuntime(16689): Shutting down VM
03-16 15:46:03.781: W/dalvikvm(16689): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-16 15:46:03.800: E/AndroidRuntime(16689): FATAL EXCEPTION: main
03-16 15:46:03.800: E/AndroidRuntime(16689): java.lang.NullPointerException
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.AbsListView.obtainView(AbsListView.java:1430)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.ListView.measureHeightOfChildren(ListView.java:1216)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.ListView.onMeasure(ListView.java:1127)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:566)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:381)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.LinearLayout.measureVertical(LinearLayout.java:531)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.LinearLayout.onMeasure(LinearLayout.java:309)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3138)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.widget.FrameLayout.onMeasure(FrameLayout.java:250)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.View.measure(View.java:8313)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.ViewRoot.performTraversals(ViewRoot.java:839)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.os.Handler.dispatchMessage(Handler.java:99)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.os.Looper.loop(Looper.java:123)
03-16 15:46:03.800: E/AndroidRuntime(16689): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-16 15:46:03.800: E/AndroidRuntime(16689): at java.lang.reflect.Method.invokeNative(Native Method)
03-16 15:46:03.800: E/AndroidRuntime(16689): at java.lang.reflect.Method.invoke(Method.java:507)
03-16 15:46:03.800: E/AndroidRuntime(16689): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-16 15:46:03.800: E/AndroidRuntime(16689): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-16 15:46:03.800: E/AndroidRuntime(16689): at dalvik.system.NativeStart.main(Native Method)
这是代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.src.vicnote.MainActivity"
tools:ignore="MergeRootFrame" >
<Button
android:id="@+id/buttonNew"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:text="New" />
<ListView
android:id="@+id/notesList"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/buttonNew" >
</ListView>
</RelativeLayout>
JAVA
public class MainActivity extends ActionBarActivity {
Button newButton;
String path = Environment.getExternalStorageDirectory().toString()+"/VICNote";
File f = new File(path);
File files[] = f.listFiles();
String[] theNamesOfFiles = new String[files.length];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) findViewById(R.id.notesList);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, theNamesOfFiles);
lv.setAdapter(adapter);
newButton = (Button) findViewById(R.id.buttonNew);
newButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent newNote = new Intent(MainActivity.this, NewNoteActivity.class);
startActivity(newNote);
}
});
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
}
如果有人帮助我,我将不胜感激:)
答案 0 :(得分:0)
它的原因是您创建了一个大小为files.length
的数组,其中包含null
个引用。
使用
File files[] = f.listFiles();
String[] theNamesOfFiles = new String[files.length];
您只需创建一个长度为files.length
的新数组,但不要向其中添加元素。因此,当列表尝试创建视图时,它会与NullPointerException
崩溃。
您只需从&lt; String&gt;编辑ArrayAdapter即可到&lt;文件&gt;避免创建新数组,因为ArrayAdapter将使用.toString()
和File.toString()
返回文件路径。
或使用.list()
列出每个文件并创建一个String[]
数组。