2015-03-23 2 views
-1

Когда я вызываю метод SWITCHON() из другого класса, он не работает по мере необходимости. SWITCHON() изменяет состояние устройства. Я думаю, что весь класс должен быть запущен для использования SWITCHON().Метод Вызов из другого класса

Не могли бы вы посоветовать мне, как бы я сделал SWITCHON() запуск всего класса или если его вызов будет функционировать должным образом.

примечание: этот класс ищет подобные устройства по локальной сети, используя Протокол UDP

благодаря

---- Я хочу, чтобы выполнить класс от другой деятельности ----

/** 

* It displays the list of found WeMoDevices, which can be refreshed, 
* notify about additional and removal of a WeMoDevice 
* and provide ability to control the state of the WeMoDevices 

*/ 
public class WemoActivity extends Activity implements NotificationListener, 
                OnClickListener, 
                OnItemClickListener{ 
private ListView mListView; 
private Button mRefreshButton; 
private View mProgressBar; 
public Button ONButton; 
private WeMoSDKContext mWeMoSDKContext = null; 
private String DeviceName= "uuid:Socket-1_0-221412K1100F3A"; 

public static String newState; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_wemo); 

    mListView = (ListView)findViewById(R.id.list); 
    mRefreshButton = (Button)findViewById(R.id.refresh_button); 
    mProgressBar = findViewById(R.id.progress_bar); 

    mListView.setOnItemClickListener(this); 
    mRefreshButton.setOnClickListener(this); 

    mWeMoSDKContext = new WeMoSDKContext(getApplicationContext());  
    mWeMoSDKContext.addNotificationListener(this); 

    ONButton= (Button) findViewById(R.id.ON); 






ONButton.setOnClickListener(new OnClickListener() {   
    @Override 
    public void onClick(View v) { 

    SWITCHON(); 

} 


});} 




/** 
* Refresh the list of found devices on first launch 
* and on coming into foreground 
*/ 
@Override 
protected void onStart() {  
    refresh(); 
    super.onStart(); 
} 

/** 
* Stop WeMoSDKContext on application close 
*/ 
@Override 
protected void onDestroy() { 
    mWeMoSDKContext.stop(); 
    super.onDestroy(); 
} 

/** 
* Listens the WeMoDevice events 
* Updates ListView on REFRESH_LIST event, show notification on ADD_DEVICE, REMOVE_DEVICE 
* and change state of corresponding ListItem of ListView on CHANGE_STATE event 
* 
*event the event 
*udn the UDN of WeMoDevice provided the event 
*/ 
@Override 
public void onNotify(final String event, final String udn) { 
    this.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      WeMoDevice wemoDevice = mWeMoSDKContext.getWeMoDeviceByUDN(udn); 

      if (event.equals(WeMoSDKContext.REFRESH_LIST)) { 
       ArrayList<String> udns = mWeMoSDKContext.getListOfWeMoDevicesOnLAN(); 
       ArrayList<WeMoDevice> wemoDevices = new ArrayList<WeMoDevice>(); 

       for (String udn : udns) { 
        WeMoDevice listDevice = mWeMoSDKContext.getWeMoDeviceByUDN(udn); 
        if (listDevice != null && listDevice.isAvailable()) { 
         wemoDevices.add(listDevice); 
        } 
       } 
       mListView.setAdapter(new Adapter(getApplicationContext(), 0, wemoDevices)); 
       mProgressBar.setVisibility(View.GONE);     
       mRefreshButton.setEnabled(true); 
      } else if (wemoDevice == null) { 
       //do nothing because of incorrect notification 
      } else if (event.equals(WeMoSDKContext.ADD_DEVICE)) { 
       Toast.makeText(getApplicationContext(), 
           getString(R.string.notification_add) + wemoDevice.getFriendlyName(), 
           Toast.LENGTH_SHORT).show(); 
      } else if (event.equals(WeMoSDKContext.REMOVE_DEVICE)) { 
       Toast.makeText(getApplicationContext(), 
           getString(R.string.notification_remove) + wemoDevice.getFriendlyName(), 
           Toast.LENGTH_SHORT).show(); 
      } else if (event.equals(WeMoSDKContext.CHANGE_STATE) || event.equals(WeMoSDKContext.SET_STATE)) { 
       for(int i = 0; i <= mListView.getLastVisiblePosition() - mListView.getFirstVisiblePosition(); i++) { 
        ListItem listItem = (ListItem)mListView.getChildAt(i); 
        if (listItem.getDevice().getUDN().equals(udn)) { 
         listItem.setState(wemoDevice.getState().split("\\|")[0]); 
         break; 
        } 
       } 
      }    
     } 
    }); 
} 

