के साथ कॉल प्रकार का उपयोग कैसे करें मैं सर्वर से प्रतिक्रिया प्राप्त करते समय 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);
}
}
fragment/activity
यहाँ अंदर विधि है जब एक अनुरोध से प्रतिक्रिया प्राप्त करने के बाद मैं एक और अनुरोध है जो पहले अनुरोध के respose की निर्भर है आग समस्या उत्पन्न होती हैं
@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
को कैसे अलग कर सकता हूं। कुछ मार्गदर्शन की आवश्यकता है। बहुत धन्यवाद।
मैं ऐसा करने के बारे में सोच रहा था, लेकिन मैंने सोचा कि इससे कुछ बेहतर समाधान हो सकता है। –