Articles of rest

具有基本安全性的REST Web服务的Android客户端

我使用基本身份validation编写了一个简单的RESTful Web服务。我使用此页面中的提示secureRestWS 。 他们还创建了一个video,并在youtube上发布了更多细节。 在浏览器中打开它时,它可以正常工作。 您需要在授权窗口中写入用户名和密码。 我还find了一个带有android客户端的页面,该页面使用httpclient调用其余的web服务,如果web服务没有认证,则可以正常工作。 我正在使用这个示例androidRestWSClient 。 但我不知道如何在这种情况下添加用户名和密码,我尝试过: client.AddParam(“User Name”, “myusername”); client.AddParam(“Password”, “mypassword”); 或在标题中: client.AddHeader(“User Name”, “myusername”); client.AddHeader(“Password”, “mypassword”); 但没有任何作用。 我还尝试创建告诉Web服务用户名和密码的URL,如: http://192.168.1.42/RestWS/resources/helloWorld?username=myusername&password=mypassword 我真的没有这方面的解决方案,所以如果有人有一个示例客户我会很感激。 在webservice中,我有简单的GET方法 @GET @Path(“/text”) public String getText() { return “Hello World!”; } 我是否需要使用SecurityContext作为用户名和密码? 如下例所示,创建身份validation更好吗: http://aruld.info/accessing-restful-services-configured-with-ssl-using-resttemplate/ 谢谢你的帮助

使用AndroidAnnotations处理超时(Spring Rest)

基本上,我今天面临的是以下几点: 处理rest操作时处理请求超时。 看起来很简单,但编码并不容易。 这是我到目前为止的实现: List interceptors = new ArrayList(); interceptors.add( new NetworkInterceptor() ); tpl.setInterceptors( interceptors ); 所以现在,在设置拦截器之后,我想为模板设置自定义超时配置。 所以我执行以下操作: tpl.getRequestFactory() 。 这将返回一个InterceptingClientHttpRequestFactory而不是SimpleClientHttpRequestFactory ,如果没有设置拦截器,将返回。 因此,当它返回InterceptingClientHttpRequestFactory实例时,我无法设置Timeout。 您可以查看Spring的源代码,最后一种方法: http : //grepcode.com/file_/repo1.maven.org/maven2/org.springframework/spring-web/3.1.1.RELEASE/org/springframework/http/客户机/支撑/ InterceptingHttpAccessor.java /?v =源 所以…任何提示?

ResultReceiver无法生存到屏幕旋转

我正在Android中实现REST客户端。 我已经看到了使用Service来执行与服务器的连接以及ResultReceiver的示例,以通知操作完成。 我从片段调用服务,如果我在服务运行时尝试旋转屏幕, ResultReceiver的getActivity()方法返回null,因为该片段可能不再处于布局中。 片段中的回调方法: @Override public void onReceiveResult(int resultCode, Bundle resultData) { Response response = (Response) resultData .getSerializable(RestService.RESULT); if (resultCode == RestService.SUCCESS && response != null) { if (getActivity() != null) { recommendationResponse = response; getLoaderManager().restartLoader(0, new Bundle(), Fragment.this); } } } getActivity()返回null。 这是正常的吗? 我可以使用什么方法在屏幕旋转时允许通知? 本地广播?

GCM如何运作? (适用于Android的谷歌云消息)

我有一个Android应用程序,我使用REST API(djangorest框架)连接到我的服务器 这是一个场景(也许是我的计划): 数据作为json来回发送 我有一个用户模型和一个任务模型,用户是某个任务的所有者。 用户通常将任务发送给另一个用户(json类似于此:{“owner”:“exampleuser”,“from”:“otheruser”,“content”:“example”…}使用POST方法) – 任务有一个布尔字段“completed”,一旦任务完成就被删除(使用PUT或PATCH方法:completed = true) 一旦使用POST方法创建了一个新任务,用户可以看到任何与他们的任务有关的活动的唯一方法是通过一个Android活动,该活动使用GET方法获取用户拥有的所有任务的列表,通过查找拥有的所有对象用户 所以我的问题是: 而不是让用户每次都检查应用程序。 如何使用GCM推送通知用户? 它将如何告知哪个用户或设备发送推送通知? GCM如何知道任务发生变更或用户何时发布任务?

SyncAdapter和Rest Server具有分页响应

