Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 如何使用EventBus调用Call Type大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
当我从服务器得到响应时,我正在使用EventBus通知Activity / Fragment.到目前为止,一切都运行良好,但是当我在相同的Fragment或Activity中使用两个网络调用会出现问题.问题是onEvent(String responsE)获取来自服务器的两个响应的调用方法.呼叫1的响应与呼叫2不同.

我提出了一个解决方案 – 我在NetworkReqest中添加了CallType但是我无通知活动/片段有关网络调用,因为post()只接受一个参数.

这是相关的代码

public class Networkrequest {
    EventBus eventBus = EventBus.getDefault();

    public void StringParamrequest(String url,final Map<String,String> params,String callTypE) {
        Stringrequest jsonObjrequest = new Stringrequest(request.Method.POST,url,new Response.Listener<String>() {
                    @Override
                    public void onResponse(String responsE) {
                        eventBus.post(responsE);
                    }
                },new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d("volley","Error: " + error.getmessage());
                eventBus.post(error);
            }
        }) {

            @Override
            public String getBodyContentType() {
                return "application/x-www-form-urlencoded; charset=UTF-8";
            }

            @Override
            protected Map<String,String> getParams() throws AuthFailureError {
                Map<String,String> param = params;
                return param;
            }

        };
        SkillSchoolApplication.get().addTorequestQueue(jsonObjrequest);
    }

    public void Stringrequest(String url,String callTypE) {
        Stringrequest Stringrequest = new Stringrequest(url,new Response.Listener<String>() {
            @Override
            public void onResponse(String responsE) {
                eventBus.post(responsE);
            }
        },new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });
        SkillSchoolApplication.get().addTorequestQueue(Stringrequest);
    }


}

片段/活动内部的方法这里出现问题,当从一个请求获得响应后,我触发另一个请求,该请求取决于第一个请求的响应

@Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(String responsE) {
        Log.d(tag,responsE);
        Boolean isCourseAvaible = false;
        if (!isCourseAvaiblE) {
            isCourseAvaible = true;
            List<CoursesDTO> coursesDTOs = AppMgr.coursesMgr(responsE);
            String[] ids = new String[0];
            String id;
            if (coursesDTOs != null) {
                ids = new String[coursesDTOs.size()];
                for (int i = 0; i < coursesDTOs.size(); i++) {
                    ids[i] = coursesDTOs.get(i).getListId();

                }
            }
            id = TextUtils.join(",",ids);
            Map<String,String> map = new HashMap<>();
            map.put("part","snippet,contentDetails");
            map.put("playlistId",id);
            map.put("key",AppConstants.YOUTUBE_KEY);
            Networkrequest networkrequest = new Networkrequest();
            networkrequest.StringParamrequest("some url",map);
        } else {
            Log.d(tag,responsE);
        }

    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onEvent(VolleyError error) {
        Log.d(tag,error.toString());
        Toast.makeText(getActivity(),"Something went wrong " + error.toString(),Toast.LENGTH_SHORT).show();
    }

如何区分onEvent()中的callType.需要一些指导.非常感谢.

解决方法

一种选择是将您需要的两个数据包装到一个类中并将其传递给事件总线.为了简洁起见,离开私人会员,吸气者/制定者和建设者.
class NetworkResponse() {
   public String callType;
   public String response;
}

当您收到响应时,分配NetworkResponse并使用响应和呼叫类型填充它并将其发布到事件总线.

@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(NetworkResponse networkResponsE) {
  if(networkResponse.callType.equals(Call_1)) {
     // ...
  } else if (networkResponse.callType.equals(Call_2)) {
     // ...
  }

}

大佬总结

以上是大佬教程为你收集整理的android – 如何使用EventBus调用Call Type全部内容,希望文章能够帮你解决android – 如何使用EventBus调用Call Type所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。