プログラミング、Linux、Androidについて、検索しても出てこなかったことについて、自分用メモをつける。
- 2024.11≪
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
クラッシュエラー通知でNullPointerExceptionが届いたが、
実装していないとこで発生している?のだろうか。
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
at android.widget.AbsListView.obtainView(AbsListView.java:1294)
at android.widget.ListView.makeAndAddView(ListView.java:1727)
at android.widget.ListView.fillDown(ListView.java:652)
at android.widget.ListView.fillGap(ListView.java:623)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
at android.widget.ListView.onTouchEvent(ListView.java:3315)
at android.view.View.dispatchTouchEvent(View.java:3765)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:905)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116)
at android.app.Activity.dispatchTouchEvent(Activity.java:2093)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
調べてみると、海外でよく同じ現象が起きているみたい。
動的にListViewを入れ替えているので、Listが空になった瞬間に動作が不安定になっているのか?
解決方法:
ArrayAdapterを実装する。
実装していないとこで発生している?のだろうか。
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323)
at android.widget.AbsListView.obtainView(AbsListView.java:1294)
at android.widget.ListView.makeAndAddView(ListView.java:1727)
at android.widget.ListView.fillDown(ListView.java:652)
at android.widget.ListView.fillGap(ListView.java:623)
at android.widget.AbsListView.trackMotionScroll(AbsListView.java:2944)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2065)
at android.widget.ListView.onTouchEvent(ListView.java:3315)
at android.view.View.dispatchTouchEvent(View.java:3765)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:905)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:944)
at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1701)
at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1116)
at android.app.Activity.dispatchTouchEvent(Activity.java:2093)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1685)
at android.view.ViewRoot.handleMessage(ViewRoot.java:1802)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:143)
at android.app.ActivityThread.main(ActivityThread.java:4914)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
調べてみると、海外でよく同じ現象が起きているみたい。
動的にListViewを入れ替えているので、Listが空になった瞬間に動作が不安定になっているのか?
解決方法:
ArrayAdapterを実装する。
解決方法:
ArrayAdapterを継承し、 getView(int, View, ViewGroup)をオーバーライドしする。
APIを見ると、「 getView(int, View, ViewGroup)をオーバーライドして、TextViewでもImageViewでも好きなView作って返すように実装しなさい」と書いている。(多分)
getViewをデバッグしてみるとListViewは、画面表示分の要素だけViewを生成していて、スクロールする度に、見えなくなる要素のViewを廃棄し、新たに表示される要素のViewを生成?していることがわかった。
ArrayAdaptorのgetViewでは対応し切れない場合、NullPointerExceptionが発生していたと想定できる。
<<ArrayAdapter<String>を使っている場合の例>>
class MyArrayAdapter extends ArrayAdapter<String> {
private int resource;
listview.setListAdapter(adapter);
list.add("aaaaa");
list.add("bbbbb");
adapter.notifyDataSetChanged();
:
ArrayAdapterを継承し、 getView(int, View, ViewGroup)をオーバーライドしする。
APIを見ると、「 getView(int, View, ViewGroup)をオーバーライドして、TextViewでもImageViewでも好きなView作って返すように実装しなさい」と書いている。(多分)
getViewをデバッグしてみるとListViewは、画面表示分の要素だけViewを生成していて、スクロールする度に、見えなくなる要素のViewを廃棄し、新たに表示される要素のViewを生成?していることがわかった。
ArrayAdaptorのgetViewでは対応し切れない場合、NullPointerExceptionが発生していたと想定できる。
<<ArrayAdapter<String>を使っている場合の例>>
private MyArrayAdapter adapter;
private ArrayList<String> list = new ArrayList<String>();
class MyArrayAdapter extends ArrayAdapter<String> {
private int resource;
public
MyArrayAdapter(Context context, int resource, List<String> objects) {
super(context, resource, objects);
this.resource = resource;
this.resource = resource;
}
/**
* ListViewに新要素を追加するときにViewクラスのインスタンスを取得するためのメソッド
* <pre>
* なぜ、APIにこのメソッドの説明がないんだ?
* 動作が快適かは置いといて、ヌルポンにはならないのでよしとする。
* </pre>
* @param position - 追加される要素のインデックス番号
* @param convertView - 一個前の要素のViewインスタンス(position==0の場合、null)
* @param parent - ListViewクラスのインスタンス
* @see android.widget.ArrayAdapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView v = null;
return v;
}
* ListViewに新要素を追加するときにViewクラスのインスタンスを取得するためのメソッド
* <pre>
* なぜ、APIにこのメソッドの説明がないんだ?
* 動作が快適かは置いといて、ヌルポンにはならないのでよしとする。
* </pre>
* @param position - 追加される要素のインデックス番号
* @param convertView - 一個前の要素のViewインスタンス(position==0の場合、null)
* @param parent - ListViewクラスのインスタンス
* @see android.widget.ArrayAdapter#getView(int, android.view.View,
* android.view.ViewGroup)
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView v = null;
if (convertView != null && convertView instanceof TextView) {
v = (TextView) convertView;
} else {
v = (TextView) TextView.inflate(getContext(), this.resource, null);
}
v.setText(this.getItem(position));return v;
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ListView listView = (ListView) findViewById(R.id.MyListView);
adapter = new MyArrayAdapter(this, android.R.layout.simple_list_item_1, list);listview.setListAdapter(adapter);
list.add("aaaaa");
list.add("bbbbb");
adapter.notifyDataSetChanged();
:
PR
この記事にコメントする
カレンダー
11 | 2024/12 | 01 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
フリーエリア
最新CM
最新記事
(08/12)
(02/23)
(02/23)
(02/22)
(02/22)
最新TB
プロフィール
HN:
kstv2011
性別:
男性
職業:
プログラマ
趣味:
作ること
自己紹介:
プログラマー、Javaを中心にネットワーク通信系アプリを作成する男。
ブログ内検索
最古記事
(12/18)
(12/23)
(01/23)
(01/23)
(02/17)
アクセス解析