Android 在onClick方法中启动第二个活动时,我的应用程序总是崩溃

Android 在onClick方法中启动第二个活动时,我的应用程序总是崩溃,android,button,android-intent,onclick,onclicklistener,Android,Button,Android Intent,Onclick,Onclicklistener,我的应用程序有两个活动:MainActivity和DrawingActivity。在Main活动中显示一个按钮,在DrawingActivity中显示GLSurfaceview上的摄像头预览。其思想是,启动应用程序时,首先运行Main活动,然后按下按钮,跳转到DrawingActivity,在该活动中初始化相机并显示相机预览。为此,我尝试在连接到按钮的onClickLIstener回调中定义intent对象。问题是,每次我按下按钮,我的应用程序都会在GLSurfaceViewclass上调用pr

我的应用程序有两个活动:MainActivity和DrawingActivity。在Main活动中显示一个按钮,在DrawingActivity中显示GLSurfaceview上的摄像头预览。其思想是,启动应用程序时,首先运行Main活动,然后按下按钮,跳转到DrawingActivity,在该活动中初始化相机并显示相机预览。为此,我尝试在连接到按钮的
onClickLIstener
回调中定义
intent
对象。问题是,每次我按下按钮,我的应用程序都会在
GLSurfaceView
class上调用private void
stopEglSurfaceLocked()
method而崩溃

有趣的是,如果我在
onClick
方法之外定义
intent
,一切正常

以下是一些相关代码:

主要活动:

public class MainActivity extends Activity {

private Button btnStart;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
    btnStart = (Button) findViewById(R.id.btnDisplay);

    btnStart.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
        MainActivity.this.startActivity(intent);
        finish();

        }
    });

  }
Manifest.xml:

<application
    android:name="com.example.opengltest.AssetsCache"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 
    android:largeHeap="true">
    <activity
        android:name="com.example.opengltest.MainActivity"
        android:label="@string/app_name" 
        android:screenOrientation="landscape">
        <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="com.example.opengltest.DrawingActivity"
        android:screenOrientation="landscape">
    </activity>
</application>
重要:
虽然DrawingActivity类中似乎存在一些错误,但事实并非如此。如果我把Drawing Activity类作为主类,那么它在一开始就被调用了(没有意图),一切都正常。确切地说,DrawingActivity类不是罪魁祸首,一切似乎都表明问题出在意图中。我正在执行某些操作,DrawingActivity类没有按预期运行。

您已将
onClickListener设置为:

btnStart.setOnClickListener(new OnClickListener() {
 ...
这是不正确的,请按如下方式使用它在Android中处理对视图的单击:

btnStart.setOnClickListener(new View.OnClickListener() {
 ...
阅读更多:

只需在
onClick
方法中启动您的意图:

Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
startActivity(intent);
finish();

您已将
onClickListener
设置为:

btnStart.setOnClickListener(new OnClickListener() {
 ...
这是不正确的,请按如下方式使用它在Android中处理对视图的单击:

btnStart.setOnClickListener(new View.OnClickListener() {
 ...
阅读更多:

只需在
onClick
方法中启动您的意图:

Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
startActivity(intent);
finish();

使用try/catch/finally块启动DrawingActivity并完成Main活动:

btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try
            {
                //Try starting the Drawing activity
                Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
                startActivity(intent);
            }
            catch(Exception ex)
            {
                //A problem occured, check Logcat
                ex.printStackTrace();
            }
            finally 
            {
                //DrawingActivity successfully started
                //So, finish the MainActivity
                finish();
            }
        }
    });

使用try/catch/finally块启动DrawingActivity并完成Main活动:

btnStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try
            {
                //Try starting the Drawing activity
                Intent intent = new Intent(MainActivity.this, DrawingActivity.class);
                startActivity(intent);
            }
            catch(Exception ex)
            {
                //A problem occured, check Logcat
                ex.printStackTrace();
            }
            finally 
            {
                //DrawingActivity successfully started
                //So, finish the MainActivity
                finish();
            }
        }
    });


你能分享你的错误日志吗?你确定崩溃是因为启动了第二个活动还是与第一个有关?请分享崩溃日志你能分享你的绘图活动和错误日志吗?我发布了错误日志。我理解这个错误,null指针,我不理解的是为什么只有在我启动onclicklisterner回调中的活动时才会发生这个错误…
09-01 12:03:04.117:E/AndroidRuntime(13981):java.lang.NullPointerException:尝试调用虚拟方法'void android.graphics.SurfaceTexture.UpdateMaximage()'在空对象引用上
错误来自您的DrawingActivity类,请也发布此类。您是否可以共享您的错误日志您确定崩溃是因为启动第二个活动还是与第一个活动有关?请分享崩溃日志你能分享你的绘图活动和错误日志吗?我发布了错误日志。我理解这个错误,null指针,我不理解的是为什么只有在我启动onclicklisterner回调中的活动时才会发生这个错误…
09-01 12:03:04.117:E/AndroidRuntime(13981):java.lang.NullPointerException:尝试调用虚拟方法'void android.graphics.SurfaceTexture.UpdateMaximage()'在空对象引用上
错误来自您的DrawingActivity类,请也发布此类。谢谢您的回复,但即使您建议进行更改,问题仍然存在:(错误表明您的DrawingActivity存在问题,请在问题中发布您的DrawingActivity代码。谢谢您的回复,但即使您建议进行更改,问题仍然存在:(错误表明您的DrawingActivity存在问题,请在问题中发布您的DrawingActivity代码。您好,这与您的意图无关,我们需要DrawingActivity类的代码?请共享它,以便我们可以帮助您;)不幸的是,我不被允许分享这段代码,我知道这太糟糕了……但是,我认为问题不存在。正如我所说的,如果我将intent定义和startactivity方法移到onClickListenerMethod之外,它会工作得很好。DrawingActivity没有问题,事实上这个类已经作为mai工作了好几个月n活动没有问题…您好,这与您的意图无关,我们需要DrawingActivity类的代码?请共享它,以便我们可以帮助您;)不幸的是,我不被允许分享这段代码,我知道这太糟糕了……但是,我认为问题不存在。正如我所说的,如果我将intent定义和startactivity方法移到onClickListenerMethod之外,它会工作得很好。DrawingActivity没有问题,事实上这个类已经作为mai工作了好几个月n没有问题的活动。。。