Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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
Android 如何重用org.restlet.resource.ClientResource_Android_Rest_Restlet 2.0 - Fatal编程技术网

Android 如何重用org.restlet.resource.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

我目前正在Android上使用Restlet 2.1.2,我想知道如何在我的应用程序中重用实例Clientresource

以下是我使用的代码:

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();
    }
}