#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, и теперь это работает. Большое спасибо за ваше руководство!