Java 按下按钮时,用户位置发送器应用程序崩溃

Java 按下按钮时,用户位置发送器应用程序崩溃,java,android,android-studio,Java,Android,Android Studio,我开发了一个应用程序,通过短信发送用户的位置。当我开始构建它时,并没有出现错误,但当它被实际的手机测试时,它崩溃了。。。它打不开 public class MainActivity extends AppCompatActivity { EditText phone; Button emergency; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

我开发了一个应用程序,通过短信发送用户的位置。当我开始构建它时,并没有出现错误,但当它被实际的手机测试时,它崩溃了。。。它打不开

public class MainActivity extends AppCompatActivity {
EditText phone;
Button emergency;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    phone= (EditText) findViewById(R.id.number);

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

    emergency.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            GPStracker g = new GPStracker(getApplicationContext());
            Location l = g.getLocation();
            if (l != null) {
                double lat = l.getLatitude();
                double lon = l.getLongitude();
                String message = "http://maps.google.com/maps?saddr=" + lat + "," + lon;
                String number = "number";
                SmsManager smsManager = SmsManager.getDefault();
                StringBuffer smsBody = new StringBuffer();
                smsBody.append(Uri.parse(message));
                android.telephony.SmsManager.getDefault().sendTextMessage(number, null, smsBody.toString(), null, null);
            }
        }
    });
}
这是我的GPS跟踪课程

public class GPStracker implements LocationListener {
    Context context;
    public GPStracker(Context c){
        context = c;
    }

    public Location getLocation(){

        LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        boolean isGPSEnabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
        if (isGPSEnabled){
            lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,5000,10,this);
            Location l = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
            return l;
        }else{
            Toast.makeText(context,"Please enable GPS", Toast.LENGTH_LONG).show();
        }
        return null;
    }

    @Override
    public void onLocationChanged(Location location) {

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
        intent.putExtra("enabled", true);

    }

    @Override
    public void onProviderDisabled(String provider) {
        Intent intent = new Intent("android.location.GPS_ENABLED_CHANGE");
        intent.putExtra("enabled", false);

    }
}
还有我的清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.research.sos.smshelpcaller">
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

根据日志,您尝试调用空指针上的方法:

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 com.research.sos.smshelpcaller.MainActivity.onCreate(MainActivity.java:23)
这意味着,以下代码无法解析
R.id.emergency
资产。它根本找不到它,第一行被设置为空:

emergency= (Button) findViewById(R.id.emergency);
emergency.setOnClickListener(new View.OnClickListener() {...}
您应该检查您尝试使用的按钮的名称是否正确,是否没有拼写错误,或者即使资源文件(例如带有视图的xml)存在。

布局文件在哪里, 在super.onCreate(savedInstanceState);,之后提供对活动的xml引用

例如

setContentView(R.layout.activity_main);

您能从控制台添加错误日志吗?首先,请不要大声喊叫!其次,你不太可能得到一个没有错误的日志。首先,请不要使用所有的大写字母。第二,请查看adb日志了解更多信息。为什么要更改您的问题?首先你发布了不同的日志,现在又修改了。你编辑了你的问题,修改了原始的日志输出,现在问题指向了完全不同的问题。你应该先寻找答案——也许有人已经有了同样的问题。您现在遇到的错误与您原来遇到的问题不一致。它做了一些更改,但当我尝试按钮时,它再次崩溃。我编辑了上面的日志猫。。。这是最新的错误
setContentView(R.layout.activity_main);