usar studio servicio restful consumir consume como java android web-services rest authorization

java - servicio - consumir web service rest android studio



¿Cómo llamar a un servicio web RESTful desde Android? (10)

Escribí un servicio web REST en Netbean IDE utilizando Jersey Framework y Java.

Para cada solicitud, el usuario debe proporcionar un nombre de usuario y una contraseña, sé que esta autenticación no es una buena práctica (usando un comando curl como: curl -u username:password -X PUT http://localhsot:8080/user ) .

Ahora quiero llamar a un servicio web REST de una clase de Android.

¿Cómo debería hacerlo?

Tengo una clase de Android que usa DefaultHttpClient y CredentialUsernameAndPassword , pero cuando lo ejecuto en Eclipse, a veces recibo una excepción de tiempo de ejecución o una excepción de SDK.


¿Qué back-end? Si es JAVA, entonces puede usar REST con Java (JAX-RS) usando Jersey.

En el lado de Android puedes usar este simple RestClient para trabajar con ese servicio REST.

Para el mapeo de objetos JSON <-> en ambos lados (Android, back-end de Java) puede usar GSON.


Aquí está mi biblioteca que he creado para llamadas a servicios web simples,

Puede usar esto agregando una dependencia de gradle de una línea -

compile ''com.scantity.ScHttpLibrary:ScHttpLibrary:1.0.0''

Aquí está la demostración del uso.

https://github.com/vishalchhodwani1992/httpLibrary


Detener con lo que sea que estuvieras haciendo! :)

Implemente el cliente RESTful como SERVICIO y delegue el material de red intensivo al componente independiente de la actividad: un SERVICIO.

Mire este video perspicaz http://www.youtube.com/watch?v=xHXn3Kg2IQE donde Virgil Dobjanschi explica su enfoque (es) ante este desafío ...


Esta es una clase de ejemplo restclient

