programing

안드로이드에서 GSON이나 다른 라이브러리를 사용하지 않고 Retrofit을 사용하여 String으로 응답하는 방법

megabox 2023. 4. 4. 21:11
반응형

안드로이드에서 GSON이나 다른 라이브러리를 사용하지 않고 Retrofit을 사용하여 String으로 응답하는 방법

아래 API에서 답변을 얻으려고 합니다.

https://api.github.com/users/username

근데 어떻게 반응해야 될지 모르겠어요.String그 때문에,String해석하여 입수하다JSONObject.

사용된 개조 버전:

리트로핏: 2.0.0-1801

저는 지금까지 이것을 시도해 왔습니다.

public interface GitHubService {
        @GET("/users/{user}")
        public String listRepos(@Path("user") String user,Callback<String> callback);
    }

취득:

GitHubService service = retrofit.create(GitHubService.class);
        service.listRepos("username", new Callback<String>() {
            @Override
            public void onResponse(Response response) {
                System.out.println(response.toString());
            }

            @Override
            public void onFailure(Throwable t) {

            }
        });

예외:

Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class java.lang.String. Tried:
    * retrofit.ExecutorCallAdapterFactory
            at retrofit.Utils.resolveCallAdapter(Utils.java:67)
            at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:49)

어떤 도움이라도 주시면 감사하겠습니다.

** 업데이트 ** 스칼라 컨버터가 리트로피트에 추가되었습니다.String아래 답변보다 세레머니가 덜한 답변입니다.

인터페이스 예시 --

public interface GitHubService {
    @GET("/users/{user}")
    Call<String> listRepos(@Path("user") String user);
}

를 추가합니다.ScalarsConverterFactory당신의 개조 건축업자에게요주의: 사용하는 경우ScalarsConverterFactory그리고 다른 공장 먼저 스칼라 공장을 추가합니다.

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(ScalarsConverterFactory.create())
    // add other factories here, if needed.
    .build();

gradle 파일에 scalars 컨버터도 포함해야 합니다.

implementation 'com.squareup.retrofit2:converter-scalars:2.1.0'

--- Original Answer(오리지널 앤서) (계속 동작하고, 코드만 추가) ---

JSON을 직접 처리해 달라는 요청을 가로채고 싶은 것은 조금 이상한 것 같다는 @CommonsWare의 의견에 동의합니다.대부분의 경우 POJO는 필요한 모든 데이터를 보유하고 있기 때문에 번거롭게 할 필요가 없습니다.JSONObjectJSON을 조작해야 할 경우 커스텀 Gson이나 개조를 사용하여 특정 문제를 해결할 수 있을 것 같습니다.단, 개조를 통해 Gson을 통한 JSON 파싱이 더욱 쉬워집니다.또한 REST 요청과 관련된 다른 많은 지루한 작업도 관리합니다.기능 중 하나를 사용하고 싶지 않다고 해서 모든 기능을 버릴 필요는 없습니다.raw stream을 입수하고 싶을 때가 있습니다.그 방법은 다음과 같습니다.

먼저, Retrofit 2를 사용하는 경우,CallAPI. type 매개 변수로 변환할 개체를 보내는 대신ResponseBodyfrom okhttp --

public interface GitHubService {
    @GET("/users/{user}")
    Call<ResponseBody> listRepos(@Path("user") String user);
}

콜을 작성 및 실행할 수 있습니다.

GitHubService service = retrofit.create(GitHubService.class);
Call<ResponseBody> result = service.listRepos(username);
result.enqueue(new Callback<ResponseBody>() {
    @Override
    public void onResponse(Response<ResponseBody> response) {
        try {
            System.out.println(response.body().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onFailure(Throwable t) {
        e.printStackTrace();
    }
});

주의: 위의 콜 코드string()응답 개체에서 전체 응답을 문자열로 읽습니다.시체가 스트림을 섭취할 수 있는 무언가에 전달될 경우charStream()대신.문서를 참조해 주세요.

언급URL : https://stackoverflow.com/questions/32617770/how-to-get-response-as-string-using-retrofit-without-using-gson-or-any-other-lib

반응형