我需要知道如何处理来自Rest Server的syncadapter和分页响应。 我正在制作一个检索数据收集的Android应用程序。 每个页面都有20个项目,我现在正在一个请求中检索所有项目。 我认为我能做到的最好的方法是检索一个页面,例如,滚动到列表视图的末尾,使用syncAdapter发出另一个请求,但我不确定。 我正在搜索如何在REST中处理android的分页,但我找不到任何有用的东西。 我想知道是否有人可以帮助我。 谢谢。 这是我现在如何检索项目的示例。 public ArrayList parse(String json) throws IOException, NullPointerException { final ArrayList batch = new ArrayList(); AccountManager manager = AccountManager.get(mContext); Account account = ((KipptApplication)mContext.getApplicationContext()).getCurrentAccount(); String authToken = manager.peekAuthToken(account, AuthenticatorActivity.PARAM_AUTHTOKEN_TYPE); Header[] headers = new Header[]{ new BasicHeader(KipptConstants.API_USERNAME_KEY,account.name), new BasicHeader(KipptConstants.API_TOKEN_KEY,authToken) }; Gson gson = new Gson(); Type responseType = new […]

使用Loaders进行网络请求是不好的做法吗?

我一直在阅读很多关于android的网络操作以及如何正确地进行操作。 文档建议使用Volley,它抽象了制作网络请求的过程: http://developer.android.com/training/volley/simple.html 当我在我的应用程序中使用Retrofit时,我认为最佳做法是使用Loaders,因为它们在方向更改方面表现良好,但我发现: http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html “使用Loader执行网络请求并不是一种很好的做法,因为(1)这意味着您的应用程序将很难使用电池(每次启动Activity时都必须重复从网络轮询新数据,(2)如果不重复进行内容更改,就无法观察网络内容的变化,以及(3)您的应用程序无法脱机工作。“ (1)并不是特别真实,因为你可以在创建活动时恢复加载器。 我不认为我完全理解第(2)点和第(3)点对我来说不是一个问题,因为我的应用无法在线下正常工作。 然而,这再一次引起了我的注意。 “所以我的答案是忘记完全使用Loader / AsyncTask组合并坚持使用服务。服务可以每隔一段时间轮询网络数据并将新数据插入ContentProvider。然后你可以使用CursorLoader来从ContentProvider加载数据,而无需知道数据来自何处。“ 有没有人使用这种方法使用服务来轮询网络并填充ContentProvider? 我不认为它可以与我的应用程序一起正常工作,因为它使用经常请求的RESTful API。 我认为它不会特别有效,但我可能会在这里遗漏一些东西。 抱歉,这个问题很长。 这不是一个确切的问题,但我希望围绕这个主题进行讨论。

同步Android客户端和REST服务器

REST服务器 我创建了一个Rails服务器,其中包含:users和关联的:comments 。 它用作Android客户端的后端API。 在服务器上加载和存储数据的交换格式是JSON。 以下是相关的迁移。 class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :name t.timestamps end end end … class CreateComments < ActiveRecord::Migration def change create_table :comments do |t| t.references :users t.string :subject t.text :message t.timestamps end end end 所有用户都已导入。 因此,仅为:users资源配置了读访问权限。 因此,对于:comments ,应该可以添加新条目。 这是可用的路线。 user_comments GET /users/:user_id/comments(.:format) comments#index POST /users/:user_id/comments(.:format) comments#create […]

如何为从移动和javascript Web应用程序访问的rest API实现OAuth 2.0,如基于令牌的身份validation

我需要为我的REST API实现身份validation和授权机制。 这是从移动应用程序和Web应用程序访问的rest api。 机制我想实现: 所以根据我的理解,我使用的是基于密码的身份validation。 移动应用程序或javascript Web应用程序通过HTTPS post请求发送用户名和密码,以获取有限时间的访问令牌。 问题 因为访问令牌每1小时左右到期。 再次请求最终用户输入用户名和密码。 这是不可接受的。 如果我们将令牌的时间延长了一段时间,那么如果有人处理令牌,他们就可以访问Rest API更长的时间。 由于Web应用程序是javascript应用程序,因此可以在计划文本中轻松使用。 所以我试图了解像facebook和twitter这样的应用程序如何为其原生移动应用程序实现授权。 他们是否通过存储在本地存储中记住访问令牌。 这样如果一些恶意应用程序拥有root权限,那么android手机就可以访问令牌。 对于在javascript和android应用程序中开发的独立Web应用程序,它对上述机制有什么改进?

您何时需要Firebase云消息传递的应用服务器?

我不熟悉在https://firebase.google.com/docs/cloud-messaging/server上使用Android应用程序的FCM通知。 我正在阅读它并发现在关于FCM Server页面要求中,它说明如下: 您必须在您的环境中实施的应用服务器。 此应用服务器使用适当的XMPP或HTTP协议通过所选的FCM连接服务器将数据发送到客户端应用程序 但是,我对此感到非常困惑。 当我在文章中阅读更多内容时,我发现有一个API如下所示: POST http://fcm.googleapis.com/fcm/send 如果我使用类似OkHttpClient东西调用此API并像这样构建我的请求,(假设我有身份validation标头和POST主体) private void sendRegistrationToServer(String token) { OkHttpClient client = new OkHttpClient(); RequestBody body = new FormBody.Builder().add(“Body”, “”).build(); //Assuming I have authentication and body put in Request request = new Request.Builder().url(“http://fcm.googleapis.com/fcm/send”).post(body).build(); try { client.newCall(request).execute(); } catch (IOException e) { e.printStackTrace(); } } 理论上,我是否能够通过我想要的任何信息向该设备发送通知? 我可以通过以下课程收到消息: public class NotificationService […]

使用GSON库从URL(RESTful webservice)解析JSON字符串。 Android的

在阅读之前:我在这个程序中使用了可下载的GSON库。 http://webscripts.softpedia.com/script/Development-Scripts-js/Other-Libraries/Gson-71373.html 我一直在尝试解析JSON很长一段时间,但每次我尝试从URL获取字符串时,程序都不“工作”。 它不会失败或关闭或出错。 它只是不解析。 我的程序是从http://api.geonames.org/weatherIcaoJSON?ICAO=LSZH&username=demo解析并有一个更新按钮再次运行解析过程,以便刷新信息。 如果我使用硬编码的JSON字符串,该程序可以正常工作。 我甚至放入了应该从URL中检索的字符串; 但我似乎无法直接得到它。 我正在使用GSON库。 在代码中,我提供了注释来解释我的思考过程。 请注意,我有2种不同的方法试图使用URL(我认为可能原来的一个是错的所以我试图使用另一个),这是我抓住稻草。 请帮帮我。 谢谢。 我的代码: package com.android.testgson; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.URI; import java.net.URL; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; import com.google.gson.Gson; public class GSONTestActivity extends Activity { […]