retrofit 2使用

18883 ワード

記事の目次
  • 要求パラメータ:
  • プレゼンテーション:
  • RetrofitはRESTfulのHTTPネットワーク要求フレームのパッケージです.
    要求パラメータ:
    @FormUrlEncodedはform-encodedを送信するデータを表しています.各キーの値は@Filedでキー名を注釈する必要があります.その後のオブジェクトは値を提供する必要があります.
    @Field Post要求を送信する際に要求したフォームフィールドは、@FormUrlEncodedの注釈と合わせて使用されます.
    @Query@GETメソッドのクエリパラメータ(Query=Url中'?'の後のkey-value)に使用されます.
    プレゼンテーション:
    retrofit依存:
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    // gson   
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    
    ネットワーク権限を追加:
    <uses-permission android:name="android.permission.INTERNET" />
    
    インターフェースWeatherpoli:
    public interface WeatherApi {
         
        @POST("/v3/weather/weatherInfo")
        @FormUrlEncoded //     form-encoded   ,        @Filed     ,          
        Call<ResponseBody> postWeather(@Field("city") String city, @Field("key") String key);
    
        @GET("/v3/weather/weatherInfo")
        Call<BeanWeatherInfo> getWeather(@Query("city") String city, @Query("key") String key);
    }
    
    getとpostボタンをクリックしてトリガーを押します.
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="get  "
            android:onClick="get"
            />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="post  "
            android:onClick="post"
            />
    
    MainActivity:
    public class MainActivity extends AppCompatActivity {
         
    
        WeatherApi weatherApi;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
         
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl("https://restapi.amap.com") //        url  
                    .addConverterFactory(GsonConverterFactory.create()) //     Gson  
                    .build();
            weatherApi = retrofit.create(WeatherApi.class);
        }
    
        public void get(View view){
         
            //     body            BeanWeatherInfo
            Call<BeanWeatherInfo> call = weatherApi.getWeather("110101", "xxxxxxxxxxxxxx");
            call.enqueue(new Callback<BeanWeatherInfo>() {
         
                @Override
                public void onResponse(Call<BeanWeatherInfo> call, Response<BeanWeatherInfo> response) {
         
                    if (response.isSuccessful()){
         
                        BeanWeatherInfo body = response.body();
                        String info = body.getInfo();
                        Log.d("AAAAAAAAAAAAA", "onResponse: info:"+info);
                    }
                }
                @Override
                public void onFailure(Call<BeanWeatherInfo> call, Throwable t) {
         
                    Writer result = new StringWriter();
                    PrintWriter printWriter = new PrintWriter(result);
                    t.printStackTrace(printWriter);
                    Log.e("AAAAAAAAAAAAA", "onFailure: "+result.toString());
                }
            });
        }
    
        public void post(View view){
         
            Call<ResponseBody> call = weatherApi.postWeather("110101", "xxxxxxxxxxxxxx");
            call.enqueue(new Callback<ResponseBody>() {
         
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
         
                    if (response.isSuccessful()){
         
                        ResponseBody body = response.body();
                        try {
         
                            String string = body.string();
                            Log.d("AAAAAAAAAAAAA", "onResponse: "+string);
                        } catch (IOException e) {
         
                            e.printStackTrace();
                        } finally {
         
                            body.close();
                        }
                    }
                }
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
         
                }
            });
        }
    }