android - एंड्रॉइड विजेट पर NullPointerException ArrayAdapter createViewFromResource




android-layout android-listview (2)

चूंकि आपने उल्लेख किया है कि सूची पहली लोड पर आती है। यह तब होता है जब स्क्रॉल करना होता है, ऐप क्रैश हो जाता है आपकी व्यक्तियों की सूची में से एक आइटम null

मैं एंड्रॉइड अर्रे एडाप्टर के लिए एक नया हूँ और मेरी सूची-विज़ को पॉपुलिंग करते समय मैं एक अशक्त सूचक अपवाद का सामना कर रहा हूं। जो डेटा मैं सूची विज़िट को पॉप्युलेट करता था वह शून्य नहीं था, मैंने इसे चेक किया था। इसके अलावा पूरी चीज पहले भार पर ठीक काम कर रही है, लेकिन एक बार जब मैं सूची के अंत तक स्क्रॉल करता हूं, ऐप क्रैश हो जाता है

यहां मेरा स्टैक ट्रेस है:

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)

और यहां मेरा गतिविधि कोड है: "मैंने उस पंक्ति को चिह्नित किया है जहां मैं सूची दृश्य बना रहा हूं"

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;
    }
}
}

मैंने हर स्तर पर लॉग-इन करने की कोशिश की, जिसकी सटीक रेखा इस कारण हो सकती है, लेकिन मुझे कुछ भी नहीं मिला। यह बहुत मदद होगी अगर कोई मुझे मुझे बताए कि मैं गलत क्या कर रहा हूं।

अग्रिम में धन्यवाद!!!


मुझे लगता है कि आपके ArrayList मौजूद वस्तुओं में से एक शून्य है। यही कारण है कि जब आप उस आइटम को नीचे स्क्रॉल करते हैं तो यह NullPointerException दे रहा है। यह बेहतर होगा यदि आप ListView कि 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());
             }
         }






android-arrayadapter