Android切换按钮崩溃(资源NullPointerException)
我是android新手,刚刚熟悉它,在获取资源时遇到了这个问题。我在主布局中添加了一个切换按钮,但当我访问资源,然后尝试使用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
按钮更改文本时,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");