【发布时间】:2022-02-08 18:23:23
【问题描述】:
清单:-
MainActivity.java
public class MainActivity extends AppCompatActivity {
ListView listView;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listview);
runtimePermission();
}
public void runtimePermission(){
Dexter.withContext(this).withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
displaySongs();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
}
public ArrayList<File> findSongs(File file){
ArrayList<File> arrayList = new ArrayList<>();
File[] files = file.listFiles();
for (File singlefile : files){
if (singlefile.isDirectory() && !singlefile.isHidden()) {
arrayList.addAll(findSongs(singlefile));
} else {
if (singlefile.getName().endsWith(".mp3") || singlefile.getName().endsWith(".wav")){
arrayList.add(singlefile);
}
}
}
return arrayList;
}
public void displaySongs(){
final ArrayList<File> mysongs = findSongs(Environment.getExternalStorageDirectory());
items = new String[mysongs.size()];
for (int i = 0; i < mysongs.size(); i++) {
items[i] = mysongs.get(i).getName().replace(".mp3", "").replace(".wav", "");
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items );
listView.setAdapter(adapter);
}
}
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="10.0sp"
android:padding="8dp" />
</RelativeLayout>
Logcat :-
2022-02-08 14:56:52.834 9348-9348/com.example.mymusic E/AndroidRuntime: 致命异常: main 进程:com.example.mymusic,PID:9348 java.lang.RuntimeException: 传递结果 ResultInfo{who=@android:requestPermissions:, request=42, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} 失败活动 {com.example.mymusic/com.karumi.dexter.DexterActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' 在 android.app.ActivityThread.deliverResults(ActivityThread.java:4977) 在 android.app.ActivityThread.handleSendResult(ActivityThread.java:5018) 在 android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51) 在 android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在 android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:2073) 在 android.os.Handler.dispatchMessage(Handler.java:107) 在 android.os.Looper.loop(Looper.java:225) 在 android.app.ActivityThread.main(ActivityThread.java:7563) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:994) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' 在 com.example.mymusic.MainActivity.displaySongs(MainActivity.java:79) 在 com.example.mymusic.MainActivity$1.onPermissionGranted(MainActivity.java:39) 在 com.karumi.dexter.MultiplePermissionsListenerToPermissionListenerAdapter.onPermissionsChecked(未知来源:35) 在 com.karumi.dexter.MultiplePermissionListenerThreadDecorator$1.run(未知来源:8) 在 com.karumi.dexter.MainThread.execute(未知来源:6) 在 com.karumi.dexter.MultiplePermissionListenerThreadDecorator.onPermissionsChecked(未知来源:7) 在 com.karumi.dexter.DexterInstance.onPermissionsChecked(未知来源:56) 在 com.karumi.dexter.DexterInstance.updatePermissionsAsGranted(未知来源:26) 在 com.karumi.dexter.DexterInstance.onPermissionRequestGranted(未知来源:0) 在 com.karumi.dexter.Dexter.onPermissionsRequested(未知来源:4) 在 com.karumi.dexter.DexterActivity.onRequestPermissionsResult(未知来源:51) 在 android.app.Activity.dispatchRequestPermissionsResult(Activity.java:8408) 在 android.app.Activity.dispatchActivityResult(Activity.java:8253)
【问题讨论】:
-
删除标签
android-studio。该标签用于与 Android Studio 产品相关的问题/问题。您的问题是一个通用的 Android 问题。 -
MainActivity中的变量listView从未初始化。调用listView.setAdapter(adapter);会产生NullPointerException。
标签: java android android-storage