2015-08-30 4 views
0

Я должен использовать функцию startCustomizedScan (ScanSettings). Запросить проверку точек доступа в указанном списке каналов. Каждый канал определяется его частотой в МГц, например. "2437"Android WifiManeger Класс startCustomizedScan (ScanSettings запрошен) функция принудительное принудительное приложение

WifiChannel mrtChannel; 
mrtChannel = new WifiChannel(); 

mrtChannel.freqMHz = 2437; 
mrtChannel.channelNum = 6; 

ScanSettings set ; 
mrtcollection = null; 

mrtcollection.add(mrtChannel); 

set = (ScanSettings)mrtcollection; 
mainWifi.startCustomizedScan(set); 

, но мое приложение Force Stop. Заявка не приветствуется. LogCat

08-30 23:09:36.547: E/AndroidRuntime(14327): FATAL EXCEPTION: main 
08-30 23:09:36.547: E/AndroidRuntime(14327): Process: com.muratucan.murat5hidden, PID: 14327 
08-30 23:09:36.547: E/AndroidRuntime(14327): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.muratucan.murat5hidden/com.muratucan.murat5hidden.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.Collection.add(java.lang.Object)' on a null object reference 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2367) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread.access$800(ActivityThread.java:148) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1283) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.os.Handler.dispatchMessage(Handler.java:102) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.os.Looper.loop(Looper.java:135) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread.main(ActivityThread.java:5274) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at java.lang.reflect.Method.invoke(Native Method) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at java.lang.reflect.Method.invoke(Method.java:372) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:909) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:704) 
08-30 23:09:36.547: E/AndroidRuntime(14327): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.Collection.add(java.lang.Object)' on a null object reference 
08-30 23:09:36.547: E/AndroidRuntime(14327): at com.muratucan.murat5hidden.MainActivity.onCreate(MainActivity.java:133) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.Activity.performCreate(Activity.java:5977) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
08-30 23:09:36.547: E/AndroidRuntime(14327): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2258) 

Пожалуйста, дайте мне некоторое представление об этом проекте или в другом виде.

Спасибо!

Мой Полный код Вот ..

public class MainActivity extends Activity { 

// WifiManager mainwifi; 

    public Collection<WifiChannel> channelSetCollect; 
    public Collection<WifiChannel> mrtcollection = null; 
    TextView ekran ; 

    TextView mainText; 
    WifiManager mainWifi; 
    WifiReceiver receiverWifi; 
    List<ScanResult> wifiList; 
    StringBuilder sb = new StringBuilder(); 



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


     mainText = (TextView) findViewById(R.id.textView1); 

     // Initiate wifi service manager 
     mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 

    WifiChannel mrtChannel; 
    mrtChannel = new WifiChannel(); 

    mrtChannel.freqMHz = 2437; 
    mrtChannel.channelNum = 6; 

    ScanSettings set ; 
    mrtcollection = null; 

    mrtcollection.add(mrtChannel); 

    set = (ScanSettings)mrtcollection; 
    mainWifi.startCustomizedScan(set); 


     // Check for wifi is disabled 
     if (mainWifi.isWifiEnabled() == false) 
      { 
       // If wifi disabled then enable it 
       Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", 
       Toast.LENGTH_LONG).show(); 

       mainWifi.setWifiEnabled(true); 
      } 

     // wifi scaned value broadcast receiver 
     receiverWifi = new WifiReceiver(); 

     // Register broadcast receiver 
     // Broacast receiver will automatically call when number of wifi connections changed 
     registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
     // mainWifi.startScan(); 
     mainText.setText("Starting Scan..."); 

    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     if (id == R.id.action_settings) { 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    protected void onPause() { 
     unregisterReceiver(receiverWifi); 
     super.onPause(); 
    } 

    protected void onResume() { 
     registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 
     super.onResume(); 
    } 

    // Broadcast receiver class called its receive method 
    // when number of wifi connections changed 

    class WifiReceiver extends BroadcastReceiver { 

     // This method call when number of wifi connections changed 
     public void onReceive(Context c, Intent intent) { 

      sb = new StringBuilder(); 
      wifiList = mainWifi.getScanResults(); 
      sb.append("\n  Number Of Wifi connections :"+wifiList.size()+"\n\n"); 

      for(int i = 0; i < wifiList.size(); i++){ 

       sb.append(new Integer(i+1).toString() + ". "); 
       sb.append((wifiList.get(i)).toString()); 
       sb.append("\n\n"); 
      } 

      mainText.setText(sb); 
     } 
    } 

} 
+0

Вы пробовали mCollection = new Collection() ;? –

+0

Вместо того, чтобы присваивать ему значение null, это список, в котором вы можете сделать clear(), если вы присвоите ему значение null, это приведет к сбою. Причина NullPointerException –

+0

Я использую mCollection = new Collection(); код, но это приведет к сбою в вызове NullPointerException –

ответ

0

Вы получаете NullPointerException, потому что вы пытаетесь добавить к коллекции, но коллекция равна нулю.

mrtcollection = null; 

mrtcollection.add(mrtChannel); 

Что вам нужно сделать, это инициализировать коллекцию:

mrtcollection = new ArrayList<WifiChannel>(); 
mrtcollection.add(mrtChannel); 

Обратите внимание, вы можете использовать любой класс, который реализует коллекции, а не только ArrayList (см Collection, чтобы увидеть, какие классы реализации Collection). Кроме того, вы можете инициализировать mrtcollection, когда вы определяете переменную, или можете назначить в onCreate.

Обновление: Для вашего ClassCastException вы не должны бросать ArrayList в ScanSettings, вы должны создать собственный ScanSettings с помощью скрытого конструктора и установить Collection channelSet с вашими желаемыми каналами.

+0

Спасибо за ваш ответ, Я заставил вас сказать изменения, но это приведет к сбою в вызове NullPointerException .. LogCat massege: 08-31 01: 12: 08.439: E/AndroidRuntime (12011): java.lang.RuntimeException: не удалось запустить activity ComponentInfo {com.muratucan.murat5hidden/com.muratucan.murat5hidden.MainActivity}: java.lang.ClassCastException: java.util.ArrayList не может быть передан в android.net.wifi.ScanSettings –

+0

Вы получаете исключение ClassCastException, потому что пытаетесь конвертировать ArrayList в ScanSettings: 'set = (ScanSettings) mrtcollection;' Это недопустимо, потому что ArrayList не является типом ScanSettings. – vman

+0

ClassCastException Я не понял, как решить. как установить ScanSettings скрытый конструктор channelSet с каналами. как использовать channelSet? Не могли бы вы поделиться простым примером кода? –

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