Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于多个REST端点的android应用程序中的AsyncTask_Java_Android_Rest_Android Asynctask - Fatal编程技术网

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转换为房间对象。