![](/img/trans.png)
[英]Android application crashes at setContentView at OnCreate only on low android API
[英]Android setContentView crashes my application
我在MainActivity中創建了一個public void方法,以切換到其他布局,但是每當我調用此方法時,應用程序就會崩潰。
logcat的:
07-05 16:35:22.823 14683-14712/com.example.name.mygame I/OpenGLRenderer: Initialized EGL, version 1.4
[ 07-05 16:35:24.724 14683:14754 D/]
HostConnection::get() New Host Connection established 0xae4b2240, tid 14754
07-05 16:35:28.500 14683-14754/com.example.name.mygame I/System.out: gameOverUi called!
-------- beginning of crash
07-05 16:35:28.558 14683-14754/com.example.name.mygame E/AndroidRuntime: FATAL EXCEPTION: Thread-218
Process: com.example.name.mygame, PID: 14683
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.Window.setContentView(int)' on a null object reference
at android.app.Activity.setContentView(Activity.java:2166)
at com.example.name.mygame.MainActivity.gameOverUi(MainActivity.java:15)
at com.example.name.mygame.GameView.gameOver(GameView.java:16)
at com.example.name.mygame.GameView.onDraw(GameView.java:188)
at com.example.name.mygame.GameLoopThread.run(GameLoopThread.java:37)
07-05 16:35:30.070 14683-14754/com.example.name.mygame I/Process: Sending signal. PID: 14683 SIG: 9
主要活動:
package com.example.name.mygame;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new GameView(this));
}
public void gameOverUi(){
System.out.println("gameOverUi called!");
setContentView(R.layout.gameover); //Crash here
}
}
GameView類:
package com.example.name.mygame;
import android.content.Context;
import android.view.SurfaceView;
public class GameView extends SurfaceView {
MainActivity mActivity = new MainActivity();
public GameView(Context context) {
super(context);
//unimportant stuff
}
private void gameOver(){
mActivity.gameOverUi();
}
}
如何在不導致應用程序崩潰的情況下更改內容視圖? 任何答案將不勝感激,謝謝。
MainActivity mActivity = new MainActivity();
這是你的問題。
這樣,您可以創建MainActivity的新分配,但不會引用MainActivity。 為此,您有一個空點異常。
避免這種情況。
你是不是引用您的MainActivity
正確類內GameView
-當你正在創建一個新的對象,而不是讓你一個參考Activity
內容顯示。 這不是訪問活動的正確方法。
由於Activity
從Context
繼承的,因此理論上您可以執行以下操作:
public class GameView extends SurfaceView {
private MainActivity mActivity;
//Create new constructor to get the Activity
public GameView(Activity activity) {
super(activity);
mActivity = (MainActivity) activity;
}
private void gameOver(){
mActivity.gameOverUi();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.