Robospice:android simple usage of asynchronous network library
Last Update:2015-04-16
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>