1)LoginListenerManager.java--监听工具
public class LoginListenerManager {
public static LoginListenerManager ins ;
//同步锁,避免线程非安全操作
public static final Object LOCK = new Object() ;
//弱引用,可以添加多个对登录状态的监听
List<WeakReference<OnLoginStateChanageListener>> listenerList =new ArrayList<>();
//单例
public static LoginListenerManager getIns(){
if(ins == null){
ins = new LoginListenerManager() ;
}
return ins ;
}
//实现此接口,获得传递的LoginResult
public interface OnLoginStateChanageListener {
void onLoginStateChange(LoginResult result) ;
}
//添加监听
public void addLoginStateChangeListener(OnLoginStateChanageListener listener){
WeakReference<OnLoginStateChanageListener> listenerWeakReference=new WeakReference<>(listener);
synchronized (LOCK){
listenerList.add(listenerWeakReference);
}
}
//移除监听
public void removeLoginStateChangeListener(OnLoginStateChanageListener listener){
//do something
}
public void NotiyLoginStateChanage(LoginResult result){
if(listenerList.size() != 0 ){
synchronized (LOCK){
for(int i=0;i<listenerList.size();i++){
OnLoginStateChanageListener listener =listenerList.get(i).get();
if(listener != null){
listener.onLoginStateChange(result);
listenerList.remove(listener);
}
}
}
}
}
}
2)NavigationDrawerFragment.java--添加监听,使用监听结果
public class NavigationDrawerFragment extends Fragment implements LoginListenerManager.OnLoginStateChanageListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//do someting...
//添加监听
LoginListenerManager.getIns().addLoginStateChangeListener(this);
}
//...do something...
@Override
public void onLoginStateChange(LoginResult result) {
if (result != null && result.data.uid!=""){
LoginBean.getInstance().setLoginTag(true);
//使用登陆结果设置界面
refreshLoginView(result);
LoginBean.getInstance().setLoginResult(result);
LoginBean.getInstance().setVipTag(result.user.vip_member);
}else{
LoginBean.getInstance().setLoginTag(false);
}
}
}
3)请求数据,更新符合条件的监听结果
public class LoginActivity extends AppCompatActivity {
//...do something...
public void initData() {
IBeanLoader iBeanLoader = new BeanLoaderImpl(getApplication());
iBeanLoader.setCallback(new IBeanLoader.ILoadCallback<LoginResult>() {
@Override
public void onCacheComplete(int tag, LoginResult result) {
}
@Override
public void onHttpComplete(int resultCode, int tag, LoginResult result) {
if ( result != null && "success".equals(result.msg)) {
//判断result符合条件时,启动更改监听结果
LoginListenerManager.getIns().NotiyLoginStateChanage(result);
//do something...
} else if (result != null) {
Toast toast = Toast.makeText(getApplication(), result.msg + ",请重新登录", Toast.LENGTH_SHORT);
toast.show();
} else {
Toast toast = Toast.makeText(getApplication(), "登录失败,请重新登录", Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onContentChange(int tag) {
}
});
iBeanLoader.loadHttp(new LoginBean, 1);
}
//...do something...
}