Java “如何修复”;参数';文件';“可能为空”;在制作arrayadapter时?
我想做一个mediaplayer,它总是抛出nullpointerexception。我被困在这里这是我的代码:Java “如何修复”;参数';文件';“可能为空”;在制作arrayadapter时?,java,android-studio,android-mediaplayer,Java,Android Studio,Android Mediaplayer,我想做一个mediaplayer,它总是抛出nullpointerexception。我被困在这里这是我的代码: package MRT.MRT.MRT0012; import android.app.Activity; import android.content.Intent; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.o
package MRT.MRT.MRT0012;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class MainActivity extends Activity {
Handler handler=new Handler();
MediaPlayer mediaPlayer=new MediaPlayer();
ListView listView;
Runnable exit=new Runnable() {
@Override
public void run() {
backdoublepressed=false;
}
};
boolean backdoublepressed=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
listView=findViewById(R.id.list);
File file=new File(Environment.getExternalStorageDirectory()+"/Musics");
File[] files=file.listFiles();
ArrayAdapter<File> adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,files);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
try {
mediaPlayer.setDataSource(listView.getItemAtPosition(position).toString());
mediaPlayer.prepare();
} catch (IOException e) {
e.printStackTrace();
return;
}
mediaPlayer.start();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activitymain_menu,menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public void onBackPressed() {
if(backdoublepressed){
MainActivity.this.finish();
}
else{
backdoublepressed=true;
Toast.makeText(getApplicationContext(),"press back again to exit",Toast.LENGTH_LONG).show();
handler.postDelayed(exit,3000);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case(R.id.exit):{MainActivity.this.finish();break;}
case(R.id.setting):{
Intent intent=new Intent(getApplicationContext(),SettingActivity.class);
startActivity(intent);
}
}
return super.onOptionsItemSelected(item);
}
}
包装MRT.MRT.MRT0012;
导入android.app.Activity;
导入android.content.Intent;
导入android.media.MediaPlayer;
导入android.os.Bundle;
导入android.os.Environment;
导入android.os.Handler;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.Toast;
导入java.io.File;
导入java.io.IOException;
公共类MainActivity扩展了活动{
Handler=newhandler();
MediaPlayer=新的MediaPlayer();
列表视图列表视图;
Runnable exit=new Runnable(){
@凌驾
公开募捐{
backdoublepressed=false;
}
};
布尔值backdoublepressed=false;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
setContentView(R.layout.activity_main);
super.onCreate(savedInstanceState);
listView=findViewById(R.id.list);
File File=新文件(Environment.getExternalStorageDirectory()+“/music”);
File[]files=File.listFiles();
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,文件);
setAdapter(适配器);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
试一试{
setDataSource(listView.getItemAtPosition(position.toString());
mediaPlayer.prepare();
}捕获(IOE异常){
e、 printStackTrace();
回来
}
mediaPlayer.start();
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(右菜单.活动主菜单,菜单);
返回super.onCreateOptions菜单(菜单);
}
@凌驾
public void onBackPressed(){
如果(反按){
MainActivity.this.finish();
}
否则{
backdoublepressed=true;
Toast.makeText(getApplicationContext(),“再次按后退退出”,Toast.LENGTH_LONG.show();
handler.postDelayed(出口,3000);
}
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
开关(item.getItemId()){
案例(R.id.exit):{MainActivity.this.finish();break;}
案例(R.id设置):{
Intent Intent=newintent(getApplicationContext(),setingActivity.class);
星触觉(意向);
}
}
返回super.onOptionsItemSelected(项目);
}
}
异常从使用file.listFiles()声明和初始化files变量开始;我犯了什么错误吗
File file=new File(Environment.getExternalStorageDirectory()+"/Musics");
File[] files=file.listFiles();
ArrayAdapter<File> adapter=new ArrayAdapter<>(this,android.R.layout.simple_list_item_1,files);
listView.setAdapter(adapter);
File File=new文件(Environment.getExternalStorageDirectory()+“/music”);
File[]files=File.listFiles();
ArrayAdapter=新的ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,文件);
setAdapter(适配器);
如果有人能解决这个问题,我将不胜感激。参数“files”可能为null不是错误,而是linter工具发出的警告,可能是Android Studio。你可以随意忽略它
listFiles()
方法的结果可能为空;对于错误情况,例如路径根本不存在,或者如果您的进程没有列出路径内容的权限,情况就是这样。这是糟糕的API设计;RealJava修复了这个问题(java.nio.fileAPI),但我认为android中没有
添加空检查将使警告消失。例如:
if (files == null) files = new File[0]; // treat failure the same as an empty directory.
这是否合适——由您决定。参数“文件”可能为空不是错误,而是linter工具(可能是Android Studio)发出的警告。你可以随意忽略它
listFiles()
方法的结果可能为空;对于错误情况,例如路径根本不存在,或者如果您的进程没有列出路径内容的权限,情况就是这样。这是糟糕的API设计;RealJava修复了这个问题(java.nio.fileAPI),但我认为android中没有
添加空检查将使警告消失。例如:
if (files == null) files = new File[0]; // treat failure the same as an empty directory.
这是否合适–这取决于您的决定。这段代码中的所有内容都没有问题唯一可能的问题是,您的目录中是否有名为Musics的文件夹我想没有这样的文件夹。创建文件夹,一切正常。这段代码中的一切都正常没有问题唯一可能的问题是,您的目录中是否有名为Musics的文件夹我想没有这样的文件夹。创建文件夹,一切正常。如果
files
为空,您应该根据您所描述的内容为其分配一个空文件[]数组。请解释一下好吗?如果files
为空,您应该根据您所描述的内容为其分配一个空文件[]数组。请解释一下好吗?