Intereting Posts
Android NDK: что я должен установить в Application.mk для APP_ABI? Коснитесь диалогового окна Android, чтобы отклонить его? Идентификатор GCM ID Android возвращает в некоторых случаях «MESSENGER», в то время как работает отлично в большинстве случаев. Не удалось найти причину Нити AsyncTask никогда не умирают Тест на Android-модуле не издевался Как автоматически изменять имя версии в манифесте во время сборки? Android ContentProvider и Google IO Rest Talk AndroidHttpClient не найден (при работе Robolectric) Есть ли какой-либо механизм обратного вызова в android, когда есть данные, доступные для чтения в сокете NETWORK_PROVIDER не предоставляет обновленные местоположения LocationClient класс не найден в google play services rev 22 Android Instant App: как создавать URL-адреса? Android Studio – проблемы с Lollipop, ADB и Genymotion: устройства не появятся. «Сервер adb устарел. убийство …» Разница между ContentObserver и DatasetObserver? Пользовательский шрифт Android Spannable Typeface Span

NullPointerException для виджета android ArrayAdapter createViewFromResource

Я новичок в android ArrayAdapters, и перед заполнением ListView я столкнулся с исключительным исключением. Данные, которые я использовал для заполнения списка, не являются нулевыми, я проверил это. Кроме того, все работает отлично при первой загрузке, но как только я прокручу вниз до конца списка, приложение выйдет из строя.

Вот моя трассировка стека:

E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.NullPointerException at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) at android.widget.AbsListView.obtainView(AbsListView.java:2386) at android.widget.ListView.makeAndAddView(ListView.java:1769) at android.widget.ListView.fillDown(ListView.java:672) at android.widget.ListView.fillGap(ListView.java:636) at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5201) at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:4358) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725) at android.view.Choreographer.doCallbacks(Choreographer.java:555) at android.view.Choreographer.doFrame(Choreographer.java:524) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5059) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) at dalvik.system.NativeStart.main(Native Method) 

И вот мой код активности: «Я отметил строку, в которой я заполняю listView»

 public class AddPersonActivity extends Activity implements PlusClient.OnPeopleLoadedListener, PlusClient.ConnectionCallbacks, PlusClient.OnConnectionFailedListener { private static final String TAG = "AddPersonActivity"; private static final String STATE_RESOLVING_ERROR = "resolving_error"; private ArrayAdapter sListAdapter; private ListView sPersonListView; private ArrayList<String> sListItems; private PlusClient sPlusClient; private boolean sResolvingError; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_add_person); Log.d(TAG, "onCreate called"); sPlusClient = new PlusClient.Builder(this, this, this) .setActions(MomentUtil.ACTIONS) .build(); sListItems = new ArrayList<String>(); sListAdapter = new ArrayAdapter<String>( this, android.R.layout.simple_list_item_1, sListItems); sPersonListView = (ListView) findViewById(R.id.person_list); sPersonListView.setAdapter(sListAdapter); sResolvingError = savedInstanceState != null && savedInstanceState.getBoolean(STATE_RESOLVING_ERROR, false); } @Override public void onStart() { super.onStart(); Log.d(TAG, "onStart : connecting PlusClient"); sPlusClient.connect(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean(STATE_RESOLVING_ERROR, sResolvingError); } @Override public void onStop() { super.onStop(); Log.d(TAG, "onStop : disconnecting PlusClient"); sPlusClient.disconnect(); } @Override public void onConnected(Bundle bundle) { Log.d(TAG, "onConnected : PlusClient connected"); sPlusClient.loadVisiblePeople(this, null); } @Override public void onDisconnected() { Log.d(TAG, "onDisconnected : PlusClient re-connect, PersonListView null"); sPlusClient.connect(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.d(TAG, "onConnectionFailed : connecting PlusClient"); sPlusClient.connect(); } @Override public void onPeopleLoaded(ConnectionResult connectionResult, PersonBuffer persons, String s) { Log.d(TAG, "onPersonLoaded called"); switch (connectionResult.getErrorCode()) { case ConnectionResult.SUCCESS: sListItems.clear(); Log.d(TAG, "Loading People"); try { int count = persons.getCount(); Log.d(TAG, String.valueOf(count)); for (int i = 0; i < count; i++) { /*====== this is where listView is populated =====*/ sListItems.add(persons.get(i).getDisplayName()); } } finally { persons.close(); } sListAdapter.notifyDataSetChanged(); break; case ConnectionResult.SIGN_IN_REQUIRED: sPlusClient.disconnect(); sPlusClient.connect(); break; default: Log.e(TAG, "Error when listing people: " + connectionResult); break; } } } 

Я пробовал вести журнал на каждом этапе, чтобы найти точную строку, которая может быть причиной этого, но я ничего не могу найти. Было бы очень полезно, если бы кто-нибудь мог сообщить мне, что я делаю неправильно.

Заранее спасибо!!!

Solutions Collecting From Web of "NullPointerException для виджета android ArrayAdapter createViewFromResource"

Я думаю, что один из элементов в вашем ArrayList равен null. Именно поэтому он предоставляет NullPointerException при прокрутке вниз до этого элемента. Было бы лучше, если вы проверите, имеет ли какой-либо элемент значение null, прежде чем добавлять его в ListView .

 int count = persons.getCount(); Log.d(TAG, String.valueOf(count)); for (int i = 0; i < count; i++) { /*====== this is where listView is populated =====*/ if(persons.get(i).getDisplayName() != null) { sListItems.add(persons.get(i).getDisplayName()); } } 

Поскольку вы упомянули, что список заполняется при первой загрузке. Это происходит только тогда, когда прокрутка происходит, приложение падает. Один из пунктов списка ваших лиц имеет значение null .