Android变量在AsyncTask中交换值
我有一个显示服务器状态的程序(无论是在线还是离线)。我放了一个微调器,向用户显示它的加载,在AsyncTask中,我关闭在线/离线图像,在加载时打开微调器,在加载完成时做相反的事情。代码完成了它的工作,但我觉得它是由一些小故障完成的,可能会在以后的工作中破坏它,所以我想现在就修复它。基本上,发生的是在线/离线图像的变量和微调器交换值的变量。我不知道为什么 这是我的密码:Android变量在AsyncTask中交换值,android,variables,android-asynctask,swap,Android,Variables,Android Asynctask,Swap,我有一个显示服务器状态的程序(无论是在线还是离线)。我放了一个微调器,向用户显示它的加载,在AsyncTask中,我关闭在线/离线图像,在加载时打开微调器,在加载完成时做相反的事情。代码完成了它的工作,但我觉得它是由一些小故障完成的,可能会在以后的工作中破坏它,所以我想现在就修复它。基本上,发生的是在线/离线图像的变量和微调器交换值的变量。我不知道为什么 这是我的密码: public View background; public View status; public View loading
public View background;
public View status;
public View loading;
class CheckStatusTask extends AsyncTask<Void, Void, Boolean> {
//show loading
protected void onPreExecute(){
status.setVisibility(View.VISIBLE);<-- this shows the spinner but should show online/offline
//loading.setVisibility(View.INVISIBLE);<-- this shows the online/offline but should show the spinner
}
//check if server is online
protected Boolean doInBackground(Void... params) {
return CheckStatus.check();
}
//set status bar to offline if flag is false
protected void onPostExecute(Boolean flag) {
status.setVisibility(View.INVISIBLE);<-- this shows the spinner but should show online/offline
//loading.setVisibility(View.VISIBLE);<-- this shows the online/offline but should show the spinner
if(!flag){
background.setBackgroundResource(R.layout.offline);
status.setBackgroundResource(R.drawable.offline);<-- correct
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
background = findViewById(R.id.status);
status = findViewById(R.id.image);
loading = findViewById(R.id.loading);
new CheckStatusTask().execute();
}
公众视野背景;
公众舆论状况;
公众视图加载;
类CheckStatusTask扩展异步任务{
//显示加载
受保护的void onPreExecute(){
status.setVisibility(View.VISIBLE);
通过这条线,您可以将线性布局的背景设置为res/layout/
文件夹中的可绘制形状
可绘制资源,如形状可绘制资源,应放在res/drawable/
文件夹中。将其存储在布局文件夹中会混淆资源的R.id值。我不知道问题以这种方式出现的确切原因。但是将那些online.xml和offline.xml移到res/drawa中ble/
并删除res/layout/
中的那些应该可以修复它
移动文件后,将上面的行更改为:
android:background="@drawable/online"
有关xml可绘制资源的更多信息,请参阅
通过这条线,您可以将线性布局的背景设置为res/layout/
文件夹中的可绘制形状
可绘制资源,如形状可绘制资源,应放在res/drawable/
文件夹中。将其存储在布局文件夹中会混淆资源的R.id值。我不知道问题以这种方式出现的确切原因。但是将那些online.xml和offline.xml移到res/drawa中ble/
并删除res/layout/
中的那些应该可以修复它
移动文件后,将上面的行更改为:
android:background="@drawable/online"
有关xml可绘制资源的更多信息,请参阅。在这一行中android:background=“@layout/online”
layout/online
指向什么?通过将版面资源设置为线性布局的背景,您试图实现什么?online指向一个图像,而drawable offline指向另一个图像。这很好,在添加微调器之前,我已经在其中了。我唯一的问题是状态and在将变量设置为可见和不可见时加载变量,因为它们被交换。如果它是一个图像,它看起来应该是@drawable/online
而不是@layout/online
,它将从布局文件夹中获取online.xml
文件。另外,尝试注释掉AsyncTask.start()现在,在findViewById()调用之后立即添加这个status.setVisibility(View.INVISIBLE);
。如果这样做正确地隐藏了状态,或者状态也混乱了,则返回报告。通过AsyncTask.start()您指的是新的CheckStatusTask().execute()吗;而且我的想法也不正确,@layout/online指向一个xml文件,该文件设置了背景颜色,背景颜色根据状态从绿色变为红色。是的,请将其注释掉,然后尝试在onCreate()中设置状态的可见性,以查看它是否正确工作在这一行android:background=“@layout/online”
layout/online指向什么?通过将版面资源设置为线性布局的背景,您试图实现什么?online指向一个图像,而drawable offline指向另一个图像。这很好,在添加微调器之前,我已经在其中了。我唯一的问题是状态and在将变量设置为可见和不可见时加载变量,因为它们被交换。如果它是一个图像,它看起来应该是@drawable/online
而不是@layout/online
,它将从布局文件夹中获取online.xml
文件。另外,尝试注释掉AsyncTask.start()现在,在findViewById()调用之后立即添加这个status.setVisibility(View.INVISIBLE);
。如果这样做正确地隐藏了状态,或者状态也混乱了,则返回报告。通过AsyncTask.start()您指的是新的CheckStatusTask().execute()吗;而且我的想法也不正确,@layout/online指向一个xml文件,该文件设置了背景颜色,背景颜色根据状态从绿色变为红色。是的,请对此进行注释,然后尝试在onCreate()中设置状态的可见性为了查看它是否正常工作,我重新启动了仿真器并修复了它自己。我重新启动了仿真器并修复了它自己
android:background="@drawable/online"