/** 
* The adapter to ListView 
* 

*/ 
private class Adapter extends ArrayAdapter<WeMoDevice> { 
    private ArrayList<WeMoDevice> mDevices; 

    /** 
    * Constructor 
    * 
    * context application context 
    * resource (not used) 
    * devices the array of WeMoDevices to display 
    */ 
    public Adapter(Context context, int resource, ArrayList<WeMoDevice> devices) { 
     super(context, resource, devices); 
     mDevices = devices; 
    } 

    /** 
    * Creates ListItem corresponding to WeMoDevice 
    * 
    * position the position of WeMoDevice in entry array 
    * convertView the created view, corresponded to the WeMoDevice 
    * @ parent (not used) 
    * 
    * @return created ListItem view 
    */ 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = new ListItem(getApplicationContext()); 
     } 
     ((ListItem)convertView).setDevice(mDevices.get(position)); 

     return convertView; 
    } 
} 

/** 
* Handle the click on refresh button 
* and update the device list 
*/ 
@Override 
public void onClick(View view) { 
    if (view.getId() == R.id.refresh_button) { 
     refresh(); 
    }  
} 

/** 
* Updates the list of WeMoDevices in WeMoSDKContext 
*/ 
private void refresh() { 
    mProgressBar.setVisibility(View.VISIBLE); 
    mRefreshButton.setEnabled(false); 
    mWeMoSDKContext.refreshListOfWeMoDevicesOnLAN(); 
} 

/** 
* Change the state of a WeMoDevice 
* 
* list ListView 
* view ListItem 
* position the position of current ListItem in ListView 
* id the id of the current view 
*/ 
@Override 
public void onItemClick(AdapterView<?> list, View view, int position, long id) { 



    WeMoDevice device = ((ListItem)view).getDevice(); 



    // change the state of switches 

    String state = device.getState().split("\\|")[0]; 


     newState = WeMoDevice.WEMO_DEVICE_ON; 

     if (state.equals(WeMoDevice.WEMO_DEVICE_ON) || state.equals(WeMoDevice.WEMO_DEVICE_STAND_BY)) { 
      newState = WeMoDevice.WEMO_DEVICE_OFF; 
     } 

     mWeMoSDKContext.setDeviceState(newState, device.getUDN()); 
     ((ListItem)view).setState(WeMoDevice.WEMO_DEVICE_UNDEFINED); 
} 


public void SWITCHON(){ 



    mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_ON, DeviceName); 
} 

public void SWITCHOFF(){ 


    mWeMoSDKContext.setDeviceState(WeMoDevice.WEMO_DEVICE_OFF, DeviceName); 
} 



} 
+0

устройство должно быть найдено первым, чтобы метод работал и менял состояние. как я могу заставить весь класс работать из другого класса – Abby

ответ

0

Вы должны поместить свой метод WeMoSDKContext и switchOn() в отдельный класс, доступ к которому вы можете получить из любой Activity (например, ManagerWeMo). Затем вы можете вызвать ManagerWeMo.switchOn().

UPDATE:

Независимо от кода вы должны быть выполнены, должны содержаться в ManagerWeMo. Если в вашей Деятельности есть код, который зависит от результата того, что делает ManagerWeMo, тогда настройте свой Activity как интерфейс прослушивателя, передайте его ManagerWeMo и сообщите отчет ManagerWeMo о своей деятельности.

+0

так я бы назвал метод из другого класса, который я предполагаю? да, я сделал это. но у меня есть проблема в том, что методу нужен весь класс для выполнения, который, когда он будет вызван, изменит состояние. вызывая его из другого класса, не выполняя весь класс = не вызывается, если вы меня понимаете. – Abby

+0

Спасибо, что постарались мне помочь! хорошо, я думаю, что это то, что мне нужно сделать, и что вы меня понимаете. не могли бы вы просто попытаться объяснить это немного больше в смысле кода для меня, как Im начинающий :) и есть ли более простой способ? – Abby

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