Articles of rest

Volley JSONException:在0的字符0处输入结束

我见过其他人遇到过这个问题,但没有一个post可以帮助我。 我正在尝试将Volley用于我的REST调用库,当我尝试使用带有JSON对象的Put调用作为参数时,我收到error with: org.json.JSONException: End of input at character 0 of 。 这是代码: protected void updateClientDeviceStatus(Activity activity, final int status) { JSONObject jsonParams = new JSONObject(); try { jsonParams.put(“statusId”, String.valueOf(status)); } catch (JSONException e1) { e1.printStackTrace(); } Log.i(LOG_TAG, “json: ” + jsonParams.toString()); String url = Constants.API_URL + “client/device/” + getDeviceId(); // Request a response from […]

使用改造无效工作从Android登录通过Rest web服务

我正在使用Retrofit 2制作一个Android应用程序。 我的REST Api都是用Liferay编写的。 现在在Liferay,我所看到的是,访问我们需要首先进行身份validation的Web服务。 所以我已经这样认证了 http://test:q1w2e3r4@192.168.0.110:8080/liferay-portlet/api/secure/jsonws/ Liferay有自己的用户身份validation方法,我们已经覆盖了。我检查了Postman的Web服务调用工作正常。 URL:http://test:q1w2e3r4@192.168.0.110:8080/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name forms编码的值 companyId:10154 screenName:xyz password:xyz active:true 如果我把它放在邮递员中,它会正确地获取json响应。 现在,当我从我的Android代码中调用相同的内容时,我得到一个响应“未经授权”。 我的改造服务 public interface LoginApi { @FormUrlEncoded @POST(“/liferay-portlet/api/secure/jsonws/customuserauthentication/authenticate-by-user-name”) Call login(@Field(“companyId”)long companyId,@Field(“screenName”)String screenName,@Field(“password”)String password,@Field(“active”)boolean active); } 我的RestApiManager类(此类用于调用服务接口并创建改造构建器) public class RestApiManager { private LoginApi loginApi; public LoginApi login() { if (loginApi==null) { GsonBuilder gson=new GsonBuilder(); gson.registerTypeAdapter(String.class, new StringDeserializer()); Retrofit retrofit=new Retrofit.Builder() .baseUrl(“http://test:q1w2e3r4@192.168.0.110:8080”) […]

Rest服务器或API来测试我的Restful客户端?

我正在创建一个Android应用程序,要求我对服务器进行rest请求,获取一些数据并进行分析。 我仍然是Android开发的新手,所以我不确定我是否正在实现请求和线程正确,并且服务器还没有准备好。 所以我需要一个可以用来测试发送请求的公共rest服务器? 我收到的数据无关紧要。 提前致谢。

任何人都可以解释OAuth吗?

我在http://oauth.net/上读过一些关于它的内容,显然是“发布受保护数据和与受保护数据交互的一种简单方法”。 我认为这正是我需要通过REST Web服务提供从android / iphone应用程序访问数据的安全方式,但我无法确切地知道它是什么。 所以,简单地说,它究竟做了什么,是否有任何(真的)简单的例子,我可以遵循它,最好在c#中实现可以从智能手机应用程序访问的东西?

使用Retrofit进行并行HTTP请求

我有一个Android应用程序,目前正在使用Volley库来发出网络请求并使用NetworkImageView显示下载的图像。 我想测试Retrofit的function,因为我需要运行大量请求(数千),我有点担心并行执行。 Volley使用RequestQueue处理并行请求,该RequestQueue将并发运行请求限制为4,而其他请求则排队等待执行。 在Retrofit文档中,我没有find任何方法来处理并发请求的数量,我怀疑这些细节留给了这个库中的开发人员。 它是否正确? 如果是这样,是否有任何面向android的实现/库可用? 否则,处理并行请求的最佳做法是什么?

如何在使用gson转换器时将改装用作单件?

从@jake Wharton的回答中,您应该只调用一次restAdapter.create,并在每次需要交互时重复使用相同的MyTaskService实例。 我不能强调这一点。 您可以使用常规单例模式,以确保在任何地方只使用这些对象的单个实例。 dependency injection框架也可用于管理这些实例,但如果您尚未使用它,则会有点矫枉过正。 这是我的代码 public class MusicApi { private static final String API_URL = “https://itunes.apple.com”; private static MusicApiInterface sMusicApiInterface; public static MusicApiInterface getApi() { if (sMusicApiInterface == null) { sMusicApiInterface = null; RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(API_URL) .build(); sMusicApiInterface = restAdapter.create(MusicApiInterface.class); } return sMusicApiInterface; } public interface MusicApiInterface { @GET(“/search?entity=musicVideo”) NetworkResponse […]

关于使用同步适配器和内容提供程序同步多个表感到困惑

我很困惑哪种方式最好让多个表在我的应用程序中同步。 我有一个内容提供商,并打算有多个表(事件,用户等)。 我还有一个应用程序应该与之通信的rest服务器。 我想知道处理每个表的多个连接(put,get,post和delete)的最佳实践是什么。 他们也有关系,就像一个用户可以参加活动,但也是活动的所有者。 因此,如果我已经为该用户创建了用户和所属事件,我可以上传用户,从服务器获取有关用户的信息,使用有关用户的信息上传事件,获取该信息然后更新用户使用新的事件信息。 解决这些问题的最佳方法是什么? 我应该创建一个方法(http://example.com/sync)来聚合应该同步的所有数据吗? 或者我应该坚持,有时约15-20个请求?

改造和AUTH COOKIE

我需要知道如何在改造中添加授权cookie头。 我已经看到过使用请求截取等建议。以下是我正在尝试的,但这是正确的吗? 首先,我已经需要一个RequestAdatper来第一次获取会话ID。 这只能由请求适配器的构建器设置。 但我需要提出一个请求才能获得会话ID。 我需要两个rest适配器,一个用于获取sessionId,另一个用于获取它之后。 我真正需要的是一个适配器上的方法,在我得到它之后设置cookie,但它似乎不是这样的方法。 这变得很尴尬。 如何在改造中设置授权cookie? 我在FAQ或教程中没有看到这一点。 RequestInterceptor requestInterceptor = new RequestInterceptor() { @Override public void intercept(RequestFacade request) { request.addHeader(“Set-Cookie”, “sessionId=”+sessionIdentifier); } }; RestAdapter.Builder().setServer(serverURL)..setRequestIntercepter(requestIntercepter).build(); // but I don’t have sessionId when this is first issued ???

Android上的Jersey客户端 – NullPointerException

我正在尝试为我构建的Web服务创建一个简单的Android客户端,但在运行时出现问题。 这是客户: public class MyClient extends AsyncTask { private EditText text; protected String doInBackground(EditText… strings) { RuntimeDelegate .setInstance(new com.sun.ws.rs.ext.RuntimeDelegateImpl()); WebResource wbr; Client client = Client.create(); wbr = client .resource(“http://my.ip:8080/MazeService/rest/service/hello”); String result = wbr.queryParam(“number”, “10”) .accept(MediaType.APPLICATION_JSON).get(String.class); text = strings[0]; return result; } protected void onProgressUpdate(Integer… progress) { // setProgressPercent(progress[0]); } protected void onPostExecute(String result) { if […]

如何从JSONObject中删除nameValuePairs键?

我正在开发一个Android项目,它需要一个JSONObject作为我的POST请求的主体。 在放入JSON的键和值后,我得到以下行: { “xxxx”:”zzzzzzz”, “yyyy”:”uuuuuuu” } 但服务器得到以下内容: { “name_value_pairs”: { “xxxx”:”zzzzzzz”, “yyyy”:”uuuuuuu” } } 我已经尝试过JSONStringer,但它并没有真正帮助,因为请求的Content-Type是application/json 。 UPDATE 我不是要构建一个JSONObject,因为它已经通过使用以下代码行完成了(@osayilgan给出了相同的代码): JSONObject jsonRequest = new JSONObject(); jsonRequest.put(“xxxx”, “zzzzzzz”); jsonRequest.put(“yyyy”, “uuuuuuu”); 这不是问题。 下面描述的接口用于与服务器通信。 public interface MyService { @Headers({“Content-type: application/json”, “Accept: */*”}) @POST(“/test”) void testFunction(@Body JSONObject jsonObject, Callback callback); } 服务器获得了第二个JSON作为Body的请求,这令人失望。 我注意到键name_value_pairs会自动添加到对象中。 有谁知道如何解决这个问题?