簡體   English   中英

如何從響應中檢索數據? -改裝2

[英]How to retrieve data from response? - Retrofit 2

來自服務器的響應如下:

{
    success: true,
    token: "someRandomToken"
}

如何從響應中檢索token

我嘗試遵循此處提供的解決方案,但無法在onResponse method內的Call添加泛型

編輯

這是我的方法

public void loginUser(final Context context, String url, String username, String passowrd, loginJson loginjson) {

        final MediaType JSON
                = MediaType.parse("application/json; charset=utf-8");

        loginjson.setUsername(username);
        loginjson.setPassword(passowrd);

        Gson gson = new Gson();

        String jsonFromForm = gson.toJson(loginjson);

        OkHttpClient client = new OkHttpClient();
        RequestBody body = RequestBody.create(JSON, jsonFromForm);
        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .addHeader("content-type", "application/json; charset=utf-8")
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                System.out.println("Failure!!");
            }

            @Override
            public void onResponse(Call call, final Response response) throws IOException {
                if(response.isSuccessful()) {
                    if (context != null) {
                        new Handler(Looper.getMainLooper()).post(new Runnable() {

                            @Override
                            public void run() {
                                if(response.body() != null){

                                }
                            }
                        });
                    }
//
                } else {
                    if (context != null) {
                        new Handler(Looper.getMainLooper()).post(new Runnable() {

                            @Override
                            public void run() {
                                Toast.makeText(context, context.getResources().getString(R.string.failed_to_login),
                                        Toast.LENGTH_SHORT).show();
                            }
                        });
                    }

                }
            }

        });


    }

在實現@Piyush Patel答案之后:我將CallResponse更改為retrofit2.Call<tokenRetrieved>retrofit2.Reponse<tokenRetrieved> Callback在我enqueue提示錯誤要求我履行其onResponseonFailure方法

新手問題:我正在使用retrofit1方法嗎?

這是一個片段,顯示了如何使用GSON來實現它

public class JsonResponse {

    public String success;
    public String token;

    public JsonResponse(String success, String token) {
        this.success = success;
        this.token = token;
    }
}

Call<JsonResponse> call = api.checkLevel(1);
        call.enqueue(new Callback<JsonResponse>() {
            @Override
            public void onResponse(Call<JsonResponse> call, Response<JsonResponse> response) {
                if (response.isSuccessful()) {
                    JsonResponse jsonResponse=response.body();
                }
            }

            @Override
            public void onFailure(Call<JsonResponse> call, Throwable t) {
            }
        });

運用

凌空你可以這樣做

試試這個代碼

public void onResponse(String response) {

                    try {
                        JSONObject object=new JSONObject(response);
                        if ((object.getBoolean("success"))==true){
                            String Token=object.getString("token");
                        }else{
                            // enter else condition
                        }


                    } catch (JSONException e) {
                        e.printStackTrace();

                    // json Exception

                    }

                }

從您的響應字符串創建一個JSONObject並使用密鑰token獲取該字符串

JSONObject json = new JSONObject(response);
json.getString("token");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM