2016-10-05 3 views
1

Как обновить мою кнопку пользовательского интерфейса для отключенной кнопки вкл/выкл, если у меня есть условие. Условие: если я получаю значение = 1.0, питание кнопки отключено &, и если я получу значение 0, то выключение питания отключено. Я хочу, чтобы кнопка всегда отображала новое значение.Asynctask для кнопки обновления

Это мой код:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.fragment_controller, container, false); 
     mSwitchStatus = (TextView) rootView.findViewById(R.id.statusSwitch); 
     ImageButton On = (ImageButton)rootView.findViewById(R.id.on); 
     ImageButton Off = (ImageButton)rootView.findViewById(R.id.off); 


     callAsynchronousTask(); 

      On.setOnClickListener(new View.OnClickListener() 
      { 
       @Override 
       public void onClick(View v) 
       { 
        Toast.makeText(getActivity().getApplication(), "ON", Toast.LENGTH_SHORT).show(); 
        SendApi sendApi = new SendApi(); 
        sendApi.execute(); 
       } 
      }); 

      Off.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) 
       { 
        Toast.makeText(getActivity().getApplication(), "OFF", Toast.LENGTH_SHORT).show(); 
        SendApi sendApi = new SendApi(); 
        sendApi.execute(); 
       } 
      }); 
     // Inflate the layout for this fragment 
     return rootView; 
    } 

Повторите AsyncTask

public void callAsynchronousTask() { 
     final Handler handler = new Handler(); 
     Timer timer = new Timer(); 
     TimerTask doAsynchronousTask = new TimerTask() { 
      @Override 
      public void run() { 
       handler.post(new Runnable() { 
        public void run() { 
         try { 
          GetApi getApi = new GetApi(); 
          getApi.execute(); 

         } catch (Exception e) { 
          android.util.Log.i("Error", "Error"); 
          // TODO Auto-generated catch block 
         } 
        } 
       }); 
      } 
     }; 
     timer.schedule(doAsynchronousTask, 0, 100); 
    } 

AsyncTask для GETApi

public class GetApi extends AsyncTask<Object, Object, Value[]> { 
     private final String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; 
     private final String SWITCHID = "xxxxxxxxxxxxxxxxxxxxxxxxx"; 
     private ImageButton On,Off ; 

     @Override 
     protected Value[] doInBackground(Object... params) { 
      ApiClient apiClient = new ApiClient(API_KEY); 
      Variable statusSwitch = apiClient.getVariable(SWITCHID); 
      Value[] variableValues = statusSwitch.getValues(); 

      return variableValues; 
     } 
     @Override 
     protected void onPostExecute(Value[] variableValues) { 

      String status = Double.toString(variableValues[0].getValue()); 
      mSwitchStatus.setText(status); 

      if(status.equals("1.0")){ 
       On.setVisibility(View.INVISIBLE); 
      } 

     } 
    } 

Fragment_controller.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#1d4851" 
    tools:context=".activity.ControllerFragment"> 

    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/off" 
     android:src="@drawable/ic_off" 
     android:background="@null" 
     android:layout_marginTop="79dp" 
     android:layout_below="@+id/textView2" 
     android:layout_alignLeft="@+id/on" 
     android:layout_alignStart="@+id/on"/> 

    <ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/on" 
     android:background="@null" 
     android:src="@drawable/ic_on" 
     android:layout_marginTop="87dp" 
     android:layout_alignTop="@+id/off" 
     android:layout_centerHorizontal="true"/> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" Water Pump Controller " 
     android:id="@+id/textView2" 
     android:textColor="#ffffff" 
     android:textSize="20dp" 
     android:layout_marginTop="19dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text=" " 
     android:id="@+id/statusSwitch" 
     android:textColor="#ffffff" 
     android:textSize="20dp" 
     android:layout_marginTop="250dp" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" /> 

</RelativeLayout> 
+0

какая ошибка вы получаете в этом коде? –

+0

ничего, но кнопка не обновлена, если я изменю status.getText(). ToString(). Equals ("1.0"); мои приложения crash @AnwarKamal – redim

+0

сделать его status.getText(). toString(). equals ("1"); –

ответ

0

у вас есть initialize вашей кнопки в onCreateView как

ImageButton On = (ImageButton)rootView.findViewById(R.id.on); 

и пытаетесь получить к нему доступ в onPostExecute(). Они не являются глобальными.

И отключить вы должны вызвать setEnable(false) не setVisibility

И вы можете также отправить его в Rathna Kumaran сказал.

public class GetApi extends AsyncTask<Object, Object, Value[]> { 
     private Button button; 
     public GetApi(Button mButton){ 
      this.button = button; 
     } 
     private final String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; 
     private final String SWITCHID = "xxxxxxxxxxxxxxxxxxxxxxxxx"; 

     @Override 
     protected Value[] doInBackground(Object... params) { 
      ApiClient apiClient = new ApiClient(API_KEY); 
      Variable statusSwitch = apiClient.getVariable(SWITCHID); 
      Value[] variableValues = statusSwitch.getValues(); 

      return variableValues; 
     } 
     @Override 
     protected void onPostExecute(Value[] variableValues) { 

      String status = Double.toString(variableValues[0].getValue()); 
      mSwitchStatus.setText(status); 

      if(status.equals("1.0")){ 
       button.setVisibility(View.INVISIBLE); 
      } 

     } 
    } 
+0

Я инициализировал кнопку изображения в основном классе – redim

+0

, где у вас есть инициация в действии или фрагменте. – Nepster

+0

в классе деятельности – redim

0

1.Создайте конструктор в AsyncTask и отправьте кнопку в качестве параметра. ех. getApi (buttonOne) .Execute();

  1. Внутри конструктора getApi() объявляется локальная переменная «Button» и назначается ей.

  2. In onPostExecute() -> buttonOne.setVisibility (View.INVISIBLE).

В asyncTask «onPostExecute()» будет выполняться в основном потоке. Элементы пользовательского интерфейса должны обновляться только в основном потоке. Чтобы передать элемент пользовательского интерфейса в Asynctask, он может быть обновлен внутри onPostExecute.

+0

Можете ли вы привести пример – redim

+0

CallAsync (myButton) .execute(); класс CallAsync расширяет AsyncTask <> {Кнопка кнопки; CallAsync (кнопка) {this.button = button; } doInBackgrounds() {....} onPostExecute() {button.setVisibility (View.INVISIBLE)}} –

Смежные вопросы