Java Android应用程序在从一个活动移动到另一个活动时崩溃
现在我有两个活动,活动_bustracking和活动_main 当按下主活动中的按钮时,应将其移动到爆破活动;但是,现在,当我单击按钮时,应用程序崩溃,出现以下错误:Java Android应用程序在从一个活动移动到另一个活动时崩溃,java,android,xml,Java,Android,Xml,现在我有两个活动,活动_bustracking和活动_main 当按下主活动中的按钮时,应将其移动到爆破活动;但是,现在,当我单击按钮时,应用程序崩溃,出现以下错误: 05-28 16:34:32.680 26130-26130/com.example.robertloggia.test1 D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN 05-28 16:34:32.770 26130-26130/com.example.robertlog
05-28 16:34:32.680 26130-26130/com.example.robertloggia.test1 D/ViewRootImpl﹕ ViewPostImeInputStage ACTION_DOWN
05-28 16:34:32.770 26130-26130/com.example.robertloggia.test1 D/AndroidRuntime﹕ Shutting down VM
05-28 16:34:32.770 26130-26130/com.example.robertloggia.test1 E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.robertloggia.test1, PID: 26130
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
at android.content.ComponentName.<init>(ComponentName.java:77)
at android.content.Intent.<init>(Intent.java:4562)
at com.example.robertloggia.test1.MainActivity$1.onClick(MainActivity.java:67)
at android.view.View.performClick(View.java:5162)
at android.view.View$PerformClick.run(View.java:20873)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5835)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
我的BustTrackingActivity.class看起来像:
package com.example.robertloggia.test1;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
//import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
public class MainActivity extends Activity implements LocationListener{
//GPS Specific variables
protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
boolean gps_enabled, network_enabled;
Spinner routeChoice;
Button btnSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
routeChoice = (Spinner) findViewById(R.id.route_choices);
btnSubmit = (Button) findViewById(R.id.btn_submit);
txtLat = (TextView) findViewById(R.id.textView1);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//get location and make sure it is enabled
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Toast.makeText(MainActivity.this, "Please enable GPS", Toast.LENGTH_LONG).show();
}
addListenerOnButton();
}
public void addListenerOnButton() {
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,
// "OnClickListener : " +
// "\nSpinner 1 : " + String.valueOf(routeChoice.getSelectedItem()),
// Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
}
/*
* METHODS FOR GETTING LOCATION
*/
@Override
public void onLocationChanged(Location location) {
txtLat = (TextView) findViewById(R.id.textView1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude", "disable");
}
@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude", "enable");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude", "status");
}
}
package com.example.robertloggia.test1;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
/**
* Created by RobertLoggia on 5/28/15.
*/
public class BusTrackingActivity extends Activity {
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bustracking);
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.robertloggia.test1" >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".BusTrackingActivity" >
</activity>
</application>
</manifest>
My activity_main.xml:
activity_bustracking.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
我的android清单如下所示:
package com.example.robertloggia.test1;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
//import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.Toast;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.widget.TextView;
public class MainActivity extends Activity implements LocationListener{
//GPS Specific variables
protected LocationManager locationManager;
protected LocationListener locationListener;
protected Context context;
TextView txtLat;
String lat;
String provider;
protected String latitude,longitude;
boolean gps_enabled, network_enabled;
Spinner routeChoice;
Button btnSubmit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
routeChoice = (Spinner) findViewById(R.id.route_choices);
btnSubmit = (Button) findViewById(R.id.btn_submit);
txtLat = (TextView) findViewById(R.id.textView1);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//get location and make sure it is enabled
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);
if(!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) && !locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
Toast.makeText(MainActivity.this, "Please enable GPS", Toast.LENGTH_LONG).show();
}
addListenerOnButton();
}
public void addListenerOnButton() {
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,
// "OnClickListener : " +
// "\nSpinner 1 : " + String.valueOf(routeChoice.getSelectedItem()),
// Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
}
/*
* METHODS FOR GETTING LOCATION
*/
@Override
public void onLocationChanged(Location location) {
txtLat = (TextView) findViewById(R.id.textView1);
txtLat.setText("Latitude:" + location.getLatitude() + ", Longitude:" + location.getLongitude());
}
@Override
public void onProviderDisabled(String provider) {
Log.d("Latitude", "disable");
}
@Override
public void onProviderEnabled(String provider) {
Log.d("Latitude", "enable");
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
Log.d("Latitude", "status");
}
}
package com.example.robertloggia.test1;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
/**
* Created by RobertLoggia on 5/28/15.
*/
public class BusTrackingActivity extends Activity {
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bustracking);
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.robertloggia.test1" >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:label="@string/app_name"
android:name=".BusTrackingActivity" >
</activity>
</application>
</manifest>
问题在于,您从未将
上下文
分配给此
但是,没有理由保存活动中的上下文,只需使用MainActivity即可。这是而不是上下文
:
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,
// "OnClickListener : " +
// "\nSpinner 1 : " + String.valueOf(routeChoice.getSelectedItem()),
// Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, BusTrackingActivity.class);
startActivity(intent);
}
问题是您从未将上下文
分配给此
但是,没有理由保存活动中的上下文,只需使用MainActivity即可。这是而不是上下文
:
@Override
public void onClick(View v) {
// Toast.makeText(MainActivity.this,
// "OnClickListener : " +
// "\nSpinner 1 : " + String.valueOf(routeChoice.getSelectedItem()),
// Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this, BusTrackingActivity.class);
startActivity(intent);
}
当您在这一行中开始新的意图时:
Intent intent = new Intent(context, BusTrackingActivity.class);
上下文对象尚未启动。您之前声明:
protected Context context;
在onCreate()方法中,使用以下代码:
context = this;
当您在这一行中开始新的意图时:
Intent intent = new Intent(context, BusTrackingActivity.class);
上下文对象尚未启动。您之前声明:
protected Context context;
在onCreate()方法中,使用以下代码:
context = this;
MainActivity中的上下文为空。初始化它或使用MainActivity.this代替上下文。MainActivity中的上下文为空。初始化它或使用MainActivity.this代替上下文。从MainActivity中的第67行添加代码行,因为这是出现错误的行
但是如果没有这个,我猜按钮侦听器出了问题
话虽如此,请尝试删除所有这些:
public void addListenerOnButton() {
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
}
侦听器最好放在所使用的方法中,或者在本例中放在create上。这可以通过放置以下代码行来完成:
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
实际上,如果这不起作用,我只需要在错误处添加一段代码。如果您单击logcat中的第一个蓝色部分(其余部分将为灰色),我可以提供更多帮助。在MainActivity的第67行添加代码行,因为这是有错误的一行
但是如果没有这个,我猜按钮侦听器出了问题
话虽如此,请尝试删除所有这些:
public void addListenerOnButton() {
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
}
侦听器最好放在所使用的方法中,或者在本例中放在create上。这可以通过放置以下代码行来完成:
btnSubmit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, BusTrackingActivity.class);
startActivity(intent);
}
});
实际上,如果这不起作用,我只需要在错误处添加一段代码。如果您单击logcat中的第一个蓝色部分(其余部分将为灰色),我可以提供更多帮助。这可能是因为在第一个活动中使用了card view,或者您的应用程序在运行时崩溃的活动
使用此代码在依赖项中实现卡片视图
implementation 'androidx.cardview:cardview:1.0.0'
这可能是因为在第一个活动中使用了card view,或者在运行时应用程序崩溃的活动中使用了card view
使用此代码在依赖项中实现卡片视图
implementation 'androidx.cardview:cardview:1.0.0'
你确定你的答案与问题有关吗?你确定你的答案与问题有关吗?