【问题标题】:Android. Why do I get errors when I try to add items to ArrayList?安卓。当我尝试将项目添加到 ArrayList 时,为什么会出现错误?
【发布时间】:2014-02-07 16:43:08
【问题描述】:

当我添加list.add(sb.toString()); 行时,程序停止工作。
当我删除它时,数据加载到 StringBuilder,但我无法显示它。
我搜索了一个解决方案,但每个代码示例都是一样的。
我找不到问题。

public ArrayList<String> list;
public ArrayAdapter<String> adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contact_list);

    listView = (ListView) findViewById(R.id.contactList);
    // listView.setOnItemClickListener(this);

    Cursor phones = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
            null, null);
    while (phones.moveToNext()) {

        String name = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

        String phoneNumber = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        StringBuilder sb = new StringBuilder();

        sb.append(name).append(" ").append(phoneNumber);

        list.add(sb.toString());
        Log.d("Added:", sb.toString());

    }
    adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, list);
    listView.setAdapter(adapter);

    phones.close();

堆栈跟踪:

02-05 10:41:03.505: E/AndroidRuntime(29762): FATAL EXCEPTION: main
02-05 10:41:03.505: E/AndroidRuntime(29762): java.lang.NullPointerException
02-05 10:41:03.505: E/AndroidRuntime(29762):    at com.example.anewapp.CameraPreview.surfaceCreated(CameraPreview.java:30)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.SurfaceView.updateWindow(SurfaceView.java:547)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.SurfaceView.access$000(SurfaceView.java:85)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:173)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:671)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1821)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:999)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4217)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.Choreographer.doCallbacks(Choreographer.java:555)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.Choreographer.doFrame(Choreographer.java:525)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.os.Handler.handleCallback(Handler.java:615)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.os.Looper.loop(Looper.java:137)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at android.app.ActivityThread.main(ActivityThread.java:4802)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at java.lang.reflect.Method.invokeNative(Native Method)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at java.lang.reflect.Method.invoke(Method.java:511)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:813)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:580)
02-05 10:41:03.505: E/AndroidRuntime(29762):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 有一个空指针异常@camerapreview.java line 30
  • 你在哪里初始化你的列表,即公共 ArrayList 列表,请写 list = new ArrayList;后行 setContentView(R.layout.activity_contact_list);
  • 小鹿尼尼!您的解决方案几乎奏效,但需要 list = new ArrayList(); :D 谢谢!
  • @neeni 把它写成答案!!

标签: android list arraylist add


【解决方案1】:

你需要初始化你的列表

list = new ArrayList<String>();

【讨论】:

    【解决方案2】:

    您显示的堆栈回溯是针对空指针异常的。 它是说你的文件 CameraPreview.java 的第 30 行取消引用了一个空指针。

    看看第 30 行。了解哪个指针为空以及为什么。调试代码,所以当控制传递到那里时,指针正在引用一个对象。

    显然,堆栈回溯与您展示的 onCreate() 没有任何联系。所以这是你需要做的另一件事。为什么您认为它在 list.add() 中失败(或者,为什么您显示错误的堆栈回溯)?

    顺便说一下,变量“list”在哪里初始化?

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 2019-04-20
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 2021-09-27
      • 2021-12-31
      相关资源
      最近更新 更多