findViewByID找不到ListView

时间:2016-01-12 00:03:35

标签: java android xml listview

日志说:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.t99sdevelopment.centralized/com.t99sdevelopment.centralized.ContactBookScreen}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference

com.t99sdevelopment.centralized.ContactBookScreen.<init>(ContactBookScreen.java:26)

它正在寻找@ + id / nameList,但它显然有这个,并且是ListView类型,所以我不知道问题是什么。我正在尝试从Parse获取一个数组,将该数组分别设置为teacherName [],teacherPosition []和teacherNumber [],然后创建一个适配器以在ListView上显示该数据。

package com.t99sdevelopment.centralized;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseObject;
import com.parse.ParseQuery;

import java.sql.Array;
import java.util.Arrays;
import java.util.List;

public class ContactBookScreen extends AppCompatActivity {

    String[] teacherName;
    String[] teacherPosition;
    String[] teacherNumber;
    ListView nameList = (ListView) findViewById(R.id.nameList);   <---the error is here.
    ListView positionList = (ListView) findViewById(R.id.positionList);
    ListView numberList = (ListView) findViewById(R.id.numberList);

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




    }

    public void parseGet(View view){
        ParseQuery<ParseObject> query = ParseQuery.getQuery("data");
        query.getInBackground("zF3GAgdbi3", new GetCallback<ParseObject>() {
            public void done(ParseObject object, ParseException e) {
                if (e == null) {
                    teacherName = (String[]) object.get("TeacherName");
                    teacherPosition = (String[]) object.get("TeacherPosition");
                    teacherNumber = (String[]) object.get("TeacherPhone");
                } else {

                }
            }
        });

        ArrayAdapter<String> nameAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, teacherName);
        nameList.setAdapter(nameAdapter);

        ArrayAdapter<String> positionAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, teacherPosition);
        positionList.setAdapter(positionAdapter);

        ArrayAdapter<String> numberAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, teacherNumber);
        numberList.setAdapter(numberAdapter);
    }

    private void setActionBarText(){
        TextView actionBarText = (TextView) findViewById(R.id.toolbar_title);
        actionBarText.setText("Contact Book");
    }
}

这是XML:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"
    android:background="@color/trojanWhite">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:gravity="center_horizontal">

        <include
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            layout="@layout/actionbar" />

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">

                    <ListView
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="wrap_content"
                        android:id="@+id/nameList"/>

                    <ListView
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="wrap_content"
                        android:id="@+id/positionList"
                        android:layout_toRightOf="@+id/nameList"/>

                    <ListView
                        android:layout_width="0dp"
                        android:layout_weight="1"
                        android:layout_height="wrap_content"
                        android:id="@+id/numberList"
                        android:layout_toRightOf="@+id/positionList"/>

                </LinearLayout>

                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="@color/trojanBlack" />

            </LinearLayout>

        </ScrollView>

    </LinearLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/nvView"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@android:color/white"
        app:menu="@menu/navigationdraweritems"
        app:headerLayout="@layout/nav_header"
        />


</android.support.v4.widget.DrawerLayout>

1 个答案:

答案 0 :(得分:3)

  

'android.view.View android.view.Window.findViewById(int)'上的null   对象参考

因为在类级别创建Activity之前使用了Activity Context。

在调用onCreate后访问setContentView内的所有观看次数:

ListView nameList,positionList,numberList;
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contactbookscreen);
        // access Views here from activity_contactbookscreen layout
          nameList = (ListView) findViewById(R.id.nameList);    
          positionList = (ListView) findViewById(R.id.positionList);
          numberList = (ListView) findViewById(R.id.numberList);
    }