Robospice:android simple usage of asynchronous network library

Source: Internet
Author: User
<span id="Label3"></p> <blockquote> <blockquote> <p>Robospice is a network library that allows you to build asynchronous long-running tasks that are exceptionally easy, particularly powerful in terms of network requests, cache support, and the provision of Out-of-the-box rest Requests.</p> </blockquote> </blockquote><p><p><strong>Features are as follows</strong></p></p> <ul> <ul> <li>Supports versions of SDK version 8 and above</li> <li>Perform network requests asynchronously (background Service)</li> <li>Supports Out-of-the-box rest (using Spring Android or Google Http Client or Retrofit).)</li> <li>Your query uses POJOs as a parameter and you get POJOs request results</li> <li>Results can be cached in the format of Jackson or Jackson2 or gson, or Xml, etc.</li> <li>Request results based on their lifecycle notification activity or any context network</li> <li>Notifies the activity or any context in the UI thread</li> <li>Like Android loaders, Unlike asynctasks, there is no memory leak</li> <li>A simple and high-tolerance exception handling model</li> <li>Stable and efficient</li> <li>Support Request cancellation, request set priority, request Merge</li> <li>Supports aggregation of different Web services</li> <li>A lot of testing</li> </ul> </ul><p><p><strong>GitHub Address Https://github.com/stephanenicolas/robospice</strong></p></p><p><p>Let's use this library and use it in a few steps</p></p> <ul> <ul> <li>Using a pre-set spiceservice or customizing a spiceservice, this spiceservice will be available to all Requests.</li> <li>You have to repeat this step for every activity that you use in your Activity. Unless you use a base class activity in your project, the other activity inherits the base class</li> <li>Create a spicerequest and requestlistener, both of which have to be repeated to write code for each Request.</li> <li>finally, you need to define the Pojo class to save the requested result</li> </ul> </ul><p><p>Before we write the code, we create a new project in Android studio, and if you are using eclipse, you need to import the dependency package one at A.<br></p></p><p><p>In Android studio, Open the Buidl.gradle under app and add the following dependencies</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "> compile(<span class="hljs-string">‘com.octo.android.robospice:robospice-google-http-client:1.4.14‘</span>) { <span class="hljs-string">‘org.apache.httpcomponents‘</span><span class="hljs-string">‘httpclient‘</span>) } compile(<span class="hljs-string">‘com.google.http-client:google-http-client-jackson2:1.19.0‘</span>) { <span class="hljs-string">‘xpp3‘</span><span class="hljs-string">‘xpp3‘</span>) <span class="hljs-string">‘org.apache.httpcomponents‘</span><span class="hljs-string">‘httpclient‘</span>) <span class="hljs-string">‘junit‘</span><span class="hljs-string">‘junit‘</span>) <span class="hljs-string">‘com.google.android‘</span><span class="hljs-string">‘android‘</span>) }</code></pre></pre><p><p>Then add the following configuration to the android{}, or the conflict package will appear</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "> packagingOptions { <span class="hljs-string">‘META-INF/LICENSE.txt‘</span> <span class="hljs-string">‘META-INF/NOTICE.txt‘</span> }</code></pre></pre><p><p>Build will download the dependency package.</p></p>Writing Spiceservice<p><p>After everything is ready to start writing code, Here we use the custom spiceservice to simply rewrite the Getthreadcount method.</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword">package</span> cn.edu.zafu.robospicedemo.service;<span class="hljs-javadoc">/** * Created by lizhangqu on 2015/4/15. */</span><span class="hljs-keyword">import</span> com.octo.android.robospice.Jackson2GoogleHttpClientSpiceService;<span class="hljs-keyword">public</span><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">HttpClientSpiceService</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Jackson2GoogleHttpClientSpiceService</span> {</span> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span><span class="hljs-keyword">int</span><span class="hljs-title">getThreadCount</span>() { <span class="hljs-keyword">return</span><span class="hljs-number">4</span>; }}</code></pre></pre><p><p>Declare this service in manifest</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "> <service android:name=<span class="hljs-string">".service.HttpClientSpiceService"</span> android:exported=<span class="hljs-string">"false"</span> /></code></pre></pre>Writing Spicerequest<p><p>Since all the requests are to write a spicerequest, all of us write a base class first, and the rest of the spicerequest inherit it</p></p><pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword"><span class="hljs-keyword"></span> package</span>cn.edu.zafu.robospicedemo.webservice;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.GenericUrl;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.HttpContent;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.HttpRequest;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.octo.android.robospice.request.googlehttpclient.GoogleHttpClientSpiceRequest;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.io.IOException;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>java.util.HashMap;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">Abstract</span></span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">basegooglehttpclientspicerequest</span><<span class="hljs-title">RESULT</span>> <span class="hljs-keyword">extends</span> <span class="hljs-title"> Googlehttpclientspicerequest</span><<span class="hljs-title">RESULT</span>> {</span></span>String URL =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>; hashmap<string, String > postparameters;<span class="hljs-keyword"><span class="hljs-keyword">protected</span></span> <span class="hljs-title"><span class="hljs-title">basegooglehttpclientspicerequest</span></span>(class<result> Clazz) {<span class="hljs-keyword"><span class="hljs-keyword">Super</span></span>(clazz); }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span>HttpRequest<span class="hljs-title"><span class="hljs-title">buildgetrequest</span></span>(genericurl Url)<span class="hljs-keyword"><span class="hljs-keyword">throws</span></span>IOException {system.setproperty (<span class="hljs-string"><span class="hljs-string">"http.keepalive"</span></span>,<span class="hljs-string"><span class="hljs-string">"false"</span></span>); HttpRequest request = Gethttprequestfactory (). buildgetrequest (url); Request.getheaders (). setacceptencoding (<span class="hljs-string"><span class="hljs-string">"gzip"</span></span>); Request.getheaders (). Set (<span class="hljs-string"><span class="hljs-string">"Connection"</span></span>,<span class="hljs-string"><span class="hljs-string">"close"</span></span>); Request.getheaders (). setaccept (<span class="hljs-string"><span class="hljs-string">"text/html,application/xhtml+xml,application/xml,application/json"</span></span>);<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Request }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span>HttpRequest<span class="hljs-title"><span class="hljs-title">buildpostrequest</span></span>(genericurl url, httpcontent Content)<span class="hljs-keyword"><span class="hljs-keyword">throws</span></span>IOException {system.setproperty (<span class="hljs-string"><span class="hljs-string">"http.keepalive"</span></span>,<span class="hljs-string"><span class="hljs-string">"false"</span></span>); HttpRequest request = gethttprequestfactory (). buildpostrequest (url, content); Request.getheaders (). setacceptencoding (<span class="hljs-string"><span class="hljs-string">"gzip"</span></span>); Request.getheaders (). Set (<span class="hljs-string"><span class="hljs-string">"Connection"</span></span>,<span class="hljs-string"><span class="hljs-string">"close"</span></span>); Request.getheaders (). setaccept (<span class="hljs-string"><span class="hljs-string">"text/html,application/xhtml+xml,application/xml,application/json"</span></span>);<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Request }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">SetUrl</span></span>(String Url) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. url = url; }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setpostparameters</span></span>(hashmap<string, string> Postparameters) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. postparameters = postparameters; }}</code></pre><p><p>We request a JSON data on the server in the following format</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs ">{<span class="hljs-string">"id"</span>:<span class="hljs-number">1</span>,<span class="hljs-string">"name"</span>:<span class="hljs-string">"zhangsan"</span>,<span class="hljs-string">"age"</span>:<span class="hljs-number">20</span>,<span class="hljs-string">"address"</span>:<span class="hljs-string">"china"</span>}</code></pre></pre><p><p>We write a personrequest</p></p><pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword"><span class="hljs-keyword"></span> package</span>cn.edu.zafu.robospicedemo.webservice;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.GenericUrl;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.HttpContent;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.HttpRequest;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.http.UrlEncodedContent;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.json.jackson2.JacksonFactory;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>cn.edu.zafu.robospicedemo.webservice.json.PersonJson;<span class="hljs-javadoc"><span class="hljs-javadoc">/** * Created by Lizhangqu on 2015/4/15.</span> * *</span><span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">personrequest</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">basegooglehttpclientspicerequest</span>< <span class="hljs-title"> Personjson</span>> {</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-title"><span class="hljs-title">personrequest</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">Super</span></span>(personjson.class); }<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span>Personjson<span class="hljs-title"><span class="hljs-title">loaddatafromnetwork</span></span>()<span class="hljs-keyword"><span class="hljs-keyword">throws</span></span>Exception {httprequest request =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>; Genericurl Genericurl =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Genericurl (url);<span class="hljs-keyword"><span class="hljs-keyword">if</span></span>(postparameters = =<span class="hljs-keyword"><span class="hljs-keyword">NULL</span></span>{request = gethttprequestfactory (). buildgetrequest (genericurl); }<span class="hljs-keyword"><span class="hljs-keyword">Else</span></span>{httpcontent content =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Urlencodedcontent (postparameters); Request = Buildpostrequest (genericurl, content); } request.setparser (<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Jacksonfactory (). Createjsonobjectparser ());<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Request.execute (). parseas (getresulttype ()); }}</code></pre>Writing Pojo<p><p>Written according to JSON format</p></p><pre class="prettyprint"><code class="language-java hljs "><span class="hljs-keyword"><span class="hljs-keyword"></span> package</span>cn.edu.zafu.robospicedemo.webservice.json;<span class="hljs-keyword"><span class="hljs-keyword">Import</span></span>com.google.api.client.util.Key;<span class="hljs-javadoc"><span class="hljs-javadoc">/** * Created by Lizhangqu on 2015/4/15.</span> * *</span><span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-class"><span class="hljs-class"> <span class="hljs-keyword">class</span> <span class="hljs-title">Personjson</span> {</span></span> <span class="hljs-annotation"><span class="hljs-annotation">@Key</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span>Id<span class="hljs-annotation"><span class="hljs-annotation">@Key</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>String name;<span class="hljs-annotation"><span class="hljs-annotation">@Key</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span>Age<span class="hljs-annotation"><span class="hljs-annotation">@Key</span></span> <span class="hljs-keyword"><span class="hljs-keyword">Private</span></span>String address;<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span> <span class="hljs-title"><span class="hljs-title">getId</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Id }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setId</span></span>(<span class="hljs-keyword"><span class="hljs-keyword">int</span></span>Id) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. id = id; }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span>String<span class="hljs-title"><span class="hljs-title">GetName</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Name }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">SetName</span></span>(String Name) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. Name = name; }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">int</span></span> <span class="hljs-title"><span class="hljs-title">Getage</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Age }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Setage</span></span>(<span class="hljs-keyword"><span class="hljs-keyword">int</span></span>Age) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. Age = age; }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span>String<span class="hljs-title"><span class="hljs-title">getaddress</span></span>() {<span class="hljs-keyword"><span class="hljs-keyword">return</span></span>Address }<span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">setaddress</span></span>(String Address) {<span class="hljs-keyword"><span class="hljs-keyword"></span> this</span>. Address = address; }}</code></pre>Writing listeners<p><p>Write a function in mainactivity</p></p><pre class="prettyprint"><code class="language-java hljs "> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">Requesttestdata</span></span>() {personrequest request =<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Personrequest (); Request.seturl (<span class="hljs-string"><span class="hljs-string">"http://121.199.33.93/7plus/index/hello"</span></span>); Spicemanager.execute (request,<span class="hljs-keyword"><span class="hljs-keyword">New</span></span>Requestlistener<personjson> () {<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">onrequestfailure</span></span>(spiceexception Spiceexception) { }<span class="hljs-annotation"><span class="hljs-annotation">@Override</span></span> <span class="hljs-keyword"><span class="hljs-keyword"></span> public</span> <span class="hljs-keyword"><span class="hljs-keyword">void</span></span> <span class="hljs-title"><span class="hljs-title">onrequestsuccess</span></span>(personjson Personjson) {toast.maketext (getapplicationcontext (), Personjson.getid () +<span class="hljs-string"><span class="hljs-string">" "</span></span>+personjson.getname () +<span class="hljs-string"><span class="hljs-string">" "</span></span>+personjson.getage () +<span class="hljs-string"><span class="hljs-string">" "</span></span>+personjson.getaddress (), toast.length_long). Show (); } }); }</code></pre>Using Robospice<p><p>Declaring a variable in mainactivity</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "> <span class="hljs-keyword">private</span><span class="hljs-keyword">new</span> SpiceManager(HttpClientSpiceService.class);</code></pre></pre><p><p>Rewrite the life cycle</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-java hljs "> <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span><span class="hljs-keyword">void</span><span class="hljs-title">onStart</span>() { spiceManager.start(<span class="hljs-keyword">this</span>); <span class="hljs-keyword">super</span>.onStart(); } <span class="hljs-annotation">@Override</span> <span class="hljs-keyword">public</span><span class="hljs-keyword">void</span><span class="hljs-title">onStop</span>() { <span class="hljs-keyword">if</span> (spiceManager.isStarted()) { spiceManager.shouldStop(); } <span class="hljs-keyword">super</span>.onStop(); }</code></pre></pre>Finishing work<p><p>Don't forget to increase permissions, add the following permissions in manifest</p></p><pre class="prettyprint"><pre class="prettyprint"><code class="language-xml hljs "><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.INTERNET"</span>/></span><span class="hljs-tag"><<span class="hljs-title">uses-permission</span> <span class="hljs-attribute">android:name</span>=<span class="hljs-value">"android.permission.ACCESS_NETWORK_STATE"</span> /></span></code></pre></pre>Run<p><p>Run at this time, if not unexpectedly there will be a toast displaying the contents of the JSON data</p></p>SOURCE download<p><p>Based on Android studio, download link<br>http://download.csdn.net/detail/sbsujjbcy/8599469</p></p> <p><p>Robospice:android simple usage of asynchronous network library</p></p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.