###実現したいこと
Androidアプリ制作にて
assetsフォルダの内容を取得し、その内容をListViewで表示し、その結果をsubActivityに返す
(Listviewはカスタムしてあります)
###発生している問題・エラーメッセージ
listview.setAdapter(mlAdapter)でnull
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
エラーメッセージ 09-28 22:11:00.689 9282-9282/com.example.taiger.gamensuii E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.taiger.gamensuii, PID: 9282 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.taiger.gamensuii/com.example.taiger.gamensuii.SelectActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference 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 invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference at com.example.taiger.gamensuii.SelectActivity.onCreate(SelectActivity.java:59) 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)
###該当のソースコード
package com.example.taiger.gamensuii; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.res.AssetManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import java.io.IOException; import java.util.ArrayList; import java.util.List; /** * Created by taiger on 2016/09/26. */ // SubActivityから楽曲選択ボタンを押されたときに実行される // 楽曲のリストを表示し、選んだ楽曲をSubActivityに返す public class SelectActivity extends Activity { AssetManager assetManager; String[] list = null; List<musiclist> files = new ArrayList<musiclist>(); ListView listview; public class musiclist { private String name; public void setName(String s){ this.name = s; } public String getName(){ return this.name; } } protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); assetManager = getResources().getAssets(); // onCreate()内でやらないとできないらしい listview = (ListView) findViewById(R.id.listview_id); if(getFiles()){ // mp3がみつかった for(int i = 0; i < list.length; i++){ musiclist ml = new musiclist(); ml.setName(list[i]); files.add(ml); } // ListviewにカスタムしたAdapterクラスを設定 mlAdapter mladapter = new mlAdapter(this, 0, files); listview.setAdapter(mladapter); } else{ // 見つからなかった Toast.makeText(this, "Music files was not found.", Toast.LENGTH_SHORT).show(); finish(); } } public class mlAdapter extends ArrayAdapter<musiclist> { private LayoutInflater layoutInflater; private musiclist item; // コンストラクタ 魔法のこーど public mlAdapter(Context context, int Resource, List<musiclist> objects){ super(context, Resource, objects); layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public View getView(int position, View convertView, ViewGroup parent){ // 特定行のデータを受け取る item = (musiclist) getItem(position); // convertViewは使いまわしされている可能性があるのでnullのときだけ新しく作る // 各行のレイアウトを設定 if(convertView == null){ convertView = layoutInflater.inflate(R.layout.list_layout, null); } // ここらへんでwidgetに見せるものをセットしたりする TextView tv; tv = (TextView) convertView.findViewById(R.id.list_text); tv.setText(item.getName()); // 多分ボタンとか作らないと情報が返せなさそう・・・ Button button = (Button) findViewById(R.id.list_selectbutton); button.setOnClickListener(new ButtonListener()); return convertView; } class ButtonListener implements View.OnClickListener{ public void onClick(View v){ // ここでSubActivityに戻る用のコードを書く Intent intent_res = new Intent(); intent_res.putExtra("RESULT", item.getName()); setResult(RESULT_OK, intent_res); finish(); } } } protected boolean getFiles(){ try { list = assetManager.list("musics"); // ファイルパスを指定してstringリストにファイル名をぶっこむ } catch (IOException e) { e.printStackTrace(); return false; } return true; } }
Androidでのプログラミングは初心者なのでわかりやすく教えていただけるとありがたいです。よろしくお願いいたします。また、ここでの質問は初めてなので何か不備がありましたらすみません。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/03 08:36