2016-03-30 15 views
0

\問題は、ベストシグナルを検出しているときにWifiScannerクラスに表示されるNullPointerExceptionに関するものです。NullPointerException

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{project.e.wifiactivity/project.e.wifiactivity.WifiConnector}: 
java.lang.NullPointerException: Attempt to invoke virtual method 
'java.lang.String android.net.wifi.ScanResult.toString()' 

\

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 
'java.lang.String android.net.wifi.ScanResult.toString()' on a null object reference 
     at 
project.e.wifiactivity.WifiScanner.bestReturn(WifiScanner.java:46) 
     at 
project.e.wifiactivity.WifiConnector.onCreate(WifiConnector.java:23) 

Logcat MainActivityクラス /パッケージproject.e.wifiactivity \

03-30 04:26:07.351 26037-26037/? I/art﹕ Late-enabling -Xcheck:jni 
03-30 04:26:07.522 26037-26059/project.e.wifiactivity D/OpenGLRenderer﹕ Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
03-30 04:26:07.525 26037-26037/project.e.wifiactivity D/﹕ HostConnection::get() New Host Connection established 0xf3e5c7b0, tid 26037 
03-30 04:26:07.536 26037-26037/project.e.wifiactivity D/Atlas﹕ Validating map... 
03-30 04:26:07.573 26037-26059/project.e.wifiactivity D/libEGL﹕ loaded /system/lib/egl/libEGL_emulation.so 
03-30 04:26:07.574 26037-26059/project.e.wifiactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_emulation.so 
03-30 04:26:07.596 26037-26059/project.e.wifiactivity D/libEGL﹕ loaded /system/lib/egl/libGLESv2_emulation.so 
03-30 04:26:07.607 26037-26059/project.e.wifiactivity D/﹕ HostConnection::get() New Host Connection established 0xeec393f0, tid 26059 
03-30 04:26:07.628 26037-26059/project.e.wifiactivity I/OpenGLRenderer﹕ Initialized EGL, version 1.4 
03-30 04:26:07.672 26037-26059/project.e.wifiactivity D/OpenGLRenderer﹕ Enabling debug mode 0 
03-30 04:26:07.692 26037-26059/project.e.wifiactivity W/EGL_emulation﹕ eglSurfaceAttrib not implemented 
03-30 04:26:07.692 26037-26059/project.e.wifiactivity W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xeec38740, error=EGL_SUCCESS 
03-30 04:26:09.662 26037-26059/project.e.wifiactivity W/EGL_emulation﹕ eglSurfaceAttrib not implemented 
03-30 04:26:09.662 26037-26059/project.e.wifiactivity W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xf3d0cc60, error=EGL_SUCCESS  
03-30 04:26:27.858 26037-26037/project.e.wifiactivity D/WifiDemo﹕ onCreate() 
03-30 04:26:27.936 26037-26059/project.e.wifiactivity W/EGL_emulation﹕ eglSurfaceAttrib not implemented 
03-30 04:26:27.936 26037-26059/project.e.wifiactivity W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xf3e840a0, error=EGL_SUCCESS  
03-30 04:26:28.130 26037-26037/project.e.wifiactivity D/AndroidRuntime﹕ Shutting down VM 
03-30 04:26:28.130 26037-26037/project.e.wifiactivity E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: project.e.wifiactivity, PID: 26037 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{project.e.wifiactivity/project.e.wifiactivity.WifiConnector}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.wifi.ScanResult.toString()' on a null object reference 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
      at android.app.ActivityThread.access$800(ActivityThread.java:151) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:135) 
      at android.app.ActivityThread.main(ActivityThread.java:5254) 
      at java.lang.reflect.Method.invoke(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:372) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    **strong text**Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.wifi.ScanResult.toString()' on a null object reference** 
      at project.e.wifiactivity.WifiScanner.bestReturn(WifiScanner.java:46) 
      at project.e.wifiactivity.WifiConnector.onCreate(WifiConnector.java:23) 
      at android.app.Activity.performCreate(Activity.java:5990) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
            at android.app.ActivityThread.access$800(ActivityThread.java:151) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:135) 
            at android.app.ActivityThread.main(ActivityThread.java:5254) 
            at java.lang.reflect.Method.invoke(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:372) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

\;

