我正在使用 Volley 在我的应用程序中进行网络调用...对于许多屏幕...(例如 fragment )我正在发出各种请求,例如 LoginRequest、FetchUsers 请求、FetchExams 请求...并处理响应和错误在每个 fragment 中。
我可以使用的最佳方法是什么...... 1. 对请求进行子类化 2. 创建接口(interface)/回调 3. 在我的 fragment 中获取结果/响应或错误响应...
这就是我正在做的......创建许多这样的方法......
private void syncAllUsers() {
progressDialog.setMessage("Loading Users...");
StringRequest jsonProductCategoryFetchRequest = new StringRequest(Request.Method.POST, Config.SELECT_USERS,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
if(Constants.DEBUG_MODE_ON)
Log.d(Constants.DEBUG_LOG, "RESPONSE for Teachers: "+response);
JSONObject result = new JSONObject(response);
boolean code = result.getBoolean("error");
if (!code) {
//Get the Users Json Array
JSONArray ja = result.getJSONArray("users");
if(ja != null) {
db.deleteAllUsers();
for (int i = 0; i < ja.length(); i++) {
JSONObject jobj = ja.getJSONObject(i);
User user = new User();
user.setId(jobj.getInt(User.KEY_ID));
user.setName(jobj.getString(User.KEY_NAME));
user.setEmail(jobj.getString(User.KEY_EMAIL));
user.setPhone(jobj.getString(User.KEY_PHONE));
user.setGender(jobj.getString(User.KEY_GENDER));
user.setUsername(jobj.getString(User.KEY_USERNAME));
user.setPassword(jobj.getString(User.KEY_PASSWORD));
user.setOrganization_id(jobj.getString(User.KEY_ORGANIZATION_ID));
user.setDob(jobj.getString(User.KEY_DOB));
user.setStatus(jobj.getString(User.KEY_STATUS));
user.setApi_key(jobj.getString(User.KEY_API_KEY));
user.setDate_created(jobj.getString(User.KEY_DATE_CREATED));
user.setRole_id(jobj.getInt(User.KEY_ROLE_ID));
//Delete local Teachers before updating
db.createUser(user);
} // for loop ends
}
}
//syncAllExams();
progressDialog.dismiss();
getActivity().finish();
startActivity(new Intent(getActivity(), MainActivity.class));
} catch (Exception e) {
Log.d(Constants.DEBUG_LOG, "Exception Syncing Users: " , e);
Toast.makeText(getActivity(),"Something went wrong while fetching users", Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
getActivity().finish();
startActivity(new Intent(getActivity(), MainActivity.class));
}
}
} , new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(Constants.DEBUG_MODE_ON)
Log.d(Constants.DEBUG_LOG, "Error Response for Users : "+error.getCause()+""+error.toString());
Toast.makeText(getActivity(), getString(R.string.no_internet), Toast.LENGTH_SHORT).show();
progressDialog.dismiss();
getActivity().finish();
startActivity(new Intent(getActivity(), MainActivity.class));
}
}) {
@Override
protected Map<String, String> getParams() {
Map<String, String> params = new HashMap<String, String>();
params.put(User.KEY_ORGANIZATION_ID, preferencesManager.getOrganizationID());
params.put(User.KEY_API_KEY, preferencesManager.getApiKey());
Log.d("Registration", "PARAMS : " + params.entrySet());
return params;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
// params.put("Content-Type", "application/json; charset=utf-8");
params.put("Content-Type", "application/x-www-form-urlencoded");
String auth = preferencesManager.getApiKey();
params.put("Authorization", auth);
return params;
}
};
MyApplication.getInstance().addToReqQueue(jsonProductCategoryFetchRequest);
}
我认为会有一种干净的方法来执行此操作。任何建议。
最佳答案
我一直在使用这个类来创建请求,它使用 gson 自动将你的 json 转换为你的对象。在这里查找示例: https://gist.github.com/ficusk/5474673
关于android - 在 Android 中以结构化模式使用 Volley 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427543/