Созданное мной приложение Android Wifi выдает ошибку «К сожалению (имя) перестало работать»

#android #wifi #android-wifi

#Android #wifi #android-wifi

Вопрос:

Я создал простое приложение для сканирования и составления списка подключений Wi-Fi на устройстве, но при запуске на Samsung Galaxy S4 приложение сообщает, что, к сожалению, «название приложения» перестало работать. Должен ли я изменять какие-либо разрешения на мобильном устройстве? Мой Wi-Fi на мобильном включен, и приложение имеет разрешения на доступ и просмотр подключений Wi-Fi. Приложение компилируется без ошибок в eclipse.

Я использую код wifi, упомянутый здесь: учебное пособие по Wi-Fi для Android

Вот исключение logcat:

 *06-27 02:10:15.891: E/memtrack(22391): Couldn't load memtrack module (No such file or directory)

06-27 02:10:15.891: E/android.os.Debug(22391): failed to load memtrack module: -2

06-27 02:10:16.026: E/EnterpriseContainerManager(3031): ContainerPolicy Service is not yet 
ready!!!

06-27 02:10:16.341: E/EnterpriseContainerManager(3031): ContainerPolicy Service is not yet ready!!!

06-27 02:10:18.401: E/AndroidRuntime(22277): FATAL EXCEPTION: main

06-27 02:10:18.401: E/AndroidRuntime(22277): Process: com.example.wifi, PID: 22277

06-27 02:10:18.401: E/AndroidRuntime(22277): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg=0x4000010 } in com.example.wifi.MainActivity$WifiScanReceiver@42a3b950

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:782)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.os.Handler.handleCallback(Handler.java:733)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.os.Handler.dispatchMessage(Handler.java:95)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.os.Looper.loop(Looper.java:157)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.app.ActivityThread.main(ActivityThread.java:5356)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at java.lang.reflect.Method.invokeNative(Native Method)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at java.lang.reflect.Method.invoke(Method.java:515)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at dalvik.system.NativeStart.main(Native Method)

06-27 02:10:18.401: E/AndroidRuntime(22277): Caused by: java.lang.NullPointerException

06-27 02:10:18.401: E/AndroidRuntime(22277):    at com.example.wifi.MainActivity$WifiScanReceiver.onReceive(MainActivity.java:54)

06-27 02:10:18.401: E/AndroidRuntime(22277):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:772)

06-27 02:10:18.401: E/AndroidRuntime(22277):    ... 9 more*
 

Вот MainActivity.java код:

 package com.example.wifi;

import java.util.List;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager; 
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

   WifiManager mainWifiObj;
   WifiScanReceiver wifiReciever;
   ListView list;
   String wifis[];
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      list = (ListView)findViewById(R.id.listView1);
      mainWifiObj = (WifiManager) getSystemService(Context.WIFI_SERVICE);
      wifiReciever = new WifiScanReceiver();
      mainWifiObj.startScan();
   }


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

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

   class WifiScanReceiver extends BroadcastReceiver {
  @SuppressLint("UseValueOf")
  public void onReceive(Context c, Intent intent) {
     List<ScanResult> wifiScanList = mainWifiObj.getScanResults();
     wifis = new String[wifiScanList.size()];
     for(int i = 0; i < wifiScanList.size(); i  ){
        wifis[i] = ((wifiScanList.get(i)).toString());
     }

     list.setAdapter(new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,wifis));
      }
   }

}
 

Комментарии:

1. опубликуйте исключение LogCat

2. Привет, панини, он компилируется в eclipse без ошибок. Но не запускается на моем мобильном телефоне.

3. LogCat — это консольный вывод системы Android, он дает вам систему. Похожий интерфейс для чтения того, что не так с приложением. Там будет показано исключение, которое вы нажмете

4. Я добавил исключение logcat в разделе ошибки. Имя моего приложения — wifi.

Ответ №1:

 06-27 02:10:18.401: E/AndroidRuntime(22277): Caused by: java.lang.NullPointerException
06-27 02:10:18.401: E/AndroidRuntime(22277): at com.example.wifi.MainActivity$WifiScanReceiver.onReceive(MainActivity.java:54)
 

У вас есть NullPointerException строка 54, вам нужно исправить это, прежде чем вы сможете запустить свое приложение

Комментарии:

1. Я не могу понять, что вызывает исключение. Я добавил свой mainactivity.java код также сейчас

2. Тот, который начинается с list.setAdapter

3. в этом случае список, вероятно, равен нулю, вы уверены, что у вас есть ListView в вашем activity_main.xml имя ListView1?

4. Макет по умолчанию имеет activity_main и fragment_main в моем eclipse, и поскольку тег RelativeLayout был в fragment_main, я копировал в fragment_main. Теперь я просто удалил fragment_main и скопировал все в activity_main, и теперь это работает. Большое спасибо за ваше руководство!