Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法找出此NullPoint异常_Android_Nullpointerexception_Textview_Onclicklistener_Onlongclicklistener - Fatal编程技术网

Android 无法找出此NullPoint异常

Android 无法找出此NullPoint异常,android,nullpointerexception,textview,onclicklistener,onlongclicklistener,Android,Nullpointerexception,Textview,Onclicklistener,Onlongclicklistener,我正在向适配器中的文本字段添加onClick侦听器。我只想将该字段中的文本发布到我的文本输入框(edittext1)。我正在尝试下面的代码,但是它在指向edttext1的行中给了我一个NullPoint异常。请帮忙 public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; LayoutInflater inflater2 = (La

我正在向适配器中的文本字段添加onClick侦听器。我只想将该字段中的文本发布到我的文本输入框(edittext1)。我正在尝试下面的代码,但是它在指向edttext1的行中给了我一个NullPoint异常。请帮忙

public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        LayoutInflater inflater2 = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        inflater2.inflate(R.layout.activity_discuss, parent, false);

        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            if(type==1 || type==3)
                row = inflater.inflate(R.layout.listitem_discuss, parent, false);
            else if(type==4 || type==5)
                row = inflater.inflate(R.layout.listitem_users, parent, false);
            else
                row = inflater.inflate(R.layout.listitem_messages, parent, false);
        }

    //  


        final OneComment coment = getItem(position);

        userComment = (TextView) row.findViewById(R.id.comment);
        userImage = (ImageView) row.findViewById(R.id.place_img);
        userName = (TextView) row.findViewById(R.id.place_name);
        userOnlineImage = (ImageView) row.findViewById(R.id.pe_profile_pic);
        commentDate = (TextView) row.findViewById(R.id.place_distance);
        msgPic = (ImageView) row.findViewById(R.id.msgPic);

        userComment.setText(coment.comment);
        editText1 = (EditText) row.findViewById(R.id.cr_room_name);

        userName.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {

                editText1.setText("testing");
                Log.v("response","username selected");
                // TODO Auto-generated method stub

            }
            });
实际上,我更愿意做一个长点击。设置是否有差异

堆栈跟踪

11-16 12:46:29.100: E/AndroidRuntime(8047): FATAL EXCEPTION: main
11-16 12:46:29.100: E/AndroidRuntime(8047): java.lang.NullPointerException
11-16 12:46:29.100: E/AndroidRuntime(8047):     at com.peekatucorp.peekatu.DiscussArrayAdapter$1.onClick(DiscussArrayAdapter.java:129)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.view.View.performClick(View.java:4240)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.view.View$PerformClick.run(View.java:17721)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.os.Handler.handleCallback(Handler.java:730)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.os.Looper.loop(Looper.java:137)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at android.app.ActivityThread.main(ActivityThread.java:5103)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at java.lang.reflect.Method.invoke(Method.java:525)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-16 12:46:29.100: E/AndroidRuntime(8047):     at dalvik.system.NativeStart.main(Native Method)
activity_dispose.xml

  <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    >

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/form"
        android:layout_alignParentTop="true"
        android:choiceMode="none"
        android:divider="#00000000"
        android:dividerHeight="@dimen/zerosize"
        android:footerDividersEnabled="false"
        android:headerDividersEnabled="false" 
        android:listSelector="@android:color/transparent">

    </ListView>

    <RelativeLayout
        android:id="@+id/form"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="40dp"
            android:background="@drawable/inputbg" >

            <!-- <Button
                android:id="@+id/postpic"
                android:layout_width="30dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@drawable/attachbtn" />  -->
  <!-- android:background="@drawable/sendbutton"  -->
            <EditText
                android:id="@+id/cr_room_name"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_toLeftOf="@+id/sendMessage"
                android:layout_weight="3"
                android:ems="10"
                android:hint="Enter Message"
                android:inputType="text" />

            <ImageView
                android:id="@+id/postpic"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/picattach" />

            <Button
                android:id="@+id/sendMessage"
                style="@style/SingleGradient"
                android:layout_width="35dp"
                android:layout_height="wrap_content"
                android:layout_weight="1" />

        </LinearLayout>

</RelativeLayout>

</RelativeLayout>


下面是一个运行getView的示例,您可以在没有logcat信息的情况下查看它,这将很难判断,但我只是猜测,您是否可以确保cr_room_名称实际位于activity_discussion.xml文件中。如果它在activity_Discussion布局文件中,那么只有在看到logcat之后,我们才能找出问题所在

见到你之后,我只想到一件事。请确保所有这些视图id都在其各自的布局文件中

正如我从您的布局和代码中看到的,activity\u discussion.xml文件中没有place\u name textview


由于您使用不同的布局用于不同的目的,请确保在从getView实际引用视图之前进行一些空检查,特别是在为特定视图设置侦听器时。

似乎有点混淆:您要求在id
cr\u room\u name
下查找editText1:inside
listitem\u messages.xml
,但它明显位于
activity\u discussion.xml

Activity activity = (Activity) getContext();
editText1 = (EditText) activity.findViewById(R.id.cr_room_name);

但是,即使这样做有效,将视图和活动结合起来确实是一种丑陋的方式,您最好还是使用observer obersable设计模式。

空点是一个很容易解决的问题,有时因为对象未初始化,您应该调试以找出原因。很多时候,对象是空的,会导致问题

可能editText没有将id传递给findViewById,记录其值,或者只是在XML上检查值。如果您阅读过任何与此类似的现有问题,您会发现第一条注释几乎总是相同的。请发布logcat中的堆栈跟踪。这种类型来自何处?我猜您想要类似的东西。为行itemsXML和stacktrace充气不同的布局。从主活动传递到track with选项卡的“类型”当前显示在应用程序中。place_名称位于R.layout.listitem_中,该名称也已膨胀。getView将按您拥有的行数调用。这意味着userName.setOnClickListener(newview.OnClickListener(){将为每个getView调用调用。虽然您在R.layout.listitem\u讨论中有place\u name,但对于其他布局?我想您已经知道这里实际发生了什么。虽然getView将在R.layout.listitem\u讨论中找到用户名,但当涉及到其他布局(如Activity\u讨论)时,它将无法找到它。因此,nullpointerexcep选项。当我看到您的代码时,我认为您拥有的每个视图都可能发生异常。如果您不愿意对自定义行进行大量的UI更改,我认为空引用检查是一种可行的方法。这很有效,但您能否告诉我更多关于更好的解决方案。谢谢!视图不应依赖于活动。您不需要按钮在活动A中以某种方式表现,在活动B中以不同方式表现。按钮始终是按钮。在这里,您的视图不应要求您的活动属于A类。有两种解决方案:要么您实现ObersAvable-observer设计模式(请用谷歌搜索),要么您可以使用总线(如otto、eventbus或roboguice).但是,请把这一切都放远一点,如果你刚刚启动安卓系统,不要担心我的评论,继续说吧,我说的是安卓系统设计的更先进。
Activity activity = (Activity) getContext();
editText1 = (EditText) activity.findViewById(R.id.cr_room_name);