public class RestClient { public enum RequestMethod { GET, POST } public int responseCode=0; public String message; public String response; public void Execute(RequestMethod method,String url,ArrayList<NameValuePair> headers,ArrayList<NameValuePair> params) throws Exception { switch (method) { case GET: { // add parameters String combinedParams = ""; if (params!=null) { combinedParams += "?"; for (NameValuePair p : params) { String paramString = p.getName() + "=" + URLEncoder.encode(p.getValue(),"UTF-8"); if (combinedParams.length() > 1) combinedParams += "&" + paramString; else combinedParams += paramString; } } HttpGet request = new HttpGet(url + combinedParams); // add headers if (headers!=null) { headers=addCommonHeaderField(headers); for (NameValuePair h : headers) request.addHeader(h.getName(), h.getValue()); } executeRequest(request, url); break; } case POST: { HttpPost request = new HttpPost(url); // add headers if (headers!=null) { headers=addCommonHeaderField(headers); for (NameValuePair h : headers) request.addHeader(h.getName(), h.getValue()); } if (params!=null) request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); executeRequest(request, url); break; } } } private ArrayList<NameValuePair> addCommonHeaderField(ArrayList<NameValuePair> _header) { _header.add(new BasicNameValuePair("Content-Type","application/x-www-form-urlencoded")); return _header; } private void executeRequest(HttpUriRequest request, String url) { HttpClient client = new DefaultHttpClient(); HttpResponse httpResponse; try { httpResponse = client.execute(request); responseCode = httpResponse.getStatusLine().getStatusCode(); message = httpResponse.getStatusLine().getReasonPhrase(); HttpEntity entity = httpResponse.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); response = convertStreamToString(instream); instream.close(); } } catch (Exception e) { } } private static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "/n"); } is.close(); } catch (IOException e) { } return sb.toString(); } }


Recientemente descubrí que una biblioteca de terceros - Square Retrofit puede hacer el trabajo muy bien.

Definición del punto final REST

public interface GitHubService { @GET("/users/{user}/repos") List<Repo> listRepos(@Path("user") String user,Callback<List<User>> cb); }

Obteniendo el servicio concreto

RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com") .build(); GitHubService service = restAdapter.create(GitHubService.class);

Llamar al punto final REST

List<Repo> repos = service.listRepos("octocat",new Callback<List<User>>() { @Override public void failure(final RetrofitError error) { android.util.Log.i("example", "Error, body: " + error.getBody().toString()); } @Override public void success(List<User> users, Response response) { // Do something with the List of Users object returned // you may populate your adapter here } });

La biblioteca maneja la serialización y desexpalación JSON por usted. Puede personalizar la serialización y la deserialización también.

Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .registerTypeAdapter(Date.class, new DateTypeAdapter()) .create(); RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint("https://api.github.com") .setConverter(new GsonConverter(gson)) .build();


Siga los pasos a continuación para consumir RestFul en Android.

Paso 1

Crea un proyecto en blanco de Android.

Paso 2

Necesita permiso de acceso a internet. escriba el siguiente código en el archivo AndroidManifest.xml.

<uses-permission android:name="android.permission.INTERNET"> </uses-permission>

Paso 3

Necesita la url de RestFul que se ejecuta en otro servidor o en la misma máquina.

Etapa 4

Haga un cliente RestFul que extenderá AsyncTask. Ver RestFulPost.java.

Step5

Haga la clase DTO para RestFull Request and Response.

RestFulPost.java

package javaant.com.consuming_restful.restclient; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.util.Log; import com.google.gson.Gson; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import java.util.Map; import javaant.com.consuming_restful.util.Util; /** * Created by Nirmal Dhara on 29-10-2015. */ public class RestFulPost extends AsyncTask<map, void,="" string=""> { RestFulResult restFulResult = null; ProgressDialog Asycdialog; String msg; String task; public RestFulPost(RestFulResult restFulResult, Context context, String msg,String task) { this.restFulResult = restFulResult; this.task=task; this.msg = msg; Asycdialog = new ProgressDialog(context); } @Override protected String doInBackground(Map... params) { String responseStr = null; Object dataMap = null; HttpPost httpost = new HttpPost(params[0].get("url").toString()); try { dataMap = (Object) params[0].get("data"); Gson gson = new Gson(); Log.d("data map", "data map------" + gson.toJson(dataMap)); httpost.setEntity(new StringEntity(gson.toJson(dataMap))); httpost.setHeader("Accept", "application/json"); httpost.setHeader("Content-type", "application/json"); DefaultHttpClient httpclient= Util.getClient(); HttpResponse response = httpclient.execute(httpost); int statusCode = response.getStatusLine().getStatusCode(); Log.d("resonse code", "----------------" + statusCode); if (statusCode == 200) responseStr = EntityUtils.toString(response.getEntity()); if (statusCode == 404) { responseStr = "{/n" + "/"status/":/"fail/",/n" + " /"data/":{/n" + "/"ValidUser/":/"Service not available/",/n" + "/"code/":/"404/"/n" + "}/n" + "}"; } } catch (Exception e) { e.printStackTrace(); } return responseStr; } @Override protected void onPreExecute() { Asycdialog.setMessage(msg); //show dialog Asycdialog.show(); super.onPreExecute(); } @Override protected void onPostExecute(String s) { Asycdialog.dismiss(); restFulResult.onResfulResponse(s,task); } }

Para obtener más información y un código completo, visite http://javaant.com/consume-a-restful-webservice-in-android/#.VwzbipN96Hs


Tal vez llego tarde o quizás ya lo haya usado antes, pero hay otro llamado ksoap y es bastante sorprendente. También incluye tiempos de espera y puede analizar cualquier servicio web basado en SOAP de manera eficiente. También hice algunos cambios para adaptarme a mi análisis ... Búscalo


Uso de Spring para Android con RestTemplate https://spring.io/guides/gs/consuming-rest-android/

// The connection URL String url = "https://ajax.googleapis.com/ajax/" + "services/search/web?v=1.0&q={query}"; // Create a new RestTemplate instance RestTemplate restTemplate = new RestTemplate(); // Add the String message converter restTemplate.getMessageConverters().add(new StringHttpMessageConverter()); // Make the HTTP GET request, marshaling the response to a String String result = restTemplate.getForObject(url, String.class, "Android");



OkHttpClient para llamar a un servicio web tranquilo. Es muy sencillo.

OkHttpClient httpClient = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); Response response = httpClient.newCall(request).execute(); String body = response.body().string()