Opkald RESTful tjenester fra din Android-app

RESTful tjenester er velegnet til at levere indhold til små fodaftryksenheder som smartphones og tablets. Faktisk, hvis du har interageret med nogen skybaserede API'er i de sidste par år, er der en stor chance for, at API blev eksponeret via en REST-interface. Der er et antal dokumenter tilgængelige på nettet, der forklarer, hvad der udgør en REST-service, og hvordan man implementerer en. Der er også et antal opskrivninger, der forklarer, hvordan man forbruger REST-tjenester fra en klient. Alligevel er en almindelig anmodning, jeg ser i Android-fora, eksempler på Java-baserede Android-specifikke REST-forbrugere.

For nylig frigav min søn og jeg en opdatering til vores spil, som omfattede en online leaderboard. Serverkoden er temmelig enkel - den holder styr på de fem bedste score på hvert af de 40 niveauer. På grund af dets lette vægt og relative brugervenlighed, udsatte jeg leaderboardet for min app (og alle andre, der er interesseret) via et RESTful HTTP GET-opkald. For at se de fem bedste spillere på niveau # 1 skal du bare pope denne URL i enhver browser: http://www.cheesejedi.com/rest_services/get_big_cheese?level=1.

Figur A

Opkald til et REST-endepunkt fra en Android-applikation kræver at skubbe en HTTP-anmodning til baggrundstråden og derefter analysere resultaterne på UI-tråden. Det er ikke meget vanskeligt, når du ser det lagt foran dig, men at komme i gang kan undertiden være lidt af en hindring.

Denne tutorial indeholder en pareret version af koden, der faktisk blev brugt i min produktionsapplikation. Forhåbentlig vil det vise sig nyttigt for dig at komme i gang med dine egne Android REST-forbrugere. Du kan følge med i trinvis vejledning eller downloade hele projektet for at importere til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Mål SDK 1.6 eller nyere, og sørg for at omdøbe startaktiviteten til Main.java.

2. Opret en main.xml-ressource, der definerer en knap og et redigeringsfelt i din mappe / res / layout.

 main.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "lodret" >

android: layout_width = "fill_parent"

android: layout_height = "wrap_content"

android: text = "Http GET Demo" />

android: layout_width = "wrap_content"

android: layout_height = "wrap_content"

android: layout_gravity = "center"

android: text = "GET" android: id = "@ + id / my_button" /> "20dip" android: layout_width = "fill_parent" android: layout_height = "wrap_content" android: minLines = "15" android: maxLines = "15" android: textSize = "12sp" android: redigerbar = "falsk" android: id = " @ + id / my_edit " />
3. Da vores ansøgning foretager HTTP-opkald, bliver vi nødt til at erklære brugen af ​​internettilladelse i manifestet.
 AndroidManifest.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

package = "com.authorwjf.http_get"

android: versionCode = "1"

android: versionName = "1.0" >

"4" />

"android.permission.INTERNET" />

android: icon = "@ drawable / ic_launcher"

android: label = "@ string / app_name" >

android: name = ".Main"

android: label = "@ string / app_name" >

"android.intent.action.MAIN" />

"android.intent.category.LAUNCHER" />

4. Main.java-filen i vores / src-bibliotek indeholder standarden for oprette tilsidesættelse og implementerer en on-click lytter til knappen.
 Main.java- pakke com.authorwjf.http_get; import java.io.IOException; import java.io.InputStream; import org.apache.http.HttpEntity; 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 org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import android.app.Aktivitet; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class Main udvider Aktivitetsimplementeringer OnClickListener { 

@Override

public void onCreate (Bundle gemtInstanceState) { super .onCreate (gemtInstanceState);

setContentView (R.layout. main );

findViewById (R.id. my_button ) .setOnClickListener ( dette );

}

@Override

offentligt ugyldigt onClick (Vis arg0) {

Knap b = (knap) findViewById (R.id. My_button );

b.setClickable ( falsk ); nye LongRunningGetIO (). udføre ();

}

}

5. Vores Main.java-fil refererer til noget, der hedder LongRunningGetIO; dette er også noget, vi er nødt til at implementere, og af hensyn til vores eksempel vil vi gøre det som en indre klasse i vores hoved. Den indre klasse udvider AsyncTask. Hvis du ikke er bekendt med, hvordan det fungerer, kan du komme op i fart ved at læse mit indlæg om Long Running I / O.

 Main.java privat klasse LongRunningGetIO udvider AsyncTask { beskyttet String getASCIIContentFromEntity (HttpEntity-enhed) kaster IllegalStateException, IOException { 

InputStream in = unit.getContent ();

StringBuffer out = ny StringBuffer (); int n = 1; mens (n> 0) { byte b = ny byte 4096;

n = in.read (b);

hvis (n> 0) out.append ( ny streng (b, 0, n));

}

vende tilbage.toString ();

}

@Override

beskyttet streng doInBackground (Void ... params) {HttpClient httpClient = new StandardHttpClient (); HttpContext localContext = ny BasicHttpContext (); HttpGet httpGet = new HttpGet ("http://www.cheesejedi.com/rest_services/get_big_cheese.php?puzzle=1"); Strengetekst = null ; prøv {

HttpResponse-svar = httpClient.execute (httpGet, localContext);

HttpEntity-enhed = respons.getEntity ();

tekst = getASCIIContentFromEntity (enhed);

} fangst (undtagelse e) { return e.getLocalizedMessage ();

}

returnere tekst;

}

beskyttet tomrum onPostExecute (strengresultater) { if (resultater! = null ) {

EditText et = (EditText) findViewById (R.id. My_edit );

et.setText (resultater);

}

Knap b = (knap) findViewById (R.id. My_button );

b.setClickable ( sand );

}

}

Demoen skal være klar til at prøve. Upload APK til en emulator, og tryk på knappen. Forudsat at du har en internetforbindelse, og serveren ikke er overbelastet med anmodninger, skal du få noget tilbage. Demoen udfører ingen parsing på resultatstrengen, men det skal være klart, hvor let det ville være at omfatte resultaterne i en JSON-matrix og vise dem på en meningsfuld måde.

Figur B

Tillykke - du har lige brugt en RESTful service fra din Android-enhed!

© Copyright 2021 | pepebotifarra.com