- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是一个简单的 Volley Api 监听器,如何从单个 Api 调用方法中调用我项目中的每个 API。我在一个项目中有大约 40 个其他类似的 API,我厌倦了一次又一次地编写相同的代码块。有谁知道该怎么做?==> 我听说进行回调是一种解决方案,但我想要确切的方法来处理它。
private void reservationCancelAPIExecute(String reservation_id) {
CustomProgressBarDialog.progressDialog = CustomProgressBarDialog.showProgressDialog(mcontext);
if (visible) CustomProgressBarDialog.progressDialog.show();
final HashMap<String, String> params = new HashMap<>();
params.put("user_id", user_ID);
params.put("reservation_id", reservation_id);
Log.e("Parameters", params.toString());
String REquestUrl = Config.APP_BASE_URL + Config.API_RESERVATION_CANCEL;
StringRequest req = new StringRequest(Request.Method.POST, REquestUrl,
new Response.Listener<String>() {
@Override
public void onResponse(String responseObject) {
String newResponse = responseObject;
CustomProgressBarDialog.progressDialog.dismiss();
if (responseObject.contains("")) {
newResponse = newResponse.substring(newResponse.indexOf("{"));
}
try {
JSONObject response = new JSONObject(newResponse);
boolean error = response.getBoolean("error");
if (!error) {
CustomProgressBarDialog.progressDialog.dismiss();
session.createReservationByUser(DBTableFields.RESERVATION_STATE_CANCELLED);
session.createReservationByUser(DBTableFields.RESERVATION_STATE_NEW);
//EApplication.getInstance().showToastMessageFunction(response.getString("message"));
/* session.clearPickUPDropOffLocationAddress();*/
EApplication.getInstance().setPreviousReservationStatus(false);
/* reservationCancelSuccessDialog();*/
if (isAdded()) {
EApplication.getInstance().showToastMessageFunction(getResources().getString(R.string.canceled_reservation));
}
//Toast.makeText(mcontext, getResources().getString(R.string.canceled), Toast.LENGTH_SHORT).show();
} else
{
EApplication.getInstance().showToastMessageFunction("" + response.getString("message"));
CustomProgressBarDialog.progressDialog.dismiss();
}
} catch (JSONException e) {
e.printStackTrace();
CustomProgressBarDialog.progressDialog.dismiss();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if(isAdded())
EApplication.getInstance().showToastMessageFunction(getResources().getString(R.string.no_internet_availeble));
VolleyLog.d("Error", "Error: " + error.getMessage());
CustomProgressBarDialog.progressDialog.dismiss();
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return params;
}
@Override
public Request.Priority getPriority() {
return Request.Priority.HIGH;
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
/*headers.put("Content-Type", "application/json");*/
String current_language = session.getAppLanguage();
Log.i("current_language", current_language);
if (current_language.equalsIgnoreCase(Config.LANG_ENG)) {
language = "en";
}
if (current_language.equalsIgnoreCase(Config.LANG_THAI)) {
language = "np";
}
headers.put("lang", language);
return headers;
}
};
req.setRetryPolicy(new DefaultRetryPolicy(
20000,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
EApplication.getInstance().addToRequestQueue(req, "high");
}
Config文件包含,即API列表
package com.EddyCabLatest.application.constant;
public class Config {
public static final String PRIVACY_POLICY_DRIVER_NEPALI =
"<a href=https://www.eddycab.com/np/legal-2/privacy/drivers/";
public static final String PRIVACY_POLICY_DRIVER_ENGLISH =
"<a href=https://www.eddycab.com/en/legal/privacy/drivers/";
public static final String PRIVACY_POLICY_PASSENGER_ENGLISH = "<a href=https://www.eddycab.com/en/legal/privacy/users/";
public static final String PRIVACY_POLICY_PASSENGER_NEPALI =
"<a href=https://www.eddycab.com/np/legal-2/privacy/users/";
public static final String TERMS_DRIVER_NEPALI =
"<a href=https://www.eddycab.com/np/legal-2/user-terms/";
public static final String TERMS_DRIVER_ENGLISH =
"<a href=https://www.eddycab.com/en/legal/terms-conditions/";
public static final String GOOGLE_MAP_API_KEY = "AIzaSyAi6qreeIcyoDDxtrcMnYqKwTMR064C4xc";//test
public static final String GCM_SENDER_KEY = "1024195933443";
public static final String APP_BASE_URL = "https://www.eddycab.com/API/public/";
public static final String USER_REGISTER_URL = "api/users/register";
public static final String USER_LOGIN_URL = "api/users/login";
public static final String CREDIT_BONUS = "api/bananas/credit-and-bonus/";
public static final String GET_NEW_RESERVATIONS = "api/reservations/new-reservations-by-driver/";
public static final String USER_SET_BOOKING_URL = "api/reservations/set-booking";
public static final String USER_GET_DRIVER_LOCATION_POST_URL = "api/reservations/get-driver-location";
public static final String GET_BIDDING_RESULT_URL = "api/reservations/biddings/";
public static final String GET_USER_PROFILE = "api/users/get-user-profile/";
public static final String USER_RESERVATION_URL = "api/reservations/create";
public static final String API_RESERVATION_CANCEL = "api/reservations/cancel-reservation/";
public static final String USER_RESERVATION_RESPONSE_URL = "api/reservations/biddings/";
public static final String UPDATE_FAV_HOME_URL = "api/users/set-favourite-home-place";
public static final String UPDATE_FAV_WORK_URL = "api/users/set-favourite-work-place";
public static final String EDIT_PROFILE = "api/users/edit-profile";
public static final String UPDATE_USER_PROFILE_CHANGE_PROFILE_PIC = "api/users/set-profile-picture";
public static final String DRIVER_BID_POST = "api/reservations/driverPostBid";
public static final String DRIVER_RESERVATION_ASSIGN_POST = "api/reservations/reservation-assign";
public static final String DRIVER_RESERVATION_IGNORE_POST = "api/reservations/reservation-ignore";
public static final String DRIVER_RESERVATION_CANCEL_POST = "api/reservations/cancel-reservation-by-driver";
public static final String DRIVER_DRIVER_PICKUP_PASSENGER_POST = "api/reservations/pickup-passenger";
public static final String API_BIDDER_CANCEL_BY_USER = "api/reservations/cancel-bidder";
public static final String USER_TRIP_HISTORY_URL = "api/reservations/user-trip-history/";
public static final String Driver_BOOKING_HISTORY_URL = "api/reservations/driver-booking-history/";
public static final String NEAREST_DRIVER_BY_LOCATION = "api/reservations/get-nearest-drivers";
public static final String DRIVER_GET_QUITE_TIME_URL = "api/quietsetting/get-quiet-setting/";
public static final String DRIVER_SET_QUITE_TIME_URL = "api/quietsetting/set-quiet-setting";
public static final String SET_USER_LOCATION_POST_URL = "api/locations/set-location";
public static final String GET_PUSH_NOTIFICATION_DRIVER = "api/reservations/send-reservation-push-notifications/";
public static final String USER_FEEDBACK_RATING_URL = "api/feedbacks/user-feedback";
public static final String SUPPORT_FEEDBACK_POST_URL = "api/support/insert-feedback";
public static final String GET_MESSAGES_FROM_GCM_URL = "api/notifications/get-all-notifications/";
public static final String DRIVER_JOB_COMPLETE_URL = "api/reservations/reservation-complete";
public static final String DRIVER_PAY_VOUCHER_URL = "api/reservations/reservation-receipt";
public static final String DELETE_NOTIFICATION_MESSAGE = "api/notifications/remove-message/";
public static final String DELETE_ALL_NOTIFICATION_MESSAGE = "api/notifications/remove-user-messages/";
public static final String USER_LOGOUT = "api/users/logout/";
public static final String CHANGE_LANGUAGE = "api/users/set-language";
public static final String LANG_ENG = "English";
public static final String LANG_THAI = "Thai";
public static final String USER_TYPE_DRIVER = "driver";
public static final String USER_TYPE_USER = "user";
public static final String USER_TYPE_USER_ID = "1";
public static final String CALL_CENTER_NUMBER = "16600177711";
public static final String Driver_TYPE_USER_ID = "2";
public static final float CAMERA_FACTORY_UPDATE = 15;
public static final String DEVICE_TYPE = "android";
public static final long COUNTDOWN_TIME = 30000;
public static final String FORGET_PASSWORD_SEND_MESSAGE = "api/users/forget-password/";
public static final String CONFIRM_VERIFICATION_CODE = "api/users/verify-code";
public static final String API_SET_NEW_PASSWORD = "api/users/set-new-password";
public static final String RATE_USER_BY_DRIVER = "api/feedbacks/driver-feedback";
public static final String URL_RESEEND_CODE_GET = "api/users/resend-code/";
public static final String DRIVER_RECHARGE_HISTORY = "api/bananas/recharge-card-history/";
public static final String RECHARGE_CARD = "api/bananas/recharge-card/";
public static String DRIVER_JOB_COMPLETE_URL_call_center = "api/reservations/complete-callcenter-created-reservation";
}
最佳答案
您可以尝试以下方法:
创建您自己的自定义接口(interface)以获取回调:
import org.json.JSONObject;
/**
* Implement this listener for getting callback for UploadManager.doUpload()
* method.
*
*
*/
public interface UploadListener {
/**
* On success upload, server response for given network upload task.
*
* @param response
*/
void onSuccessUploadResponse(JSONObject response);
/**
* On failed upload, server response for given network upload task.
*
* @param error
*/
void onErrorUploadResponse(Throwable error);
}
然后为网络操作创建单例类并抽象出 volley 代码:
import org.json.JSONObject;
import android.content.Context;
import android.util.Log;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
/**
* Singleton class for network operations and to abstract out the volley
* code.
*
* @see <a
* href=" http://developer.android.com/training/volley/index.html">Volley</a>
*
*
*/
public class UploadManager {
private static UploadManager uploadManager;
private static RequestQueue mRequestQueue;
public static final int METHOD_POST = Request.Method.POST;
public static final int METHOD_GET = Request.Method.GET;
public static final int METHOD_PUT = Request.Method.PUT;
public static final int METHOD_DELETE = Request.Method.DELETE;
private UploadManager(Context context) {
mRequestQueue = Volley.newRequestQueue(context);
// Start the queue
mRequestQueue.start();
}
public static UploadManager getinstance(Context context) {
if (uploadManager == null) {
uploadManager = new UploadManager(context);
}
return uploadManager;
}
/**
* Implement UploadManager.CallbackListener for getting callback for this
* method.
*
* @param url
* : url to be used for network call.
* @param method
* : HTTP method type.
* @param jsonRequest
* : JSON object to be sent
* @param callbackListener
* : callback listener for getting success or error callback.
*/
public void doUpload(String url, int method, JSONObject jsonRequest,
final UploadListener callbackListener) {
JsonObjectRequest jsObjRequest = new JsonObjectRequest(method, url,
jsonRequest, new Response.Listener<JSONObject>() {
public void onResponse(JSONObject response) {
callbackListener.onSuccessUploadResponse(response);
};
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (null != error) {
callbackListener.onErrorUploadResponse(error
.getCause());
}
}
});
mRequestQueue.add(jsObjRequest);
}
}
并且您可以在所有类中使用 doUpload();
方法,而无需一次又一次地编写 volley 代码。
关于android - 需要 Volley API 调用简化解决方案,从单一方法调用所有 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37916686/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!