I have a service that is running fine and I can see the data collecting in the logcat,
However after creating an aidl and trying to get the information from the service to my main activity I have hit a problem. I just cant seem to get the data to pass across at all, I always get a null pointer exception. Here is my service class, I want to get the connectedLevel int to use in my activity class. Is it because I'm not binding properly or what am I missing but any calls to the remote interface to try and get the data ends up with a null pointer exception. My activity class code is posted underneath. -------------------- Service class public class WIFIService extends Service{ private static final int WIFI_NOTIFY = 0x2001; public static final String EXTRA_UPDATE_RATE = "update-rate"; public static final String WIFI_SERVICE = "cicero.org.WIFIService.SERVICE"; private WifiManager mainWifi; private BroadcastReceiver rssiListener = null; private int updateRate = -1; private int connectedLevel; @Override public void onCreate(){ super.onCreate(); mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); notifier = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE); } @Override public void onStart(Intent intent, int startId){ super.onStart(intent, startId); updateRate = intent.getIntExtra(EXTRA_UPDATE_RATE, -1); if(updateRate == -1){ updateRate = 60000; } rssiListener = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(WifiManager.RSSI_CHANGED_ACTION.equals(action)) { WifiInfo data = mainWifi.getConnectionInfo(); Log.d("WIFI SERVICE", "RSSI has changed"); if(mainWifi.getConnectionInfo()!=null){ setConnectedLevel(data.getRssi()); Log.d("WIFI SERVICE", "new RSSI = " + data.getSSID()+ " " + data.getRssi() + "dBm"); } } } }; } @Override public void onDestroy(){ if(rssiListener != null){ unregisterReceiver(rssiListener); rssiListener = null; } if(wifiChangeListener != null){ unregisterReceiver(wifiChangeListener); wifiChangeListener = null; } if(receiverWifi != null){ unregisterReceiver(receiverWifi); receiverWifi = null; } super.onDestroy(); } public void setConnectedLevel(int connectedLevel) { this.connectedLevel = connectedLevel; } @Override public IBinder onBind(Intent intent) { // we only have one, so no need to check the intent return mRemoteInterfaceBinder; } // remote interface private final IRemoteInterface.Stub mRemoteInterfaceBinder = new IRemoteInterface.Stub() { @Override public int getConnectedLevel() throws RemoteException { Log.v("interface", "getConnectedLevel() called"); return connectedLevel; } }; } -------------------- Activity class public class TestApp extends Activity implements ServiceConnection{ IRemoteInterface mRemoteInterface = null; int connectedLevel; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); CallMonitor cm = new CallMonitor(this); wifi = new WiFi(this); final Button settings_Button = (Button) findViewById (R.id.settingsButton); settings_Button.setOnClickListener(new View.OnClickListener() { public void onClick(View v){ final Intent myIntent = new Intent(TestApp.this, SettingsApp.class); startActivity(myIntent); //Toast.makeText(GetCallLog.this, nameE, Toast.LENGTH_LONG).show (); } }); final Button scan_Button = (Button) findViewById (R.id.scanButton); scan_Button.setOnClickListener(new View.OnClickListener(){ public void onClick(View v){ Intent service = new Intent(WIFIService.WIFI_SERVICE); service.putExtra(WIFIService.EXTRA_UPDATE_RATE, 5000); startService(service); getConnectedData(); }); final Button stop_Scan_Button = (Button) findViewById (R.id.stopScanButton); stop_Scan_Button.setOnClickListener(new View.OnClickListener (){ public void onClick(View v){ Intent service = new Intent(WIFIService.WIFI_SERVICE); stopService(service); } }); } public void getConnectedData() { try { int connectedLevel = mRemoteInterface.getConnectedLevel(); Log.d("GOT IT!", "connectedLevel = " + connectedLevel); } catch (RemoteException e) { Log.e("ServiceControl", "Call to remote interface failed.", e); } } @Override protected void onResume() { super.onResume(); // get a link to our remote service bindService(new Intent(IRemoteInterface.class.getName()), this, Context.BIND_AUTO_CREATE); } @Override protected void onPause() { // remove the link to the remote service unbindService(this); super.onPause(); } public void onServiceConnected(ComponentName className, IBinder service) { mRemoteInterface = IRemoteInterface.Stub.asInterface(service); Log.d( "SERVICE" ,"onServiceConnected" ); } @Override public void onServiceDisconnected(ComponentName arg0) { mRemoteInterface = null; } } Can anybody spot a mistake or where I'm missing something?
-- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en