我是新來的android和我剛剛讓自己熟悉它,我已經無意中提取資源的這個問題。我在主佈局上添加了一個切換按鈕,但是當我訪問資源並嘗試用button.setText()
更改文本時,應用程序崩潰。Android的ToggleButton崩潰(資源NullPointerException)
下面是相關代碼:
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.games.tiktakboom.GameView
android:id="@+id/game"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<ToggleButton android:layout_width="120px" android:id="@+id/toggleButton1" android:layout_height="120px" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:background="@drawable/bomb"></ToggleButton>
</RelativeLayout>
MainActivity.java
public class TikTakBoom extends Activity {
...
public ToggleButton startButton;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// turn off the window's title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
// tell system to use the layout defined in our XML file
setContentView(R.layout.main);
// get handles to the LunarView from XML, and its LunarThread
mGameView = (GameView) findViewById(R.id.game);
mGameThread = mGameView.getThread();
// set up a new game
mGameThread.setState(GameThread.STATE_READY);
Log.w(this.getClass().getName(), "SIS is null");
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mSensorManager.registerListener(mGameThread, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
startButton = (ToggleButton)findViewById(R.id.toggleButton1);
startButton.setText("test");
}
...
順便說一句,這是一個修改後的模板我在一些論壇或得到的東西,這就是爲什麼奇怪的評論。
一旦我嘗試使用findViewById
來獲取te資源,該應用就會崩潰。如果我把這個按鈕放在另一個類中,那麼應用程序在setText()
上崩潰。我不知道爲什麼它不正確地獲取資源,可能是佈局的問題?
任何幫助,將不勝感激。謝謝。乾杯。
瓦爾
第一部分解決:清潔工程和重新啓動Eclipse。 (笑)
編輯(仍然可能的解決方案): 似乎重新啓動Eclipse解決了問題(乾淨的項目和重新啓動之前沒有工作..),去圖。
但我的問題是排序的跟進,如果我取從另一個類它仍然崩潰的setText()
或任何其他atempt修改按鈕的屬性按鈕資源(只要調試器說,它也應該是空指針異常) 。我讀過一個地方,一個按鈕資源只有在Activity類中取得時纔有效,當時我不相信它。有沒有這個或更好的真理,有什麼理由呢?
相關的代碼段:
class GameView extends SurfaceView implements SurfaceHolder.Callback {
class GameThread extends Thread implements SensorEventListener {
..
ToggleButton startButton;
..
public GameThread(SurfaceHolder surfaceHolder, Context context,
Handler handler) {
// get handles to some important objects
mSurfaceHolder = surfaceHolder;
mHandler = handler;
mContext = context;
mBomb = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bomb);
startButton = (ToggleButton)findViewById(R.id.toggleButton1);
}
..
/* Callback invoked when the surface dimensions change. */
public void setSurfaceSize(int width, int height) {
// synchronized to make sure these all change atomically
synchronized (mSurfaceHolder) {
mCanvasWidth = width;
mCanvasHeight = height;
}
mBomb = Bitmap.createScaledBitmap(mBomb, (int)(mCanvasHeight/4), (int)(mCanvasHeight/4), true);
startButton.setTextOn("test");
}
..
我知道,這個代碼並沒有太大的意義,應該工作壽..任何想法,爲什麼以前atempt獲取資源的工作,而不是在另一類? TNX。編輯:
這是我的logcat,抱歉的延遲。
08-17 00:48:46.891: WARN/dalvikvm(30139): threadid=1: thread exiting with uncaught exception (group=0x400207d8)
致命異常:主
了java.lang.RuntimeException:無法啓動活動 ComponentInfo {com.games.tiktakboom/com.games.tiktakboom.TikTakBoom}: android.view。 InflateException:二進制XML文件6號線:錯誤 充氣類com.games.tiktakboom.GameView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2669)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2685)
at android.app.ActivityThread.access$2300(ActivityThread.java:126)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2038)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4633)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
at dalvik.system.NativeStart.main(Native Method)
引起:android.view。InflateException:二進制XML文件線#6: 錯誤充氣類com.games.tiktakboom.GameView
at android.view.LayoutInflater.createView(LayoutInflater.java:513)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:200)
at android.app.Activity.setContentView(Activity.java:1647)
at com.games.tiktakboom.TikTakBoom.onCreate(TikTakBoom.java:100)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2633)
... 11 more
所致:java.lang.reflect.InvocationTargetException
at com.games.tiktakboom.GameView.<init>(GameView.java:354)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.view.LayoutInflater.createView(LayoutInflater.java:500)
... 21 more
造成的:顯示java.lang.NullPointerException
at com.games.tiktakboom.GameView$GameThread.<init>(GameView.java:101)
... 25 more
力整理活動com.games.tiktakboom/.TikTakBoom
至於說,日誌指向一個NullPointerException(在獲取資源)。我無法解決其餘問題。任何幫助,將不勝感激,因爲我不能似乎能夠解決這個問題。謝謝,歡呼聲。
編輯: 或許與環境的問題嗎?在構建新線程時,上下文將傳遞給構造函數。我是否必須手動從傳遞的上下文變量中獲取資源?
你可以發表你的logcat的? –
你有沒有嘗試清理項目。這修復了大量的資源問題 – Pyrodante
確定這是很奇怪的,我沒有嘗試乾淨,那是我的第一個想法,我重新啓動Eclipse的,沒有工作。現在,我也同樣和它的作品..芹苴它仍然如果我從另一個類獲取資源是不行的,是有原因的按鈕資源有活動類中要獲取一個特別的原因?..謝謝你的幫助,我會保持線程現在打開並編輯我的帖子。 – valekovski