使用onBind方法并且无法启动活动nullpointerexception Android(Using onBind method and unable to start activity null

编程入门 行业动态 更新时间:2024-10-25 20:26:10
使用onBind方法并且无法启动活动nullpointerexception Android(Using onBind method and unable to start activity nullpointerexception Android)

我第一次在Android上使用服务,我阅读所有文档和示例,我想从活动实现绑定服务,我的服务扫描可用wifi网络和我的活动获取wifi列表,但我卡住了,我不知道在哪里是我的错,我的日志说无法启动活动nullpointerexception。 清单是可以的,活动和服务是在不同的包。 在这里我的代码:Activity,然后是Service

public class StarterService extends Activity { final String tag = "WifiConn:..."; //EditText txt; WifiManager myWifi; ScanService scan; List<ScanResult> sRedes; //private ScanService scan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); doBindService(); scan=new ScanService(); //sRet.clear(); sRedes=scan.getWifi(); for (int i=0; i<sRedes.size(); i++) { ScanResult retS = sRedes.get(i); // txt.append("resT: " + retS.SSID +" " + retS.BSSID + "\n"); Log.d(tag, "resT: " + retS.SSID +" " + retS.BSSID); if (retS.SSID.equalsIgnoreCase("Red1")) { // txt.append("Red encontrada: " + retS.SSID +" " + retS.BSSID + "\n"); WifiConfiguration wc = new WifiConfiguration(); wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); wc.SSID = "\""+retS.SSID+"\""; wc.BSSID = retS.BSSID; wc.status = WifiConfiguration.Status.ENABLED; wc.hiddenSSID = true; int netID = myWifi.addNetwork(wc); // añade red // txt.append("NetID"+ Integer.toString(netID) +"\n"); if(myWifi.enableNetwork(netID, true)) // Valida conexión { // txt.append("Estado conexión: Ok\n"); Log.d("Servicio", "Activado"); } } else { // txt.append("No encontrado: Ok\n"); Log.d("Servicio", "Activado"); //this.stopSelf(); } } } private ServiceConnection mConnection=new ServiceConnection(){ public void onServiceConnected(ComponentName classname, IBinder binder){ scan=((ScanService.MyBinder)binder).getService(); Toast.makeText(StarterService.this, "Corriendo", Toast.LENGTH_SHORT).show(); } public void onServiceDisconnected(ComponentName classname) { scan= null; } }; protected void doBindService() { bindService(new Intent(this, ScanService.class), mConnection, Context.BIND_AUTO_CREATE); } }

在这里服务

public class ScanService extends Service { Timer timer = new Timer(); EditText txt; WifiManager mWifi; private static final long UPDATE_INTERVAL = 5000; private final IBinder mBinder = new MyBinder(); final String tag = "WifiConn:..."; private List<ScanResult> sRet; public void onCreate() { super.onCreate(); timerScan(); } private void timerScan(){ timer.scheduleAtFixedRate(new TimerTask(){ public void run(){ mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); mWifi.startScan(); //Inicio Scan Log.d("Service", "Inicio Scan()"); sRet = mWifi.getScanResults(); //ResultadosScan } },0,UPDATE_INTERVAL); Toast.makeText(this, "Servicio Iniciado", Toast.LENGTH_LONG).show(); Log.i(getClass().getSimpleName(),"Tiempo iniciado"); } @Override public IBinder onBind(Intent arg0) { return mBinder; } public class MyBinder extends Binder { public ScanService getService(){ return ScanService.this; } } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("Servicio", "Destruido"); } public List<ScanResult> getWifi(){ return sRet; } }

当我调试时,Activity上出现错误:

doBindService(); sRedes=scan.getWifi();

我的日志

03-24 00:24:46.814: E/AndroidRuntime(20798): FATAL EXCEPTION: main 03-24 00:24:46.814: E/AndroidRuntime(20798): Process: red1.pe, PID: 20798 03-24 00:24:46.814: E/AndroidRuntime(20798): java.lang.RuntimeException: Unable to start activity ComponentInfo{wigo.pe/wigo.pe.StarterService}: java.lang.NullPointerException 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.access$800(ActivityThread.java:139) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.os.Handler.dispatchMessage(Handler.java:102) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.os.Looper.loop(Looper.java:136) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.main(ActivityThread.java:5102) 03-24 00:24:46.814: E/AndroidRuntime(20798): at java.lang.reflect.Method.invokeNative(Native Method) 03-24 00:24:46.814: E/AndroidRuntime(20798): at java.lang.reflect.Method.invoke(Method.java:515) 03-24 00:24:46.814: E/AndroidRuntime(20798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 03-24 00:24:46.814: E/AndroidRuntime(20798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 03-24 00:24:46.814: E/AndroidRuntime(20798): at dalvik.system.NativeStart.main(Native Method) 03-24 00:24:46.814: E/AndroidRuntime(20798): Caused by: java.lang.NullPointerException 03-24 00:24:46.814: E/AndroidRuntime(20798): at wigo.pe.StarterService.onCreate(StarterService.java:35) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.Activity.performCreate(Activity.java:5248) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) 03-24 00:24:46.814: E/AndroidRuntime(20798): ... 11 more

My first time using service on Android, I read all documentation and examples, I wanna implement a binded service from activity, my service scan available wifi networks and my activity gets the list of wifi, but I got stuck and I don't know where is my mistake, my log said Unable to start activity nullpointerexception. Manifest is OK, ativity and service is on diferents package. Here my code: Activity, then Service

public class StarterService extends Activity { final String tag = "WifiConn:..."; //EditText txt; WifiManager myWifi; ScanService scan; List<ScanResult> sRedes; //private ScanService scan; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); doBindService(); scan=new ScanService(); //sRet.clear(); sRedes=scan.getWifi(); for (int i=0; i<sRedes.size(); i++) { ScanResult retS = sRedes.get(i); // txt.append("resT: " + retS.SSID +" " + retS.BSSID + "\n"); Log.d(tag, "resT: " + retS.SSID +" " + retS.BSSID); if (retS.SSID.equalsIgnoreCase("Red1")) { // txt.append("Red encontrada: " + retS.SSID +" " + retS.BSSID + "\n"); WifiConfiguration wc = new WifiConfiguration(); wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); wc.SSID = "\""+retS.SSID+"\""; wc.BSSID = retS.BSSID; wc.status = WifiConfiguration.Status.ENABLED; wc.hiddenSSID = true; int netID = myWifi.addNetwork(wc); // añade red // txt.append("NetID"+ Integer.toString(netID) +"\n"); if(myWifi.enableNetwork(netID, true)) // Valida conexión { // txt.append("Estado conexión: Ok\n"); Log.d("Servicio", "Activado"); } } else { // txt.append("No encontrado: Ok\n"); Log.d("Servicio", "Activado"); //this.stopSelf(); } } } private ServiceConnection mConnection=new ServiceConnection(){ public void onServiceConnected(ComponentName classname, IBinder binder){ scan=((ScanService.MyBinder)binder).getService(); Toast.makeText(StarterService.this, "Corriendo", Toast.LENGTH_SHORT).show(); } public void onServiceDisconnected(ComponentName classname) { scan= null; } }; protected void doBindService() { bindService(new Intent(this, ScanService.class), mConnection, Context.BIND_AUTO_CREATE); } }

Here Service

public class ScanService extends Service { Timer timer = new Timer(); EditText txt; WifiManager mWifi; private static final long UPDATE_INTERVAL = 5000; private final IBinder mBinder = new MyBinder(); final String tag = "WifiConn:..."; private List<ScanResult> sRet; public void onCreate() { super.onCreate(); timerScan(); } private void timerScan(){ timer.scheduleAtFixedRate(new TimerTask(){ public void run(){ mWifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); mWifi.startScan(); //Inicio Scan Log.d("Service", "Inicio Scan()"); sRet = mWifi.getScanResults(); //ResultadosScan } },0,UPDATE_INTERVAL); Toast.makeText(this, "Servicio Iniciado", Toast.LENGTH_LONG).show(); Log.i(getClass().getSimpleName(),"Tiempo iniciado"); } @Override public IBinder onBind(Intent arg0) { return mBinder; } public class MyBinder extends Binder { public ScanService getService(){ return ScanService.this; } } @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.d("Servicio", "Destruido"); } public List<ScanResult> getWifi(){ return sRet; } }

When I was debugging the error appear on Activity:

doBindService(); sRedes=scan.getWifi();

My Log

03-24 00:24:46.814: E/AndroidRuntime(20798): FATAL EXCEPTION: main 03-24 00:24:46.814: E/AndroidRuntime(20798): Process: red1.pe, PID: 20798 03-24 00:24:46.814: E/AndroidRuntime(20798): java.lang.RuntimeException: Unable to start activity ComponentInfo{wigo.pe/wigo.pe.StarterService}: java.lang.NullPointerException 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2269) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.access$800(ActivityThread.java:139) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.os.Handler.dispatchMessage(Handler.java:102) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.os.Looper.loop(Looper.java:136) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.main(ActivityThread.java:5102) 03-24 00:24:46.814: E/AndroidRuntime(20798): at java.lang.reflect.Method.invokeNative(Native Method) 03-24 00:24:46.814: E/AndroidRuntime(20798): at java.lang.reflect.Method.invoke(Method.java:515) 03-24 00:24:46.814: E/AndroidRuntime(20798): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 03-24 00:24:46.814: E/AndroidRuntime(20798): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 03-24 00:24:46.814: E/AndroidRuntime(20798): at dalvik.system.NativeStart.main(Native Method) 03-24 00:24:46.814: E/AndroidRuntime(20798): Caused by: java.lang.NullPointerException 03-24 00:24:46.814: E/AndroidRuntime(20798): at wigo.pe.StarterService.onCreate(StarterService.java:35) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.Activity.performCreate(Activity.java:5248) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110) 03-24 00:24:46.814: E/AndroidRuntime(20798): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2173) 03-24 00:24:46.814: E/AndroidRuntime(20798): ... 11 more

最满意答案

ScanService类中为ScanService 创建构造函数。

public ScanService() { }

现在在您的Activity中进行initiazlize

scan = new ScanService(); sRedes=scan.getWifi();

Make constructor for ScanService in ScanService class.

public ScanService() { }

Now initiazlize in your Activity

scan = new ScanService(); sRedes=scan.getWifi();

更多推荐

本文发布于:2023-08-05 20:49:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1438062.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:无法启动   方法   nullpointerexception   onBind   Android

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!