接口传递网络请求结果

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...
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个较为完整的uniapp网络请求接口封装代码: ```js // 封装请求函数 function request(url, data = {}, method = 'GET') { return new Promise((resolve, reject) => { uni.request({ url, data, method, header: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + uni.getStorageSync('token') }, success: res => { // 请求成功 if (res.statusCode === 200) { resolve(res.data) } else { reject(res) } }, fail: err => { // 请求失败 reject(err) } }) }) } // 定义接口基础地址 const baseUrl = 'https://api.example.com' // 封装接口请求函数 export function login(data) { return request(`${baseUrl}/login`, data, 'POST') } export function getUserInfo(userId) { return request(`${baseUrl}/user/${userId}`) } // ... 还可以继续封装其他接口请求函数 ``` 在上面的代码中,我们在 `request` 函数中添加了一个请求头,用于传递身份验证信息。在每次请求接口时,都会携带一个名为 `Authorization` 的请求头,其值为当前用户的身份验证令牌。这样,在服务端就可以根据身份验证令牌来判断当前用户的身份了。 另外,我们定义了一个 `baseUrl` 常量,用于存储接口的基础地址。这样,在实际使用时,我们只需要在接口请求函数中指定相对地址即可。 在实际使用中,我们可以在需要发送网络请求的地方,直接引入并调用以上封装好的接口请求函数。例如: ```js import { getUserInfo } from '@/api/user' getUserInfo('123456').then(res => { console.log(res) }) ``` 以上代码会调用 `getUserInfo` 函数,向服务器请求 id 为 123456 的用户信息。请求成功后,会将返回的数据打印到控制台中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值