JSP/SERVLET
2020.10.03 / 18:17

java - 카카오페이 - 카카오톡 rest api 예제

추석돌이
추천 수 7

안드로이드에서 RESTful 웹 서비스를 호출하는 방법? (7)

Jersey Framework 및 Java를 사용하여 Netbean IDE에 REST 웹 서비스를 작성했습니다.

사용자가 사용자 이름과 암호를 제공해야하는 모든 요청에 ​​대해이 인증은 모범 사례가 아닙니다 ( curl -u username:password -X PUT http://localhsot:8080/user 와 같은 curl 명령 curl -u username:password -X PUT http://localhsot:8080/user ) .

이제 Android 클래스에서 REST 웹 서비스를 호출하려고합니다.

어떻게해야합니까?

DefaultHttpClient 및 CredentialUsernameAndPassword 를 사용하는 Android 클래스가 있지만 Eclipse에서 실행할 때 런타임 예외 또는 SDK 예외가 발생하는 경우가 있습니다.


RestTemplate이있는 Android 용 Spring 사용 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 를 사용 OkHttpClient . 매우 간단합니다.

OkHttpClient httpClient = new OkHttpClient();
Request request = new Request.Builder()
                .url(url)
                .build();

Response response = httpClient.newCall(request).execute();
String body = response.body().string()

네가하는 일에 그만해! :)

RESTful 클라이언트를 SERVICE로 구현하고 집중적 인 네트워크 작업을 작업 독립 구성 요소 인 SERVICE 에 위임합니다.

이 통찰력있는 비디오 http://www.youtube.com/watch?v=xHXn3Kg2IQE 에서 Virgil Dobjanschi가이 문제에 대한 접근 방식을 설명하는 곳을 확인하십시오.


다음은 간단한 Webservice Calling을 위해 만든 라이브러리입니다.

당신은 하나의 라인 gradle 종속성을 추가하여 이것을 사용할 수 있습니다 -

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

여기에 사용하는 데모가 있습니다.

https://github.com/vishalchhodwani1992/httpLibrary


안드로이드에서 RestFul을 사용하려면 다음 단계를 따르십시오.

1 단계

안드로이드 빈 프로젝트를 만듭니다.

2 단계

인터넷 액세스 권한이 필요합니다. 아래 코드를 AndroidManifest.xml 파일에 작성하십시오.

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

3 단계

다른 서버 또는 동일한 시스템에서 실행중인 RestFul url이 필요합니다.

4 단계

AsyncTask를 확장 할 RestFul 클라이언트를 만듭니다. RestFulPost.java를 참조하십시오.

5 단계

RestFull 요청 및 응답에 대한 DTO 클래스를 만듭니다.

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);
    }
}

자세한 내용과 전체 코드는 http://javaant.com/consume-a-restful-webservice-in-android/#.VwzbipN96Hs 확인하십시오.


어쩌면 늦었거나 이미 사용 해본 적이 있지만 ksoap 이라는 이름의 또 다른 것이 있습니다. 또한 시간 초과가 포함되어 SOAP 기반의 웹 서비스를 효율적으로 파싱 할 수 있습니다. 나는 또한 내 파싱에 맞게 몇 가지 변경을했다.


최근 제 3 자 라이브러리 인 Square Retrofit 이 업무를 잘 처리 할 수 ​​있다는 사실이 발견되었습니다.

REST 엔드 포인트 정의

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

구체적인 서비스 받기

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

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
    }
});

라이브러리는 json 직렬화 및 황폐화를 처리합니다. 직렬화 및 직렬화를 사용자 정의 할 수도 있습니다.

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();