2014-01-22 37 views
0

我得到我的联系人的名称,并将它们添加到一个ArrayList。NPE上ArrayList <String> ListView

方法displayContacts()正在工作,因为我的结果显示在我的logcat权限中。 在onCreate()当我得到的ArrayList的大小的结果也是正确的。

我伸出ListActivity和使用ArrayAdapter<String>

的代码是:

public class MainActivity extends ListActivity { 


public ArrayList<String> names = new ArrayList<String>(); 


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


    displayContacts(); 


    Log.i("tag", "ARRAYLIST SIZE== " + names.size()); 


    //ListView listView = (ListView) findViewById(R.id.list); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, names); 

    setListAdapter(adapter);   

} 



private void displayContacts() { 

    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
      null, null, null, null); 

    if (cur.getCount() > 0) { 
     while (cur.moveToNext()) { 

      String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
      names.add(name); 

      //Log.i("name", "name= " + name); 

     } 
     Log.i("tag", "Close Cursor"); 
     cur.close(); 
    } 

} 



} 

XML版式文件:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingLeft="8dp" 
     android:paddingRight="8dp"> 


    <ListView android:id="@android:id/list" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" /> 


</LinearLayout> 

而且在logcat的错误:

01-22 20:55:28.280: E/AndroidRuntime(2597): FATAL EXCEPTION: main 
01-22 20:55:28.280: E/AndroidRuntime(2597): java.lang.NullPointerException 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.AbsListView.obtainView(AbsListView.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.ListView.measureHeightOfChildren(ListView.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.ListView.onMeasure(ListView.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.View.measure(View.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.LinearLayout.measureVertical(LinearLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.LinearLayout.onMeasure(LinearLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.View.measure(View.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.FrameLayout.onMeasure(FrameLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.View.measure(View.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.LinearLayout.measureVertical(LinearLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.LinearLayout.onMeasure(LinearLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.View.measure(View.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.widget.FrameLayout.onMeasure(FrameLayout.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.View.measure(View.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.Choreographer.doCallbacks(Choreographer.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.Choreographer.doFrame(Choreographer.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.os.Handler.handleCallback(Handler.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.os.Handler.dispatchMessage(Handler.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.os.Looper.loop(Looper.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at android.app.ActivityThread.main(ActivityThread.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at java.lang.reflect.Method.invoke(Method.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java) 
01-22 20:55:28.280: E/AndroidRuntime(2597):  at dalvik.system.NativeStart.main(Native Method) 

我应该创建一个自定义ArrayAdapter吗?但只要我可以将数据添加到我的Strings的ArrayList中,对我来说没有任何意义。

+0

看起来像它试图从资源(createViewFromResource)创建ArrayAdapter,所以它期望一个R.array.arrray_name资源,它认为“名称”是一个链接,但它不是 – Stan

回答

0

做两件事情之一:

  1. 不要调用的setContentView()中的onCreate()

  2. 添加一个TextView到你的XML。然后传递该TextView的id而不是android.R.layout.simple_list_item_1。

编辑:其实,你有它的方式安装应该工作,所以我不知道是什么问题。你可能仍然尝试我的两个建议,只是为了看看会发生什么。

相关问题