Java WeakReference 使用错误一例
FileShareService.java
public class FileShareService extends Service {
...
private void initWifi() {
wifiServer = new WifiApServer(this, new WifiApResultHandler() {
@Override
public void onResult(boolean state, Object data) {
if (state) {
startHttpServer();
}
}
});
}
...
}
WifiApServer.java
public class WifiApServer {
private WeakReference<WifiApResultHandler> mResultRef;
...
public WifiApServer(Context context, WifiApResultHandler shareHandler) {
mResultRef = new WeakReference<>(shareHandler);
}
private void startWifiAp(String ssid, String password) {
WifiApResultHandler resultHandler = mResultRef.get();
...
}
}
Problem
在WifiApServer.startWifiAp中,resultHandler 的值是null。
Solution
FileShareService 中把WifiApResultHandler对象放在类的属性中:
public class FileShareService extends Service {
...
private WifiApResultHandler mWifiSpotResultHandler = new WifiApResultHandler() {
@Override
public void onResult(boolean state, Object data) {
if (state) {
startHttpServer();
}
}
};
private void initWifi() {
wifiServer = new WifiApServer(this, mWifiSpotResultHandler);
}
...
}





近期评论