【问题标题】:How to send token to a remote server with GET method request?如何使用 GET 方法请求将令牌发送到远程服务器?
【发布时间】:2018-05-16 18:59:43
【问题描述】:

我是 android studio 的初学者。我有一个问题,如何使用 GET 方法请求将令牌 ID 发送到远程服务器以获取信息,因为我必须经过身份验证才能获取这些信息。 在GET方法和错误消息下面,请帮助! 1错误信息GET method

【问题讨论】:

  • 首先你需要从服务器获取令牌。这通常在生成令牌时通过用户登录/注册。
  • 好的,然后我是如何实现的?
  • 您需要在header 中提供令牌,我认为有一些示例可以做到这一点。喜欢:stackoverflow.com/questions/44000212/… 其中 ACESS_TOKEN 是您来自服务器的令牌。
  • 所以我在标头中提供令牌并将其放入 GET 方法中,如示例?
  • 你试过okHttp3了吗?这是一个很棒的图书馆

标签: android


【解决方案1】:

可以使用Retrofit Library的支持

首先,在你的 gradle 中,添加这一行来下载。

compile 'com.squareup.retrofit2:retrofit:2.4.0'

其次,在@Body中选择RequestBody的类型

Gson: com.squareup.retrofit2:converter-gson
Jackson: com.squareup.retrofit2:converter-jackson
Moshi: com.squareup.retrofit2:converter-moshi
Protobuf: com.squareup.retrofit2:converter-protobuf
Wire: com.squareup.retrofit2:converter-wire
Simple XML: com.squareup.retrofit2:converter-simplexml
Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

然后将其添加到您的 gradle 中:

compile 'com.squareup.retrofit2:converter-gson:2.4.0'

第三,创建一个接口类以使用@GET方法或其他方法,例如:

public interface CallMethodService {
        @GET("search")
        Call<ResponseModel>  getResponseModel();
    }

最后,在您的 MainActivity 中:

创建一个改造

Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl("base server link")
                        .addConverterFactory(RequestBody type)
                        .build();

例如:

Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("http://api.giphy.com/v1/gifs/")
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

然后调用获取数据:

 retrofit.create(CallMethodService.class).getResponseModel()
            .enqueue(new Callback<ResponseModel>() {
                @Override
                public void onResponse(Call<ResponseModel> call, Response<ResponseModel> response) {
                   //get data
                }
                @Override
                public void onFailure(Call<GifResponse> call, Throwable t) {
                   // No internet
                }
            });

【讨论】:

  • 我收到了这个消息“错误:无法解决:com.squareup.retrofit2:converter-gson”有什么帮助吗?
  • 好的,你在com.squareup.retrofit2:converter-gson:2.4.0之后添加版本
【解决方案2】:

你可以试试 OkHttp3。 将此添加到您的 GRADLE:

compile 'com.squareup.okhttp3:okhttp:3.10.0'

创建一个类并从AsyncTask扩展它 然后从onCreate方法调用它

new DataToServer().execute();

DataToServer 类实现

private class DataToServer extends AsyncTask<String, Void, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... strings) {

        GetDataFromUrl getData = new GetDataFromUrl();
        String response = null;
        try {
            response = getData.run(URL_of_your_server);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        //you got the server response on the result variable

    }

}

这就是 OkHttp 的实现

 private class GetDataFromUrl {
        OkHttpClient client = new OkHttpClient();

        String run(String url) throws IOException {

            RequestBody formBody = new FormBody.Builder()
                    .build();


            Request request = new Request.Builder()
                    .url(url)
                    .post(formBody)
                    .build();

            Response response = null;
            try {
                response = client.newCall(request).execute();
                return response.body().string();
            } finally {
                if (response != null) {
                    response.close();
                }
            }
        }


    }

【讨论】:

    【解决方案3】:

    我想通了,就是这个:

    @Override

    public Map<String, String> getHeaders() throws AuthFailureError {
        Map<String, String> headers = new HashMap<>();
        headers.put("x-access-token", TokenHandler.getToken());
        return headers;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      相关资源
      最近更新 更多