【问题标题】:Android slider layout and NullPointerExceptionAndroid 滑块布局和 NullPointerException
【发布时间】:2014-02-12 14:00:26
【问题描述】:

好的,所以我有一个带有按钮和列表视图的主布局,我想要做的是当点击按钮时,其他一些东西会显示在它的顶部(一些其他按钮和文本视图.. .),因此从技术上讲,该按钮将使 Listview 及其自身向下滑动,以便显示其他元素。 所以我创建了一个名为 Slider 的类,扩展了 LinearLayout 类,我在其中编写了制作幻灯片的方法,并且我在 XML 文件中使用了这个类来显示布局。

首先,代码如下:

Slider.java:

public class Slider extends LinearLayout{

    //The layout that'll show up when the slide is done: 

    public RelativeLayout Show= (RelativeLayout)findViewById(R.id.Show);

    public Slider(Context context) {
        super(context);
    }

    //Method that'll make the slide
    public void toggle(){
        TranslateAnimation animation;
        animation = new TranslateAnimation(0.0f, 0.0f, 0.0f, -Show.getHeight());

        animation.setDuration(2000);
        animation.setInterpolator(new AccelerateInterpolator());
        startAnimation(animation);
    }
    public String toString(){
        return "THE TOSTRING....";
    }

}

Slider.xml:

<com.example.andtestbdd3.Slider
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slider"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal"
    android:padding="5dip">

    <RelativeLayout
        android:id="@+id/Show"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/bouton1">

        <EditText
            android:id="@+id/Edit1"
            android:layout_height="wrap_content"
            android:layout_width="130dp"
            android:hint="Nom"
            android:paddingTop="1dp"
            android:paddingBottom="1dp"
            android:background="#C2BCBC"
            android:maxLength="25"
            android:layout_marginRight="20dp"
            android:layout_marginBottom="3dp"/>

        <EditText
            android:id="@+id/Edit2"
            android:layout_height="wrap_content"
            android:layout_width="130dp"
            android:hint="Prenom"
            android:paddingTop="1dp"
            android:paddingBottom="1dp"
            android:layout_toRightOf="@id/Edit1"
            android:background="#C2BCBC"
            android:maxLength="25"/>

    </RelativeLayout>

</com.example.andtestbdd3.Slider>

MaintActivity.java:

public class MainActivity extends Activity {

    Slider slider = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
           //Getting the slider from the XML file which uses the Slider class (Slider.java)
        slider = (Slider)findViewById(R.id.slider);
        //everything is ok till here, When I try to use some stuff from the Slider,                      //the NullPointerEXCEPTION 
        //Will show up, for example; if I call the toString methode:
    Toast.makeText(this,"Le text: "+slider.toString(), Toast.LENGTH_LONG).show();
    }

}

日志:

02-12 09:07:20.870: D/AndroidRuntime(933): Shutting down VM
02-12 09:07:20.870: W/dalvikvm(933): threadid=1: thread exiting with uncaught exception (group=0xb4aaaba8)
02-12 09:07:20.890: E/AndroidRuntime(933): FATAL EXCEPTION: main
02-12 09:07:20.890: E/AndroidRuntime(933): Process: com.example.andtestbdd3, PID: 933
02-12 09:07:20.890: E/AndroidRuntime(933): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.andtestbdd3/com.example.andtestbdd3.MainActivity}: java.lang.NullPointerException
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread.access$800(ActivityThread.java:135)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.os.Handler.dispatchMessage(Handler.java:102)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.os.Looper.loop(Looper.java:136)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread.main(ActivityThread.java:5017)
02-12 09:07:20.890: E/AndroidRuntime(933):  at java.lang.reflect.Method.invokeNative(Native Method)
02-12 09:07:20.890: E/AndroidRuntime(933):  at java.lang.reflect.Method.invoke(Method.java:515)
02-12 09:07:20.890: E/AndroidRuntime(933):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
02-12 09:07:20.890: E/AndroidRuntime(933):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
02-12 09:07:20.890: E/AndroidRuntime(933):  at dalvik.system.NativeStart.main(Native Method)
02-12 09:07:20.890: E/AndroidRuntime(933): Caused by: java.lang.NullPointerException
02-12 09:07:20.890: E/AndroidRuntime(933):  at com.example.andtestbdd3.MainActivity.onCreate(MainActivity.java:53)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.Activity.performCreate(Activity.java:5231)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
02-12 09:07:20.890: E/AndroidRuntime(933):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
02-12 09:07:20.890: E/AndroidRuntime(933):  ... 11 more

Activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="#000000"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/bouton1"
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:background="#595959"
        android:gravity="center"
        android:paddingBottom="2dp"
        android:text="Ajouter" />



<LinearLayout
    android:id="@+id/layout"
    android:layout_width="250dp" 
    android:layout_height="wrap_content"
    android:layout_marginTop="70dp"
    android:layout_marginLeft="17dp"
    android:padding="2dp"
    android:background="#595959">

    <ListView
        android:id="@+id/lista"
        android:layout_width="250dp"
        android:layout_height="fill_parent"
        android:background="#7E7E7E"
        android:choiceMode="singleChoice"
        android:divider="#6F6F6F"
        android:dividerHeight="2dp"
        android:paddingLeft="15dp"
        android:paddingRight="15dp"
        />

</LinearLayout>

</RelativeLayout>

所以当我从 xml 文件中获取 Slider 时,没问题。 但是当我尝试使用类文件中的一些方法时,我得到了 NullPointerException ! 我希望我的问题很清楚。如果您需要更多信息,请告诉我,我会尽快更新。 谢谢

【问题讨论】:

  • 发布 activity_main.xml ...
  • 已更新.... Activity_main.xml 添加

标签: java android layout slider


【解决方案1】:

在我看来,当您尝试使用 slider.toString() 时,您的 Slider 对象未找到并且为空 从您的 logcat 行可以看出:

com.example.andtestbdd3.MainActivity.onCreate(MainActivity.java:53)

【讨论】:

    【解决方案2】:

    没有 logcat 输出,我在黑暗中拍摄了一点,但在快速浏览之后,我看到您在 setContentView 方法中使用了 activity_main.xml。很高兴看到 activity_main 布局代码。 我认为您的错误可能在这里:

            slider = (Slider)findViewById(R.id.slider);
    

    因为 findViewById(R.id.slider) 会在您之前设置的 activity_main.xml 中查找 ID 为“slider”的视图元素,所以它不会在您的 slider.xml 中查找! ...如果没有找到就会返回null!

    编辑:好的,现在有了 logcat 输出,现在可以确认滑块设置为 null。

    编辑 2: 现在我可以看到您的 activity_main 布局:让我逐步解释发生了什么:

    1. 您在此处从布局资源“activity_main”设置活动内容:setContentView(R.layout.activity_main);

    2. 然后您使用 findViewById(id) 来查找带有 R.id.slider inside 活动内容的视图!

    3. findViewById 返回 null,因为 activity_main.xml 中的 R.id.slider 没有任何内容

    4. 滑块指向 null

    5. 在您的 Toast 中,您尝试调用方法 toString(),但您的滑块 == null!

    ==> NPE !

    建议的解决方案:

    也许将您的 slider.xml 代码合并到您的活动主布局中!如果您不希望它从一开始就可见,那么您可以将视图的可见性设置为 GONE。比如这样:

    android:visibility="gone"
    

    稍后您可以以编程方式再次将可见性设置为可见。

    真的希望这会有所帮助!

    【讨论】:

    • 为什么你认为滑块是空的?以及您提出的解决方案是什么?
    • @Tha.Poox 我添加了一个解决方案建议
    • 谢谢你的解释:) 但是我找到了另一种更好的方法,我会尽快上传。
    • 我在这里找到了另一种最好的方法:[stackoverflow.com/questions/18279370/…谢谢你们的回答:)[1]:stackoverflow.com/questions/18279370/…
    • 我很高兴听到我的解释有帮助:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    相关资源
    最近更新 更多