içinde bir yöntem için bekliyorum Bana bir ArrayList dizeleri döndüren bir program yazıyor. Sorun, yöntem çağrıldığında liste henüz doldurulmadığı için boş bir liste geri aldım. Bir iş parçacığı ile denedim, ancak yöntemi çağırdığımda şimdi bir null
başvurusu alıyorum. Bu arada bir async görevini uygulamak zorunda kaldım, aksi halde InetAddress
'u kullanmaya çalışırken bir istisna alıyorum. Eğer dizi listesi ve zaman uyumsuz görev doINBackground yöntemini almak için zaman uyumsuz görev kullandığınız olarak çünküBir program nasıl yapılır java
private class DeviceManager extends Thread {
private ArrayList<String> deviceList;
private String networkIP;
public DeviceManager(String networkIP) {
this.networkIP = networkIP;
}
public void run() {
getDeviceList();
}
public ArrayList<String> getDeviceList() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
deviceList = new ArrayList<String>();
InetAddress address;
Log.i("NetworkIPgetDeviceList", networkIP);
String deviceIP = networkIP;
for (int i = 0; i < 255; i++) {
address = InetAddress.getByName(deviceIP += "" + i);
if (address.isReachable(2000)) {
Log.i("Devicefound", deviceIP);
deviceList.add(deviceIP);
}
deviceIP = networkIP;
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}.execute();
return deviceList;
}
public ArrayList<String> getList() {
return this.deviceList;
}
}
Kaçmalısın çağırabilir Bu listeyi daha sonra başka bir senkronizasyon görevinde kullanan kod – Ferrybig
C# ile deneyime sahibim ve nasıl bir async yöntemi uygulayarak bu sorunu çözmek için basit bir yol olduğunu hatırladım, ama javada eşdeğer olmadığını biliyorum :( –
Async görevinin tamamlanmasını bekliyorsanız, yine de aynı özel durumu elde edersiniz. Android bu istisna atar neden, Eğer ana iş parçacığı asmak Eğer app tamamen yanlış yapıyoruz kötü kullanıcı deneyimi – Ferrybig