안드로이드 FATAL EXCEPTION에러가 떴는데 확인좀 부탁드립니다..
조회수 7237회
package com.example.eunbo.wifilist;
import android.Manifest;
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.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.gun0912.tedpermission.PermissionListener;
import com.gun0912.tedpermission.TedPermission;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "WIFIList";
private WifiManager wifiManager;
private List<ScanResult> scanDatas; // ScanResult List
private ListView listView;
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
scanDatas = wifiManager.getScanResults();
//SSID비교
for (int i = 0; i <= scanDatas.size(); i++) {
String str1 = scanDatas.get(i).SSID;
for (int j = 0; j <= scanDatas.size(); j++) {
String str2 = scanDatas.get(j).SSID;
Log.d("Darin", " " + str1.equals(str2));
//Log.d("Darin", " " + scanDatas.get(j).level);
Log.d("Darin", " " + str2);
}
String str3 = scanDatas.get(i).SSID;
Log.d("Darin", " SSID = " + str3);
}
// 어댑터뷰(리스트 뷰)
listView = (ListView) findViewById(R.id.listView);
// 어댑터
ArrayAdapter adapter = new WifiAdapter(getApplicationContext(), R.layout.item_layout, scanDatas);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Toast.makeText(getApplicationContext(), scanDatas.get(i).SSID, Toast.LENGTH_SHORT).show();
}
});
// listview 갱신
adapter.notifyDataSetChanged();
} else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
sendBroadcast(new Intent("wifi.ON_NETWORK_STATE_CHANGED"));
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showPermissionDialog();
wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (!wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(true);
}
listView = (ListView) findViewById(R.id.listView);
}
private void showPermissionDialog() {
PermissionListener permissionlistener = new PermissionListener() {
@Override
public void onPermissionGranted() {
Toast.makeText(MainActivity.this, "권한 허가", Toast.LENGTH_SHORT).show();
}
@Override
public void onPermissionDenied(ArrayList<String> deniedPermissions) {
Toast.makeText(MainActivity.this, "권한 거부" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
finish();
}
};
TedPermission.with(this)
.setPermissionListener(permissionlistener)
.setRationaleMessage("위치서비스 권한 필요")
.setPermissions(Manifest.permission.READ_CONTACTS)
.setPermissions(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION)
.check();
}
@Override
public void onResume() {
super.onResume();
IntentFilter intentFilter = new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
registerReceiver(receiver, intentFilter);
wifiManager.startScan();
listView.setFocusable(true);
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(receiver);
}
}
에러 부분은 String str2 = scanDatas.get(j).SSID; 부분입니다.
여기부터는 에러 뜬 로그입니다. wifilist E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.eunbo.wifilist, PID: 23663 java.lang.RuntimeException: Error receiving broadcast Intent { act=android.net.wifi.SCAN_RESULTS flg=0x4000010 (has extras) } in com.example.eunbo.wifilist.MainActivity$1@8950aa7 at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:891) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.IndexOutOfBoundsException: Invalid index 15, size is 15 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at com.example.eunbo.wifilist.MainActivity$1.onReceive(MainActivity.java:45) at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:881) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
for (int i = 0; i <= scanDatas.size(); i++) 에서
<= 로 하시니
Caused by: java.lang.IndexOutOfBoundsException: Invalid index 15, size is 15 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308)
scanDatas의 마지막 인덱스를 참조하면서 에러가 나오는거네요
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력