サーバーのステータス(オンラインかオフラインか)を表示するプログラムがあります。ユーザーに読み込みを示すためにスピナーを配置し、AsyncTask でオンライン/オフライン イメージをオフにして、読み込み中にスピナーをオンにし、完了したら反対のことを行います。コードはその仕事をしますが、何らかのグリッチによって完了したように感じ、後でそれを壊す可能性があるので、今すぐ修正したいと思います. 基本的には、オンライン/オフライン イメージの変数とスピナー スワップ値の変数が何らかの方法で変更されますが、その理由はわかりません。
これが私のコードです:
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();
}
XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:background="#ffffff">
<!-- Status Starts-->
<LinearLayout android:id="@+id/status"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@layout/online"
android:paddingTop="5dip"
android:paddingBottom="5dip">
<!-- Online/Offline Start-->
<ImageView android:id="@+id/image"
android:src="@drawable/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dip"/>
<ProgressBar
android:id="@+id/loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- Online/Offline Ends -->
</LinearLayout>
<!-- Status Ends -->
<!-- Main Form -->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_below="@id/status">
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#372c24"
android:text="Home"/>
</LinearLayout>
<!-- Main Form Ends -->
</RelativeLayout>
</ScrollView>
ご覧のとおり、ステータス変数はオンライン/オフラインの画像を表示するように定義され、読み込み変数はスピナーを表示するように定義されていますが、これは正反対です。これは、この特定の機能に対してのみ発生します。