無線LANスキャナクラス\
import android.content.BroadcastReceiver; 
    import android.content.Context; 
    import android.content.Intent; 
    import android.content.IntentFilter; 
    import android.net.wifi.WifiConfiguration; 
    import android.net.wifi.WifiInfo; 
    import android.net.wifi.WifiManager; 
    import android.os.Bundle; 
    import android.support.v7.app.AppCompatActivity; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    import java.util.List; 

    public class MainActivity extends AppCompatActivity implements View.lickListener { 

    private static final String TAG="WifiDemo"; 
    WifiManager wifi; 
    BroadcastReceiver receiver; 
    public Login login = new Login(); 




    TextView text; 
    Button btn; 
    Button buttonp; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     text=(TextView)findViewById(R.id.text); 
     btn=(Button)findViewById(R.id.btn); 
     Button enb = (Button) findViewById(R.id.enb); v 

     final WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 

      enb.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (!wifiManager.isWifiEnabled()) { 
        wifiManager.setWifiEnabled(true); 
        Toast.makeText(MainActivity.this, "Wifi Enabled", Toast.LENGTH_LONG).show(); 

       } 
      } 

     }); 

     buttonp = (Button) findViewById(R.id.buttonp); 
     buttonp.setOnClickListener(this); 
     Intent l = new Intent(this, WifiConnector.class); 
     startActivity(l); 







     btn.setOnClickListener(this); 
     //get wifi status 
     wifi=(WifiManager)getSystemService(Context.WIFI_SERVICE); 
     WifiInfo info=wifi.getConnectionInfo(); 
     String name = info.getSSID(); 
     String macid = info.getMacAddress(); 
     text.append("\n\nWifi Name :"+ name +"\nMac Id :"+ macid); 
     //list available network 

     List<WifiConfiguration> configurations= wifi.getConfiguredNetworks(); 
     for(WifiConfiguration configuration : configurations){ 
      text.append("\n\n" +configuration.SSID+"\n"+configuration.BSSID); 
     } 

     //register broadcast receiver 

     if(receiver==null) { 
      receiver = new WifiScanner(); 
      registerReceiver(receiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
      Log.d(TAG, "onCreate()"); 
     } 




    } 









    @Override 
    protected void onStop() { 
     try { 
      this.unregisterReceiver(receiver); 
      super.onStop(); 
     } catch (IllegalArgumentException f) { 
      f.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onPause() { 


     try { 
      super.onPause(); 
      unregisterReceiver(receiver); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } 
    } 
    @Override 
    protected void onResume() { 


     super.onResume(); 

     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); 
     registerReceiver(receiver, intentFilter); 


     int f = login.resultp(); 

     if (f == 1) { 
      Intent l = new Intent(this, MainActivity.class); 
      startActivity(l); 

     } 
    } 




















    @Override 
    public void onClick(View view) { 
    Toast.makeText(getApplicationContext(), "All Network Searched!!", 0).show(); 
     if (R.id.btn == view.getId()){ 
      Log.d(TAG, "onCreate() wifi.startScan()"); 
      wifi.startScan(); 

     } 
    } 
} 

package project.e.wifiactivity; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.net.wifi.ScanResult; 
import android.net.wifi.WifiManager; 
import android.util.Log; 
import android.widget.Toast; 

import java.util.List; 


public class WifiScanner extends BroadcastReceiver { 


public ScanResult bestsignal ; 
private static final String TAG="WifiScanReceiver"; 
MainActivity main; 




@Override 
public void onReceive(Context arg0, Intent arg1) { 

    List<ScanResult> results = main.wifi.getScanResults(); 


    for(ScanResult result : results) { 
     if(bestsignal == null || WifiManager.compareSignalLevel(bestsignal.level, result.level)<0) 
     bestsignal = result; 
     bestReturn(); 


    } 
    String message=String.format("%s networks found.%s is the strongest.", results.size(), bestsignal.SSID); 
    Toast.makeText(main, message, 0).show(); 
    Log.d(TAG, "onReceive() message :"+message); 


} 

public String bestReturn() { 

    return bestsignal.toString(); 

} 
Wifiのベスト信号コネクタクラス\

}

package project.e.wifiactivity; 


import android.app.Activity; 
import android.content.Context; 
import android.net.wifi.WifiConfiguration; 
import android.net.wifi.WifiManager; 
import android.os.Bundle; 

import java.util.List; 



public class WifiConnector extends Activity { 



    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     WifiScanner wifiscannner = new WifiScanner(); 
     String bestnetSSID = wifiscannner.bestReturn(); 
     String networkPass = "pass"; 

     WifiConfiguration conf = new WifiConfiguration(); 
     conf.SSID = "\"" + bestnetSSID + "\""; 

     conf.preSharedKey = "\"" + networkPass + "\""; 

     WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     wifiManager.addNetwork(conf); 

     List<WifiConfiguration> list = wifiManager.getConfiguredNetworks(); 
     for (WifiConfiguration i : list) { 
      if (i.SSID != null && i.SSID.equals("\"" + bestnetSSID + "\"")) { 
       wifiManager.disconnect(); 
       wifiManager.enableNetwork(i.networkId, true); 
       wifiManager.reconnect(); 

       break; 
      } 
     } 

    } 


} 

マニフェスト

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="project.e.wifiactivity" > 
<uses-feature android:name="android.hardware.wifi" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.UPDATE_DEVICE_STATS" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 


<application 
    android:debuggable="true" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".Display" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".Login"></activity> 
    <activity android:name=".MainActivity"></activity> 
    <activity android:name=".WifiConnector"></activity> 


</application> 

</manifest> 
+0

をエラーが原因でnullオブジェクトである...あなたのScanResultが –

+0

nullである私が欲しい、私はそれを理解しますが、何がScanResultを初期化する適切な方法かもしれませんそれを知る。 – user3537196

答えて

1

クイックフィックス\:

public String bestReturn() { 
    if(bestsignal!=null) 
    return bestsignal.toString(); 
    else{ 
    return null; 
    } 
} 

問題:

あなたはBroadcastReceiverのインスタンスを作成しますので、それがonReceiveコールバックがまだ呼び出されていないのです。この

String bestnetSSID = wifiscannner.bestReturn();

を呼んでいます。従ってbestsignalはnullのままです。

0
Intent l = new Intent(this, MainActivity.class); 
     startActivity(l); 
" this = MainActivity.this " 

MainActivity MainActivityに起動しない..:D

+0

は周りをテストしていましたが、混乱の中で起こったに違いありません:...-) とにかく感謝、:-) – user3537196