ListView не отображает массив списка Wi-Fi - PullRequest
0 голосов
/ 10 июля 2020

Я делаю приложение для сканирования ближайших доступных сетей Wi-Fi, но всякий раз, когда я нажимаю кнопку сканирования, ListView остается пустым. ListView отображается в моем превью для Android Studio, но когда я запускаю приложение, оно оказывается пустым. У меня есть адаптер-массив, который извлекает доступные сети Wi-Fi, а затем вставляет его в ListView в действии. Нет такой удачи. Я не знаю, принимает ли адаптер сети Wi-Fi или нет, или они не отображаются в ListView. Все, что у меня есть в файле XML, - это ListView и Button. вот файл XML.

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WifiActivity">

    <ListView
        android:id="@+id/wifilist"
        android:layout_width="match_parent"
        android:layout_height="312dp"
        android:layout_weight="0.97"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.295"
        tools:layout_editor_absoluteX="0dp" />

    <Button
        android:id="@+id/scanbtn"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="bottom"
        android:layout_margin="15dp"
        android:background="@android:color/holo_green_light"
        android:text="SCAN"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.814"
        tools:layout_editor_absoluteX="29dp" />


</androidx.constraintlayout.widget.ConstraintLayout>

и вот мой java код ..


import androidx.appcompat.app.AppCompatActivity;

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.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class WifiActivity extends AppCompatActivity {

    private WifiManager wifiManager;
    private ListView listView;
    private Button buttonscan;
    private List<ScanResult> results;
    private ArrayList<String> arrayList= new ArrayList<>();
    private ArrayAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wifi);
        buttonscan=findViewById(R.id.scanbtn);
        buttonscan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               scanWifi();
            }
        });

        listView=findViewById(R.id.wifilist);
        wifiManager=(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);

        if(!wifiManager.isWifiEnabled()){
            Toast.makeText(this, "WiFi is Disabled, Please enable Wifi", Toast.LENGTH_LONG).show();
            wifiManager.setWifiEnabled(true);
        }
        adapter=new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayList);
        listView.setAdapter(adapter);
        scanWifi();
    }

    private void scanWifi(){
        arrayList.clear();
        registerReceiver(wifiReciever, new IntentFilter(wifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        wifiManager.startScan();
        Toast.makeText(this, "Scanning Wifi..", Toast.LENGTH_SHORT).show();
    }

    BroadcastReceiver wifiReciever=new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            results=wifiManager.getScanResults();
            unregisterReceiver(this);

            for(ScanResult scanResult: results){
                arrayList.add(scanResult.SSID);
                adapter.notifyDataSetChanged();
            }
        };
    };
}

Я попытался изменить simple_list_item_1 на Пожалуйста, помогите: (

1 Ответ

0 голосов
/ 11 июля 2020

Добавить журнал, чтобы проверить, пуст ли список

BroadcastReceiver wifiReciever=new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        results=wifiManager.getScanResults();
        unregisterReceiver(this);

        for(ScanResult scanResult: results){
            arrayList.add(scanResult.SSID);
            adapter.notifyDataSetChanged();
        }
        Log.d("Received List",arrayList);
    };
};

если пуст, то проверьте, есть ли у вас эти разрешения, определенные в вашем манифесте

ACCESS_FINE_LOCATION

ACCESS_COARSE_LOCATION

ИЗМЕНЕНИЕ_WIFI_STATE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...