Java 用于多个REST端点的android应用程序中的AsyncTask
在安卓系统中,有没有比使用一个带有参数的Java 用于多个REST端点的android应用程序中的AsyncTask,java,android,rest,android-asynctask,Java,Android,Rest,Android Asynctask,在安卓系统中,有没有比使用一个带有参数的AsyncTask更好的方法来确定要调用哪个REST端点 e、 g.我需要打电话: www.test.com/api/room/id www.test.com/api/room/id/booking AsyncTask是为执行单个操作的单个
AsyncTask
更好的方法来确定要调用哪个REST端点
e、 g.我需要打电话:
www.test.com/api/room/id
www.test.com/api/room/id/booking
AsyncTask
是为执行单个操作的单个
方法而设计的,例如调用:
www.test.com/api/room/id
我不想创建多个AsyncTasks
实例,每个REST端点一个实例
后端将使用:
RoomClient = new RoomClient();
roomClient.getID()
roomClient.getBookingForRoom()
在安卓系统中,看起来我需要
class RoomFromId extends AsyncTask
...
call www.test.com/api/room/id
class BookingForRoom extends AsyncTask
..
call www.test.com/api/room/id/booking
在Android应用程序中,我理想的做法是编写一个rest客户端,它可以在后台调用所有rest端点,而不必在自己的
异步任务中调用每个端点。我更喜欢使用Android所拥有的,而不是第三方库。在您创建的扩展AsyncTask的类中,您可以创建构造函数并传递您想要/需要的任何内容
在这种情况下,您可以定义一个扩展AsyncTask的类ApiManager,并传递一个定义要调用的方法的常量。
在该构造函数中,您可以将变量保存到ApiManager对象,然后在doInBackground方法中检查它
因此,要打电话给房间/id,您可以执行以下操作:
new ApiManager(ROOM_FROM_ID).execute(...
class ApiManager extends AsyncTask... {
private int method;
public ApiManager(int method) {
this.method = method;
}
...
}
以及致电客房/身份证/预订:
new ApiManager(BOOKING_FOR_ROOM).execute(...
ApiManager类应该类似于:
new ApiManager(ROOM_FROM_ID).execute(...
class ApiManager extends AsyncTask... {
private int method;
public ApiManager(int method) {
this.method = method;
}
...
}
创建一个从AsyncTask扩展的泛型类,该类以从YourBaseModel扩展的泛型类型返回响应(我称之为M)
您可以在doInBackground
中发出任意数量的请求,并将结果封装在classI中。我只想在doInBackground中发出一个请求。该请求可以发送到多个REST端点之一。因此,问题是如何将该选择发送到单个AsyncTask您可以在类中使用构造函数扩展AsyncTask这对构造函数来说是一个有趣的想法,谢谢看起来非常好,谢谢。因此,我可以使用builder.getID()和builder.getBookingForRoom()来代替单个run()方法,它们使用正确的url和参数设置内部,并调用execute。i、 e.将大量初始化移到构建器中,这会对调用方隐藏URL。i、 e.我希望应用程序在域层(房间、预订等)工作,而不关心建设者如何获得这些域对象(正文、url等)。这看起来是一个很好的方法。是的,你可以。但是更好的方法是创建一个类似RoomRepo的类并在那里调用所有RoomAPI,只需将URL设置为www.test.com/api/Room/id或www.test.com/api/Room/booking。我看到了,不要把建筑复杂化。所以构建器处理原始数据,即将主体发送到url,然后返回响应数据。RoomRepo的工作是为构建者提供正确的主体和url,并理解响应(房间对象)。如果我有一个信标并且需要从中获取房间id,roomRepo.getRoomIdFromBeaconID(String beaconID)将使用正确的主体、url、回调等设置生成器,并将生成器的响应JSON转换为房间对象。