Попытка использовать адаптер, но он выдает ошибку нулевого указателя.
Я не могу понять, почему, поскольку регистрация содержимого массива строк показывает, что он был инициализирован и не является нулевым.
MainActivity.java
public class MainActivity extends AppCompatActivity {
ListView lvMyListView;
String[] items;
///tag for log
private static final String tag = "**IS4447**";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Resources res = getResources();
//init list view
lvMyListView = (ListView) findViewById(R.id.lvMyListView);
items = res.getStringArray(R.array.items);
Log.d(tag, items.toString());
ItemAdapter itemAdapter = new ItemAdapter(this, items);
lvMyListView.setAdapter(itemAdapter);
}
}
ItemAdapter.java
public class ItemAdapter extends BaseAdapter {
String[] items;
LayoutInflater mInflater;
public ItemAdapter(Context c, String[] i){
i = items;
mInflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return items.length;
}
@Override
<resources>
public Object getItem(int i) {
return items[i];
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View convertView, ViewGroup parent) {
View v = mInflater.inflate(R.layout.my_list_view_detail, null);
TextView tvName = v.findViewById(R.id.tvName);
String itemName = items[i];
tvName.setText(itemName);
return null;
}
}
strings.xml
<resources>
<string name="app_name">My List View App</string>
<!-- My List View Data-->
<string-array name="items">
<item>Apple</item>
<item>Orange</item>
<item>Banana</item>
</string-array>
</resources>
И, наконец, вывод logcat. Первая строка показывает, что вывод строки toString массива не является нулевым.
D/**IS4447**: [Ljava.lang.String;@c543c7b
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: ie.aa.bis.is4447.mylistviewapp, PID: 12011
java.lang.RuntimeException: Unable to start activity ComponentInfo{ie.aa.bis.is4447.mylistviewapp/ie.aa.bis.is4447.mylistviewapp.MainActivity}: java.lang.NullPointerException: Attempt to get length of null array
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2913)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.NullPointerException: Attempt to get length of null array
at ie.aa.bis.is4447.mylistviewapp.ItemAdapter.getCount(ItemAdapter.java:25)
at android.widget.ListView.setAdapter(ListView.java:575)
at ie.aa.bis.is4447.mylistviewapp.MainActivity.onCreate(MainActivity.java:36)