我正在尝试创建一个寻找WiFi网络的简单应用,然后连接到它们。我目前在更新UI时遇到问题。
一些指针会很棒。谢谢你的时间。
class UiUpdater extends AsyncTask<Void, Void, List<ScanResult>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
TextView searching = (TextView) findViewById(R.id.searching);
searching.setText("Currently searching...");
}
@Override
protected List<ScanResult> doInBackground(Void... params) {
WifiManager manager = (WifiManager) Client.this.getSystemService(Context.WIFI_SERVICE);
if (!manager.isWifiEnabled())
manager.setWifiEnabled(true);
return manager.getScanResults();
}
@Override
protected void onPostExecute(List<ScanResult> items) {
super.onPostExecute(items);
ArrayList<Items> wifi = new ArrayList<>();
for (ScanResult s : items)
wifi.add(new Items(s.SSID, s.capabilities));
///TextView searching = (TextView) findViewById(R.id.searching);
///searching.setText("");
ListView list = (ListView) findViewById(R.id.list);
Explorer adapter = new Explorer(Client.this, R.layout.listview_item_row, wifi);
list.setAdapter(adapter);
clickListener(list, wifi);
}
}
答案 0 :(得分:1)
请使用Toast消息或logcat或断点来检查onPost执行是否正在调用
答案 1 :(得分:0)
我设法让它工作,但采取了不同的方法。
我使用BroadcastReceiver
和registerReceiver
来获取onReceive
事件来更新列表。
以下是代码:
mWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);
if(!mWifiManager.isWifiEnabled())
mWifiManager.setWifiEnabled(true);
mWifiManager.startScan();
wifiReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context c, Intent intent)
{
if(mWifiManager != null) {
List<ScanResult> networks = mWifiManager.getScanResults();
showWifi(networks);
}
}
};
registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
虽然我还没有理解AsyncTask
是如何工作的,但我在加载一个简单的进度条时确实得到了一些不错的结果。
我认为我遇到的问题是这样的:
AsyncTask
。doInBackground
中,getScanResults
启动了另一个后台主题,引导doInBackground
认为工作已完成。onPostExecute
因为doInBackground
完成了工作而被调用。最重要的是,它不是AsyncTask
的错误,我不知道getScanResults
启动了另一个后台线程。