Android切换按钮崩溃(资源NullPointerException)

Android切换按钮崩溃(资源NullPointerException),android,resources,togglebutton,Android,Resources,Togglebutton,我是android新手,刚刚熟悉它,在获取资源时遇到了这个问题。我在主布局中添加了一个切换按钮,但当我访问资源,然后尝试使用按钮更改文本时,setText()应用程序崩溃 以下是相关代码列表: main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layou

我是android新手,刚刚熟悉它,在获取资源时遇到了这个问题。我在主布局中添加了一个切换按钮,但当我访问资源,然后尝试使用
按钮更改文本时,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>
顺便说一句,这是我在某个论坛上得到的一个修改模板,这就是为什么会有奇怪的评论

当我尝试使用
findviewbyd
获取te资源时,应用程序立即崩溃。如果我将此按钮放在另一个类中,应用程序将在
setText()上崩溃。我不知道为什么它不能正确获取资源,布局可能有问题

任何帮助都将不胜感激。谢谢干杯

瓦尔

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

编辑(仍为可能的解决方案打开): 重新启动Eclipse似乎解决了这个问题(清理项目,重新启动之前不起作用…),如图所示

但我的问题是,如果我从另一个类获取按钮资源,它仍然会在
setText()
或任何其他atempt上崩溃,以修改按钮的属性(据调试器所说,它也应该是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");
    }
    ..
我知道,这个代码没有多大意义,应该可以。。关于为什么以前的atempt获取资源有效而不在另一个类中有效,有什么想法吗?Tnx

编辑:

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

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

java.lang.RuntimeException:无法启动活动 组件信息{com.games.tiktakboom/com.games.tiktakboom.tiktakboom}: android.view.InflateException:二进制XML文件行#6:错误 充气类com.games.tiktakboom.GameView

原因:android.view.InflateException:二进制XML文件行#6: 对类com.games.tiktakboom.GameView进行充气时出错

原因:java.lang.reflect.InvocationTargetException

com.games.tiktakboom.GameView.(GameView.java:354)
位于java.lang.reflect.Constructor.constructNative(本机方法)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:446)
在android.view.LayoutInflater.createView中(LayoutInflater.java:500)
... 还有21个
原因:java.lang.NullPointerException

com.games.tiktakboom.GameView$GameThread.(GameView.java:101)
... 25多
强制完成活动com.games.tiktakboom/.tiktakboom

如上所述,日志指向一个NullPointerException(在获取的资源上)。其余的我看不清了。任何帮助都将不胜感激,因为我似乎无法解决这个问题。谢谢,干杯

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

请尝试:

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

您是否尝试清理项目。这解决了很多资源问题,这真的很奇怪,我确实尝试了清理,这是我的第一个想法,我重新启动了eclipse,但没有工作。现在我也做了同样的事情,而且效果很好。。如果我从另一个类中获取资源仍然不起作用,那么是否有一个特殊的原因需要在Activity类中获取按钮资源?。。谢谢你的帮助,我会暂时打开帖子并编辑我的帖子。
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)
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
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
at com.games.tiktakboom.GameView$GameThread.<init>(GameView.java:101)
... 25 more
startButton.setTextOn("test");
startButton.setTextOff("test");