Android 具有自实现OnClickListener的NullPointerException

Android 具有自实现OnClickListener的NullPointerException,android,Android,抱歉,但我似乎在这几天里到处都是各种各样的东西不起作用 我有一个显示的固定各种变量/数据(联系人)的列表视图,对于每个列表视图项,我使用一个单独的XML文件(contacts\u item)来格式化/显示这些数据。列表视图中的每个项目都是电话联系人或电子邮件联系人。我正在尝试这样做,当其中一个联系人被点击时,它就会开始打电话或打开新的电子邮件。(目前主要关注通话方面,但这有什么关系?) 主活动中的代码片段: public void onCreate(Bundle saveInstanceStat

抱歉,但我似乎在这几天里到处都是各种各样的东西不起作用

我有一个显示的固定各种变量/数据(联系人)的列表视图,对于每个列表视图项,我使用一个单独的XML文件(
contacts\u item
)来格式化/显示这些数据。列表视图中的每个项目都是电话联系人或电子邮件联系人。我正在尝试这样做,当其中一个联系人被点击时,它就会开始打电话或打开新的电子邮件。(目前主要关注通话方面,但这有什么关系?)

主活动中的代码片段:

public void onCreate(Bundle saveInstanceState) {
    super.onCreate(saveInstanceState);
    setContentView(R.layout.contacts_layout);

    // Show "back" button
    aboutButton = (Button) findViewById(R.id.aboutButton);
    aboutButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            Contacts.this.finish();
        }
    });

ListView listview = (ListView) findViewById(R.id.contactItem);
ArrayList<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();
// loop through 8 times for each contact entry
for (int i = 0; i < 8; i++) {
        HashMap<String, String> entry = new HashMap<String, String>();
        entry.put("title", title[i]);
        entry.put("name", name[i]);
        entry.put("label", label[i]); // Call, mail, etc.
        entry.put("info", info[i]); // The actual phone number or email

        // Check the label field of each entry
        if (label[i].equals("Call")) {
            TextLabel = (TextView) findViewById(R.id.contactLabel); // contactLabel is from the separate XML file I mentioned
            Log.v("textlabel", "textlabel: " + R.id.contactLabel);

            // Crashes here              
            //TextLabel.setOnClickListener(new ContactOCL(info[i]));
        }

        // Let's see if all of this is printing out right
        Log.v("title", "Title: " + title[i]);
        Log.v("name", "Name: " + name[i]);
        Log.v("label", "Label: " + label[i]);
        Log.v("info", "Info: " + info[i]);

        items.add(entry);
}

ListAdapter adapter = new SimpleAdapter(Contacts.this, items, R.layout.contacts_item, new String[] {"title", "name", "label", "info"},
            new int[] {R.id.contactTitle, R.id.contactName, R.id.contactLabel, R.id.contactInfo});

    // Create an inflater to use another xml layout (the Facebook/Twitter/Instagram buttons)
    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View footerView = inflater.inflate(R.layout.contacts_footer, null);

    // Define their clicks
    facebookButton = (ImageButton) footerView.findViewById(R.id.facebookButton);
    twitterButton = (ImageButton) footerView.findViewById(R.id.twitterButton);
    instagramButton = (ImageButton) footerView.findViewById(R.id.instagramButton);

    facebookButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Open up the Facebook page when clicked
            facebookPage = new Intent(android.content.Intent.ACTION_VIEW);
            facebookPage.setData(Uri.parse(facebookURL));
            startActivity(facebookPage);
        }
    });

    twitterButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Open up the Twitter page when clicked
            twitterPage = new Intent(android.content.Intent.ACTION_VIEW);
            twitterPage.setData(Uri.parse(twitterURL));
            startActivity(twitterPage);
        }
    });

    instagramButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            // Open up the Instagram page when clicked
            instagramPage = new Intent(android.content.Intent.ACTION_VIEW);
            instagramPage.setData(Uri.parse(instagramURL));
            startActivity(instagramPage);
        }
    });

    // Add the footer to the listview, then set adapter
    // MUST BE CALLED IN THIS ORDER!
    listview.addFooterView(footerView);
    listview.setAdapter(adapter);
这是堆栈跟踪:

02-27 16:29:15.813: E/AndroidRuntime(1025): FATAL EXCEPTION: main
02-27 16:29:15.813: E/AndroidRuntime(1025): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.radio.app/org.radio.app.Contacts}: java.lang.NullPointerException
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.os.Looper.loop(Looper.java:137)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invoke(Method.java:511)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at dalvik.system.NativeStart.main(Native Method)
02-27 16:29:15.813: E/AndroidRuntime(1025): Caused by: java.lang.NullPointerException
02-27 16:29:15.813: E/AndroidRuntime(1025):     at org.radio.app.Contacts.onCreate(Contacts.java:78)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.Activity.performCreate(Activity.java:5008)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)

textlabel也打印了几次,所有这些都是相同的数字/ID…我认为这是一个坏迹象,而不是我想要的。所以我不确定是我的实现导致了这个崩溃,还是…

你不能使用
视图
,比如
文本视图
按钮
,而
布局
没有使用
设置内容视图()
布局展开器
。这似乎是你的问题,除非我错过了你做那件事的地方。将
视图
放入要使用的
布局
,然后如果需要进一步格式化,您可以通过编程更改属性

,这是我在下面的
//主活动中注释的行。我不知道为什么它是空的。发布你所有的
联系人的
onCreate()
。我怀疑这是因为您试图从错误的xml调用
TextView
。为什么要为每个列表项使用单独的xml文件?这听起来像是一个需要编辑/更新的灾难配方。XML仅用于格式化/样式化目的。我希望每个项目在每个ListView中显示四个(或五个,不记得了)字段/变量,使用不同的文本颜色等等。是
contactLabel
TextView
id
contacts\u layout
中的
contacts\u layout
?调试它并进入该行,告诉我们不应该是空的。不应该
设置contentview(R.layout.contacts\u layout)
联系人(u)版面中的所有视图进行充气
?@标记为是,但OP表示
联系人(u)项目
版面
中包含该
文本视图
的位置未充气。至少这是我理解itI的方式,我以前遇到过一个问题,在布局中有一个自定义视图,我无法访问,并且出现了相同的错误(没有膨胀),这是因为我无法访问作为自定义视图一部分的textview。我必须将它传递给自定义适配器的构造函数,然后才能在onclick方法中访问它。你认为这可能与此有关吗?是的。无论是通过
setContentView()
还是使用
充气器,您的
活动
只能访问充气的
视图
。除非您将
上下文
传递给另一个类,这就是您通过将其传递给构造函数所做的。否则
Veiw
本身基本上是无用的。无论是通过传递
上下文
还是通过将其添加到
布局
02-27 16:29:15.813: E/AndroidRuntime(1025): FATAL EXCEPTION: main
02-27 16:29:15.813: E/AndroidRuntime(1025): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.radio.app/org.radio.app.Contacts}: java.lang.NullPointerException
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.access$600(ActivityThread.java:130)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.os.Looper.loop(Looper.java:137)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.main(ActivityThread.java:4745)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at java.lang.reflect.Method.invoke(Method.java:511)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at dalvik.system.NativeStart.main(Native Method)
02-27 16:29:15.813: E/AndroidRuntime(1025): Caused by: java.lang.NullPointerException
02-27 16:29:15.813: E/AndroidRuntime(1025):     at org.radio.app.Contacts.onCreate(Contacts.java:78)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.Activity.performCreate(Activity.java:5008)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
02-27 16:29:15.813: E/AndroidRuntime(1025):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)