【问题标题】:ListView crashes appListView 崩溃应用
【发布时间】:2023-03-30 12:48:01
【问题描述】:

试图列出一个目录中的所有文件,该目录只包含音频文件,但是当我在设备上运行应用程序时,应用程序崩溃了,这是主要的 Activity 代码:

public class MainActivity extends AppCompatActivity {

private List<String> myList;
File file;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ListView listView = (ListView) findViewById(R.id.listerX);
    myList = new ArrayList<String>();

    File directory = Environment.getExternalStorageDirectory();
    file = new File( directory + "/myAppCache/" );
    File list[] = file.listFiles();

    for( int i=0; i< list.length; i++)
    {
        myList.add( list[i].getName() );
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, myList);
    listView.setAdapter(adapter); //Set all the file in the list.
}

由于我以前没有尝试过 ListView,这对我来说似乎很陌生,这里的其他问题似乎也没有解决我的问题。 这也是我的 logcat:

> 07-15 13:09:52.067  17443-17443/antivirus.dc.lab.texttospeech E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: antivirus.dc.lab.texttospeech, PID: 17443
    java.lang.RuntimeException: Unable to start activity ComponentInfo{antivirus.dc.lab.texttospeech/antivirus.dc.lab.texttospeech.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: java.lang.NullPointerException: Attempt to get length of null array
            at antivirus.dc.lab.texttospeech.MainActivity.onCreate(MainActivity.java:40)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

任何帮助将不胜感激:)

【问题讨论】:

标签: android listview


【解决方案1】:

因为你的 list [] 是 null 。您无法获得null 的长度。 将代码更改为

File list[] = file.listFiles();
if (list != null)
{
    for( int i=0; i< list.length; i++)
    {
        myList.add( list[i].getName() );
    }
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
          android.R.layout.simple_list_item_1, android.R.id.text1, myList);
    listView.setAdapter(adapter);
}

【讨论】:

  • 感谢您的回答,但不是因为这个。我在一个新项目中测试了代码,所以忘记添加
【解决方案2】:

您收到 NullPointerException 错误,因为您的列表未正确初始化并且它总是返回 null 。

首先您需要以正确的方式对其进行初始化,以便您可以阅读它。

Hadi Mohammadi 的回答不完整。通过这种方式,它可以防止你得到 NullPointerException 错误,但它仍然是 null 所以你需要关注它。

【讨论】:

    猜你喜欢
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多