Zee*_*bir 7 android web-services event-bus android-fragments
Activity/Fragment
当我从服务器得到响应时,我正在使用EventBus通知.到目前为止一切都运行良好,但是当我在同一个Fragment
或两个网络中使用两个网络呼叫时会出现问题Activity
.问题是onEvent(String response)
从服务器获取两个响应的相同方法.反应call 1
不同于call 2
.
我提出了一个解决方案 - 我添加CallType
了NetworkReqest
但我无法通知活动/片段有关网络调用,因为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);
}
}
Run Code Online (Sandbox Code Playgroud)
方法内部fragment/activity
出现问题,当从一个请求获得响应后,我触发另一个请求,该请求取决于第一个请求的休止
@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();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能区分callType
内部onEvent()
.需要一些指导.非常感谢.
一种选择是将您需要的两部分数据包装到一个类中并将其传递到事件总线。为了简洁起见,省略了私有成员、getter/setter 和构造函数。
class NetworkResponse() {
public String callType;
public String response;
}
Run Code Online (Sandbox Code Playgroud)
当您收到响应时,分配 aNetworkResponse
并用响应和调用类型填充它并将post
其填充到事件总线。
@Subscribe(threadMode = ThreadMode.MAIN)
public void onEvent(NetworkResponse networkResponse) {
if(networkResponse.callType.equals(CALL_1)) {
// ...
} else if (networkResponse.callType.equals(CALL_2)) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
523 次 |
最近记录: |