【问题标题】:Where to put API Key using retrofit in Android Studio在 Android Studio 中使用改造来放置 API 密钥的位置
【发布时间】:2021-12-02 15:00:50
【问题描述】:

我正在使用 newsapi.org 的 api 密钥创建一个新闻应用程序 这是我使用找到的教程创建的接口代码 https://www.learn2crack.com/2016/02/recyclerview-json-parsing.html.I 很困惑这个接口的语法是什么以及将 api 密钥放在哪里。

公共接口请求接口 {

@GET("android/jsonandroid")
Call<JSONResponse> getJSON();}

这是我的 MainActivity.java 代码

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerView;
    private ArrayList<Article> data;
    private DataAdapter adapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initViews();
    }
    private void initViews(){
        recyclerView = (RecyclerView)findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);
        loadJSON();
    }
    private void loadJSON(){
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("BASE_URL")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RequestInterface request = retrofit.create(RequestInterface.class);
        Call<JSONResponse> call = request.getJSON();
       call.enqueue(new Callback<JSONResponse>() {
           @Override
           public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
               JSONResponse jsonResponse = response.body();
               data = new ArrayList<>(Arrays.asList(jsonResponse.getAndroid()));
               adapter = new DataAdapter(data);
               recyclerView.setAdapter(adapter);
           }

           @Override
           public void onFailure(Call<JSONResponse> call, Throwable t) {
               Log.d("Error",t.getMessage());
           }
       });
    }
}

【问题讨论】:

    标签: android retrofit


    【解决方案1】:

    对一个请求使用@Headers:

    @Headers("api-key: " + "PUT_YOUR_API_KEY")
    @GET("android/jsonandroid")
    Call<JSONResponse> getJSON();
    }
    

    并在OkHttpClient.Builder 中对所有请求使用addInterceptor:

    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
    builder.addInterceptor(new Interceptor() {
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request().newBuilder().addHeader("api-key", "PUT_YOUR_API_KEY").build();
                return chain.proceed(request);
        }
    });
    

    【讨论】:

    【解决方案2】:

    对于newsapi.org,假设您的来源是mashable,试试这个

    public interface RequestInterface {
    @GET("v1/articles?source=mashable&sortBy=top&apiKey=your_apikey_here")
    Call<JSONResponse> getJSON();
    }
    

    这应该是baseurl

    Retrofit retrofit = new Retrofit.Builder()
    
                .baseUrl("https://newsapi.org/")
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    

    【讨论】:

    • 查询应该设置为接口上的参数:@GET("v1/articles") Call getJson(@Query("source") String source, @Query("sortBy" ) String sortBy, @Query("apiKey") String apiKey);
    • 是的,如果要动态更改查询参数,这是一个更好的解决方案(上述解决方案也应该有效)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2023-03-03
    • 2016-08-04
    • 1970-01-01
    • 2017-06-30
    • 2015-07-20
    相关资源
    最近更新 更多