如何在制作数组适配器时修复 "argument 'files' might be null"?
how to fix "argument 'files' might be null" while making an arrayadapter?
我想制作一个媒体播放器,它总是抛出 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.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);
}
}
异常从使用 file.listFiles() 声明和初始化文件变量开始;我犯了什么错误吗?
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);
如果有人能解决这个问题,我将不胜感激。
argument 'files' might be null 不是错误,它是由 linter 工具发出的警告,大概是 Android Studio。你可以忽略它。
listFiles()
方法的结果可能为空;这是错误情况的情况,例如路径根本不存在,或者您的进程无权列出其内容。这是糟糕的 API 设计;真正的 java 修复了这个问题(java.nio.file API),但我认为 android.
中没有
添加空检查将使警告消失。例如:
if (files == null) files = new File[0]; // treat failure the same as an empty directory.
是否合适 – 由您决定。
这段代码中的一切都没有问题,唯一可能的问题是,您的目录中是否有任何名为 Musics 的文件夹我认为没有这样的文件夹。创建文件夹,一切正常。
我想制作一个媒体播放器,它总是抛出 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.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);
}
}
异常从使用 file.listFiles() 声明和初始化文件变量开始;我犯了什么错误吗?
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);
如果有人能解决这个问题,我将不胜感激。
argument 'files' might be null 不是错误,它是由 linter 工具发出的警告,大概是 Android Studio。你可以忽略它。
listFiles()
方法的结果可能为空;这是错误情况的情况,例如路径根本不存在,或者您的进程无权列出其内容。这是糟糕的 API 设计;真正的 java 修复了这个问题(java.nio.file API),但我认为 android.
添加空检查将使警告消失。例如:
if (files == null) files = new File[0]; // treat failure the same as an empty directory.
是否合适 – 由您决定。
这段代码中的一切都没有问题,唯一可能的问题是,您的目录中是否有任何名为 Musics 的文件夹我认为没有这样的文件夹。创建文件夹,一切正常。