私はStringListのArrayListを返すプログラムを書いています。問題は、私がメソッドを呼び出すと、リストはまだ埋められていないので、空のリストが戻ってくる。 私はスレッドで試しましたが、メソッドを呼び出すとnull
の参照を取得しました。ところで、私は非同期タスクを実装する必要がありました。それ以外の場合は、InetAddress
を使用しようとすると例外が発生します。プログラムを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;
}
}
を呼び出すことができますあなたは実行する必要があります後で別の同期タスクでこのリストを使用するコード – Ferrybig
私はC#での経験があり、非同期メソッドを実装することでこの問題を解決する簡単な方法があったのですが、 :( –
非同期タスクが完了するのを待っている場合でも、同じ例外が発生します。理由はアンドロイドが例外をスローした場合、メインスレッドをハングアップするとアプリケーションが応答しなくなり、悪いユーザーエクスペリエンスにつながるということです。 – Ferrybig