Android ToggleButton崩溃(资源NullPointerException)



我是android的新手,我刚刚熟悉了它,我偶然发现了这个抓取资源的问题。我已经在主布局上添加了一个切换按钮,但是当我访问资源,然后尝试用button.setText()更改文本时,应用程序崩溃了。

下面是相关的代码清单:

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获取资源时,应用程序崩溃了。如果我把这个按钮放在另一个类的应用程序崩溃的setText()。我不知道为什么它不正确地获取资源,可能的布局问题?

任何帮助都会很感激。谢谢。欢呼。

Val

第一部分解决了:清理项目并重新启动ECLIPSE。(lol)

编辑(仍然开放可能的解决方案):似乎重新启动Eclipse解决了这个问题(以前清理项目和重新启动不起作用…),去看看。

但我的问题是一种跟进,如果我从另一个类获取按钮资源,它仍然崩溃在setText()或任何其他尝试修改按钮的属性(只要调试器说它也应该是NullPointerException)。我在某个地方读到,一个按钮资源是有效的,如果在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");
    }
    ..

我知道,这段代码没有多大意义,应该工作。任何想法,为什么以前的尝试获取资源工作,而不是在另一个类?Tnx .

编辑:

这是我的日志,抱歉耽搁了。

08-17 00:48:46.891: WARN/dalvikvm(30139): threadid=1: thread exiting with uncaught exception (group=0x400207d8)

FATAL EXCEPTION: main

. lang。运行时异常:无法启动活动ComponentInfo {com.games.tiktakboom/com.games.tiktakboom.TikTakBoom}:android.view.InflateException:二进制XML文件行#6:错误

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(在获取的资源上)。剩下的我看不清了。任何帮助都将是感激的,因为我似乎无法解决这个问题。谢谢,欢呼声。

编辑:也许是上下文的问题?在构造新线程时,将上下文传递给构造函数。我是否必须手动从传递的上下文变量或其他东西获取资源?

请尝试:

startButton.setTextOn("test");
startButton.setTextOff("test");

相关内容

最新更新