简体   繁体   English

如何从响应中检索数据? -改装2

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

the response from the server as below: 来自服务器的响应如下:

{
    success: true,
    token: "someRandomToken"
}

How can I retrieve token from the response? 如何从响应中检索token

I tried to follow the solution provided here but I can't add generic to the Call inside onResponse method 我尝试遵循此处提供的解决方案,但无法在onResponse method内的Call添加泛型

EDIT 编辑

Here is my method 这是我的方法

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

                }
            }

        });


    }

After implementing @Piyush Patel answer: I change the Call and the Response to retrofit2.Call<tokenRetrieved> and retrofit2.Reponse<tokenRetrieved> respectively. 在实现@Piyush Patel答案之后:我将CallResponse更改为retrofit2.Call<tokenRetrieved>retrofit2.Reponse<tokenRetrieved> but the Callback in my enqueue prompt an error asking me to implement its onResponse and onFailure methods Callback在我enqueue提示错误要求我履行其onResponseonFailure方法

newbie question: Am I using retrofit1 methods?!! 新手问题:我正在使用retrofit1方法吗?

Here is a snippet that shows how you can implement it using GSON 这是一个片段,显示了如何使用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) {
            }
        });

Using 运用

Volley u can do so 凌空你可以这样做

Try this code 试试这个代码

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

                    }

                }

Create a JSONObject from your response string and to get the string with the key token use 从您的响应字符串创建一个JSONObject并使用密钥token获取该字符串

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM