java - 为什么这两个对象为空?

标签 java android xml

我正在编写一个 Android 应用程序,我使用的两个按钮(“btnGPSShowLocation”和“button”)为空。我已经实例化了它们,所以我不知道为什么它们为空。这是我的代码:

public class AndroidLocationActivity extends Activity {
Button btnGPSShowLocation;
Button button;


AppLocationService appLocationService;
private final static int INTERVAL = 1000 * 60 * 2; //2 minutes
Handler mHandler = new Handler();


@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    appLocationService = new AppLocationService(
            AndroidLocationActivity.this);

    btnGPSShowLocation = (Button) findViewById(R.id.btnGPSShowLocation);

    btnGPSShowLocation.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {

            Location gpsLocation = appLocationService
                    .getLocation(LocationManager.GPS_PROVIDER);

            if (gpsLocation != null) {
                double latitude = gpsLocation.getLatitude();
                double longitude = gpsLocation.getLongitude();
                Toast.makeText(
                        getApplicationContext(),
                        "Mobile Location (GPS): \nLatitude: " + latitude
                                + "\nLongitude: " + longitude,
                        Toast.LENGTH_LONG).show();
            } else {
                showSettingsAlert("GPS");
            }

        }
    });

    button = (Button) findViewById(R.id.button12);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startActivity(new Intent("locationActivity"));
        }
    });
} 

这里是可能相关的 XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="it226.myapplicationit226androidapp.AndroidLocationActivity"
tools:showIn="@layout/activity_gps">

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Show Location\n(GPS)"
    android:id="@+id/btnGPSShowLocation"
    android:layout_alignParentTop="true"
    android:layout_marginTop="83dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/nextgps"
    android:id="@+id/button12"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="106dp" />
</RelativeLayout>

编辑:这是日志猫

> 04-27 23:34:30.525 18310-18310/it226.myapplicationit226androidapp
> E/AndroidRuntime: FATAL EXCEPTION: main
>                                                                                     Process: it226.myapplicationit226androidapp, PID: 18310
>                                                                                     java.lang.RuntimeException: Unable to start activity
> ComponentInfo{it226.myapplicationit226androidapp/it226.myapplicationit226androidapp.AndroidLocationActivity}:
> java.lang.NullPointerException: Attempt to invoke virtual method 'void
> android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
> on a null object reference
>                                                                                         at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
>                                                                                         at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
>                                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java)
>                                                                                         at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
>                                                                                         at android.os.Handler.dispatchMessage(Handler.java:102)
>                                                                                         at android.os.Looper.loop(Looper.java:148)
>                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417)
>                                                                                         at java.lang.reflect.Method.invoke(Native Method)
>                                                                                         at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
>                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
>                                                                                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual
> method 'void
> android.widget.Button.setOnClickListener(android.view.View$OnClickListener)'
> on a null object reference
>                                                                                         at
> it226.myapplicationit226androidapp.AndroidLocationActivity.onCreate(AndroidLocationActivity.java:39)
>                                                                                         at android.app.Activity.performCreate(Activity.java:6237)
>                                                                                         at
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
>                                                                                         at
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
>                                                                                         at
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
>                                                                                         at android.app.ActivityThread.-wrap11(ActivityThread.java) 
>                                                                                         at
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
>                                                                                         at android.os.Handler.dispatchMessage(Handler.java:102) 
>                                                                                         at android.os.Looper.loop(Looper.java:148) 
>                                                                                         at android.app.ActivityThread.main(ActivityThread.java:5417) 
>  
                                                                                   at java.lang.reflect.Method.invoke(Native Method)

最佳答案

删除tools:showIn="@layout/activity_gps"

This attribute set on the root element of a layout that 'ed by another layout. This allows you to point to one of the layouts which includes this layout, and at designtime this included layout will be rendered with the outer layout surrounding it.

请参阅此处 reference

关于java - 为什么这两个对象为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36905423/

相关文章:

c# - 具体解析XML成数组

java - 在 Java 中访问 xml 文件并更新它

java - JAVA中解析结构总是变化的JSON组件

javascript - React Native 如何并排制作两个 View 的动画

android - 在不使用事件的情况下从传感器中提取单个值

c# - 从信息路径模板创建表单

java - 使用hibernate创建新表时如何维护列顺序?

java - 使用 do-while 循环测试输入是否为整数且大于(两个条件) - Java

java - 使用过滤仅从 Java8 中的文件夹中获取文件名

android - RecyclerView、StaggeredGridLayoutManager刷新Bug