아래 wifi list 목록을 리스트뷰로 뿌려주는 부분입니다.
그런데 null point access하다가 죽는거 같습니다.
count가 없는거 같은데요. 정보를 못얻어 오는 건가요?
-------------소스-------------------------------------------
package org.tacademy.listview;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
public class WifiListViewActivity extends Activity {
private String[] values = {};
WifiManager mainWifi;
WifiReceiver receiverWifi;
List<ScanResult> wifiList;
StringBuilder sb = new StringBuilder();
WifiInfo wifiInfo; // hwjang
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiInfo = mainWifi.getConnectionInfo(); // hwjang
//String name = wifiInfo.getSSID(); // hwjang
receiverWifi = new WifiReceiver();
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
if (!mainWifi.isWifiEnabled()) {
mainText.setText("isWifiEnabled failed\n");
return;
}
mainWifi.startScan();
mainText.setText("\nStarting Scan...\n");
// 레이아웃 파일의 리스트뷰를 가져와 커스텀어답터를 세팅한다.
final ListView listView = (ListView) findViewById(R.id.listView);
AreaList al = new AreaList(this, 0);
listView.setAdapter(al);
}
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 0, 0, "Refresh");
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuItemSelected(int featureId, MenuItem item) {
mainWifi.startScan();
mainText.setText("Starting Scan");
return super.onMenuItemSelected(featureId, item);
}
protected void onPause() {
unregisterReceiver(receiverWifi);
super.onPause();
}
protected void onResume() {
registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
super.onResume();
}
class WifiReceiver extends BroadcastReceiver {
public void onReceive(Context c, Intent intent) {
//sb = new StringBuilder();
wifiList = mainWifi.getScanResults();
for(int i = 0; i < wifiList.size(); i++) {
//sb.append(new Integer(i+1).toString() + ".");
values[i+1] = (wifiList.get(i)).SSID;
Log.d("i, " +i, null);
//sb.append("\n\n");
}
//mainText.setText(sb);
}
}
private class AreaList extends ArrayAdapter<STRING> {
public AreaList(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
// 배열의 길이를 리턴하여 리스트의 개수를 계산한다.
@Override
public int getCount() {
return values.length;
}
// 배열의 개수만큼 리스트를 만든다.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = vi.inflate(R.layout.list_items, null);
}
if (values[position] != null) {
TextView tv = (TextView) convertView.findViewById(R.id.textView);
if (tv != null) {
tv.setText(values[position]);
}
}
return convertView;
}
}
}
--------------------------------------------------
--------------------에러-----------------------
01-21 01:22:18.329: D/AndroidRuntime(8004): Shutting down VM
01-21 01:22:18.329: W/dalvikvm(8004): threadid=1: thread exiting with uncaught exception (group=0x4001d7f0)
01-21 01:22:18.333: E/AndroidRuntime(8004): FATAL EXCEPTION: main
01-21 01:22:18.333: E/AndroidRuntime(8004): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS } in org.tacademy.listview.WifiListViewActivity$WifiReceiver@4831b628
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.os.Handler.handleCallback(Handler.java:587)
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.os.Handler.dispatchMessage(Handler.java:92)
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.os.Looper.loop(Looper.java:123)
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.app.ActivityThread.main(ActivityThread.java:4627)
01-21 01:22:18.333: E/AndroidRuntime(8004): at java.lang.reflect.Method.invokeNative(Native Method)
01-21 01:22:18.333: E/AndroidRuntime(8004): at java.lang.reflect.Method.invoke(Method.java:521)
01-21 01:22:18.333: E/AndroidRuntime(8004): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
01-21 01:22:18.333: E/AndroidRuntime(8004): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
01-21 01:22:18.333: E/AndroidRuntime(8004): at dalvik.system.NativeStart.main(Native Method)
01-21 01:22:18.333: E/AndroidRuntime(8004): Caused by: java.lang.ArrayIndexOutOfBoundsException
01-21 01:22:18.333: E/AndroidRuntime(8004): at org.tacademy.listview.WifiListViewActivity$WifiReceiver.onReceive(WifiListViewActivity.java:88)
01-21 01:22:18.333: E/AndroidRuntime(8004): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
01-21 01:22:18.333: E/AndroidRuntime(8004): ... 9 more
-------------------------------------------------




WifiReceiver.onReceive(WifiListViewActivity.java:88)
여기서 배열 인덱스가 배열 크기보다 더 큰값이 들어갔나 봅니다