안드로이드 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의 마지막 인덱스를 참조하면서 에러가 나오는거네요

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)