Android 如何重用org.restlet.resource.ClientResource
我目前正在Android上使用Restlet 2.1.2,我想知道如何在我的应用程序中重用实例Clientresource 以下是我使用的代码:Android 如何重用org.restlet.resource.ClientResource,android,rest,restlet-2.0,Android,Rest,Restlet 2.0,我目前正在Android上使用Restlet 2.1.2,我想知道如何在我的应用程序中重用实例Clientresource 以下是我使用的代码: Client client = new Client (new Context (), Protocol.HTTP); ClientResource clientResource ClientResource = new ("http://codeblow.com/"); clientResource.setNext (client
Client client = new Client (new Context (), Protocol.HTTP);
ClientResource clientResource ClientResource = new ("http://codeblow.com/");
clientResource.setNext (client);
/ / Executors.newCachedThreadPool ExecutorService pool = ();
clientResource.get ();
clientResource.release ();
ClientResource clientResource1 ClientResource = new ("http://codeblow.com/");
clientResource.setNext (client);
“启动内部[HTTP/1.1]客户端”
“启动内部[HTTP/1.1]客户端”
如您所见,在ClientResource的每个新实例上,它都会创建新的客户机。
我只想保留1个clientresource,然后使用同一实例向服务器发出少量请求
最好的方法是什么
另一点:我使用了#setNext()方法来保留客户端,但我觉得这没用,因为它无论如何都会创建另一个客户端
致以最诚挚的问候您应该删除对release()的调用,该调用有效地停止客户端连接器,然后由第二个客户端资源再次自动启动该连接器。这就是我在android应用程序中使用restlet 2.3.1解决此问题的方法。我为我想要访问的url、段和参数创建了一个引用。然后在ClientResource上使用.setReference()。这样,您就可以创建ClientResource的一个实例,并重复使用.setReference()来更改参数。使用这种方法,它只会启动和停止HTTP客户端一次 下面是一段代码片段,展示了这个想法。这段代码使用的是IntentService和JSON响应,但这些不是必需的。我没有包括资源对象的代码,因为它与问题没有直接关系
import org.restlet.data.Reference;
import org.restlet.engine.Engine;
import org.restlet.ext.jackson.JacksonConverter;
import org.restlet.resource.ClientResource;
public class MyDataService extends IntentService {
private static final String CLOUD_DATA_ENDPOINT = "http://my.server-app.com";
private ClientResource cr = null;
protected void onHandleIntent(Intent intent) {
cr = getClientResource();
UserObj = retrieveUser("myuserid");
AccountObj = retrieveAccount("myacctid");
cr.release();
}
private ClientResource getClientResource() {
Engine.getInstance().getRegisteredConverters()
.add(new JacksonConverter());
// Initialize the resource proxy.
ClientResource cr = new ClientResource(CLOUD_DATA_ENDPOINT);
// Workaround for GAE servers to prevent chunk encoding
cr.setRequestEntityBuffering(true);
cr.accept(MediaType.APPLICATION_JSON);
return cr;
}
private UserObj fetchUser(String userID){
Reference queryRef = new Reference(CLOUD_DATA_ENDPOINT);
queryRef.addSegment("user");
queryRef.addQueryParameter(QueryResource.FIELD_USER_ID, userID);
cr.setReference(queryRef);
UserResource resource = cr.wrap(UserResource.class);
// may return null or empty object
return resource.retrieve();
}
private AccountObj fetchAccount(String accountID){
Reference queryRef = new Reference(CLOUD_DATA_ENDPOINT);
queryRef.addSegment("account");
queryRef.addQueryParameter(QueryResource.FIELD_ACCOUNT_ID, accountID);
cr.setReference(queryRef);
AccountResource resource = cr.wrap(AccountResource.class);
// may return null or empty object
return resource.retrieve();
}
}