編集:これは重複としてマークされています。しかし、これは、Null Pointer Exceptionが何であるか、または「プログラミングの基礎」レベルでそれを修正する方法を尋ねていないので、これはやや異なると考えています。私が間違っていたら、私を修正してください。でも、私の質問はAndroidフレームワークを扱うもっと複雑な問題に触れると信じています。私の問題は、私は基本的なYouTubeチュートリアルの後に単純なメディアプレーヤーアプリを作成しようとしていますが、アプリケーションはエミュレータで開くとすぐにすぐに閉じるようにしています。私は手紙にチュートリアルに従っているので、何らかの設定エラーであると推測しています。私は与えられた助言に従って私のコードスニペットを更新しました。エミュレータではアプリの強制は終了しますが、携帯電話でデバイスを実行すると、トーストメッセージ「Null Array」が表示されます。私の質問は、私のデバイスの内部と外部の両方のストレージディレクトリに.mp3ファイルがあるので、プログラムがmySongs ArrayListに項目を追加しない理由です。EDITED:ヌルポインタの例外でAndroidアプリケーションの強制終了 - ArrayListがアイテムの読み込みに失敗する
public class MainActivity extends AppCompatActivity
{
ListView lv;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.lvPlaylist);
final ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory());
items = new String[mySongs.size()];
if (mySongs != null && !mySongs.isEmpty())
{
for (int i = 0; i < mySongs.size(); i++)
{
//toast(mySongs.get(i).getName().toString());
items[i] = mySongs.get(i).getName().toString().replace("mp3", "").replace(".wav", "");
}
}
else
{
//Log.e(getString(R.string.Exception));
Toast.makeText(this, "Null Array", Toast.LENGTH_SHORT).show();
}
ArrayAdapter<String> adp = new ArrayAdapter<String>(getApplicationContext(), R.layout.song_layout, R.id.textView,items);
lv.setAdapter(adp);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
startActivity(new Intent(getApplicationContext(), Player.class).putExtra("pos", position).putExtra("songlist", mySongs));
}
});
}
public ArrayList<File> findSongs(File root)
{
ArrayList<File> al = new ArrayList<File>();
File[] files = root.listFiles();
for (File singleFile : files)
{
if (singleFile.isDirectory() && !singleFile.isHidden())
{
findSongs(singleFile);
}
else
{
if (singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".wav"))
{
al.add(singleFile);
}
}
}
return al;
}
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.user.mediaplayer.MainActivity">
<ListView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/lvPlaylist"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" />
</RelativeLayout>
ログファイル:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.mediaplayer/com.example.user.mediaplayer.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at com.example.user.mediaplayer.MainActivity.findSongs(MainActivity.java:42)
at com.example.user.mediaplayer.MainActivity.onCreate(MainActivity.java:28)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
私も含まれている次のように私のコードは....
MainActivity.javaです:
uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
uses-permission android:name="android.permission.STORAGE"
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
AndroidManifest.xmlファイルの
適切な方向へのアドバイスをいただければ幸いです。ありがとう...
お試しください! @Override保護ボイドのonCreate(バンドルsavedInstanceState) {super.onCreate(savedInstanceState)。 setContentView(R.layout.activity_main); lv =(ListView)findViewById(R.id.lvPlaylist); ArrayList mySongs = findSongs(Environment.getExternalStorageDirectory()); (mySongsは= NULL && mySongs.isEmpty()!)のために{ は(INT i = 0; iはmySongs.size()<; iは++)の場合 {トースト(mySongs.get(I).getName() .toString()); } }他{ Log.e( "アレイNULL") } } –
私はそれをしようとします。あなたはなぜそれが例外を投げているのか知っていますか?それはmySongs配列に何もないからですか? –
と思います。 File []ファイル= root.listFiles(); return NULL –