这就是我想要做的:我有一个带有一些按钮的网站。该网站连接到我的Android应用程序(通过spacebrew)。根据什么按钮,我单击ImageButton的背景更改。但每次我点击按钮“setBackground”都会抛出异常。
这是我的代码:
public class MainActivity extends Activity{
ImageButton display;
SpacebrewClient client;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
}
...
//calls the method "changeDisplay"
client.addSubscriber("changeDisplay", SpacebrewMessage.TYPE_STRING, "changeDisplay");
}
public void changeDisplay(String input){
if(input.equals("topay")){
display = (ImageButton)findViewById(R.id.imageButton1);
display.setBackground(getResources().getDrawable(R.drawable.display_2));
}
...
}
}
我找到了这个可能的解决方案:first answer。但这似乎对我不起作用。 我仍然得到同样的例外。
编辑: 尝试了第二个解决方案。现在“setBackground”抛出NullPointerException。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
display = (ImageButton)findViewById(R.id.imageButton1);
}
public void changeDisplay(String input){
if(input.equals("topay")){
runOnUiThread(new Runnable() {
public void run() {
display.setBackground(getResources().getDrawable(R.drawable.display_2));
}
});}
答案 0 :(得分:0)
好的,我设法解决了我的问题。这就是我所做的:
我创建了Handler
...
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
String input = bundle.getString("input");
ImageButton display = (ImageButton)findViewById(R.id.imageButton1);
if(input.equals("topay")){
display.setBackground(getResources().getDrawable(R.drawable.display_2));
}
else if ...
}
};
...然后是一个新的Runnable
,它将changeDisplay
的输入传递给Handler
。
Runnable runnable = new Runnable() {
public void run() {
Message msg = handler.obtainMessage();
Bundle bundle = new Bundle();
String message = "";
if(input.equals("topay")){
message = "topay";
}
else if ...
bundle.putString("input", message);
msg.setData(bundle);
handler.sendMessage(msg);
}
};
Thread mythread = new Thread(runnable);
mythread.start();
现在它正在运作! : - )
但是,谢谢你的帮助,无论如何!