Android 处理程序(ImageView)出现问题
我想显示两个图像(一个在连接时,第二个在断开连接时),我正在使用处理程序来处理,但是,我没有显示这两个图像中的任何一个,不知道为什么:Android 处理程序(ImageView)出现问题,android,handler,Android,Handler,我想显示两个图像(一个在连接时,第二个在断开连接时),我正在使用处理程序来处理,但是,我没有显示这两个图像中的任何一个,不知道为什么: private Runnable handleUpdateStatus = new Runnable() { Boolean mRegistered; public void run() { ImageView statusImageDisplay = (ImageVi
private Runnable handleUpdateStatus = new Runnable()
{
Boolean mRegistered;
public void run()
{
ImageView statusImageDisplay = (ImageView)findViewById(R.id.connected);
if (mRegistered)
{
statusImageDisplay.setImageDrawable(getResources().getDrawable(R.drawable.connected));
Log.i("CONNECTED","IMAGE SET");
}
else
{
statusImageDisplay.setImageDrawable(getResources().getDrawable(R.drawable.disconnected));
Log.i("DISCONNECTED","IMAGE SET");
}
}
};
更改图像代码摘录:
public void onRegistrationDone(String localProfileUri, long expiryTime) {
updateStatus("Enregistré au serveur.");
Log.d("SUCCEED","Registration DONE");
mRegistered = true;
mRegistrationUpdateHandler.removeCallbacks(handleUpdateStatus);
mRegistrationUpdateHandler.postDelayed(handleUpdateStatus, 4000);
}
注册失败时该怎么办?此代码:
public void onRegistrationFailed(String localProfileUri, int errorCode,String errorMessage) {
updateStatus("Enregistrement échoué. Veuillez vérifier vos paramètres.");
Log.d("ERROR REGISTRATION",errorMessage);
mRegistered = false;
mRegistrationUpdateHandler.removeCallbacks(handleUpdateStatus);
mRegistrationUpdateHandler.postDelayed(handleUpdateStatus, 2000);
}
XML:
你知道如何解决这个问题吗?
非常感谢。您(必须)将mRegistered
变量声明两次,并且在设置全局变量(在活动中声明的变量)的值时,检查另一个变量的值,该变量在handleUpdateStatus Runnable中声明
您应该稍微清理一下代码:
- 删除
mrregistration
声明
从您的Runnable
实现中,
//布尔值注册代码>
- 将图像设置为可通过资源绘制
身份证
它将发挥作用:
private boolean mRegistered;
private Runnable handleUpdateStatus = new Runnable()
{
public void run()
{
ImageView statusImageDisplay = (ImageView) findViewById(R.id.connected);
if (mRegistered)
{
statusImageDisplay.setImageResource(R.drawable.connected);
Log.i("CONNECTED", "IMAGE SET");
}
else
{
statusImageDisplay.setImageResource(R.drawable.disconnected);
Log.i("DISCONNECTED", "IMAGE SET");
}
}
};
这就是您需要更改的全部内容(假设您的布局中确实包含一个id已连接的图像
)
更新
关于mrRegistrationUpdateHandler
,您应该将其声明为活动的全局变量(final或在onCreate
方法中初始化):
或
@你更正代码了吗?(您编辑了它:\)我已将xml代码格式化为更具可读性,并替换了空元素的
关闭标记(使用
)。您可以通过单击“已编辑”单词后面的时间链接来查看修改。@rekaszeru:Clear;)。但你知道问题的根源吗\会发生什么?是否调用了run方法(Log appers)?如果在Runnable
类中未声明mRegistered成员,则这是正确的!但事实是:你应该移除它!请参阅我的帖子以获得一个工作代码:)非常感谢您的回答,但请注意:handleUpdateStatus变量是否应该像private Handler mrRegistrationUpdateHandler一样将其定义为全局变量?onRegistrationDone和onRegistrationFailed函数使用它。(因为它一直不工作)我这样做了,并认为代码中也有这样的功能。请参考我的更新。你是个天才。非常感谢,现在可以用了。我的梦想是成为一名像你一样的优秀开发人员:)(这不是一种恭维,因为你对自己的答案很有耐心,而且你总是试图在stackoverflow中提供帮助,你的答案总是很详细)。谢谢。不客气:)我在这里也学到了很多,通过这些问题,我仍然在做/训练(Android还不是教材,所以我想这是收集最佳实践的最佳地方)。
private boolean mRegistered;
private Runnable handleUpdateStatus = new Runnable()
{
public void run()
{
ImageView statusImageDisplay = (ImageView) findViewById(R.id.connected);
if (mRegistered)
{
statusImageDisplay.setImageResource(R.drawable.connected);
Log.i("CONNECTED", "IMAGE SET");
}
else
{
statusImageDisplay.setImageResource(R.drawable.disconnected);
Log.i("DISCONNECTED", "IMAGE SET");
}
}
};
private final Handler mRegistrationUpdateHandler = new Handler();
private Handler mRegistrationUpdateHandler;