我在写一个程序,它返回一个String的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#的经验,以及我记得有一种简单的方法来通过实现异步方法来解决此问题,但我如何知道java中没有等效:( –
如果您正在等待异步任务完成,您仍然会得到相同的异常。 Android引发这种异常的原因是,如果您挂起主线程,您的应用将无响应,导致用户体验不佳 – Ferrybig