Retrofit2 para solicitud de red de Android (1)

Prólogo: He usado Retrofit durante tanto tiempo para registrarlo ahora. Este artículo es un método de uso simple y continuará actualizándose en el futuro. Este artículo es adecuado para principiantes y los veteranos pueden dar algunos consejos.

No digas tonterías, vamos directo

La primera es importar los paquetes requeridos, no olvides hacer clic en sincronizar.

implementation 'com.squareup.okhttp3:okhttp:3.1.2'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'

1. Transforme su solicitud okhttp en una interfaz Java, use anotaciones para describir y configurar los parámetros de solicitud de red y encapsule direcciones URL y solicitudes de datos de red.

public interface ApiService{
        @GET("getAll")
        Call<ResponseBody> getAll(@Query("key") String key, @Query("consName") String consName, @Query("type") String type);
    }

Aquí tomo mi interfaz de agregación como ejemplo para ilustrar

@GET ----- La solicitud de obtención indicada (consulte la Tabla 1 para obtener más detalles)

getAll ----- in ("getAll") indica la dirección solicitada (es decir, la dirección agregada después de la URL, que es parte de la URL). ¿Se combina con baseUrl para ser la dirección de solicitud de ruta completa, como como URL="http://web.juhe.cn:8080/constellation/", la dirección solicitada es getall, luego la ruta completa combinada es "http://web.juhe.cn:8080/constellation/getAll"

El Bean en Call<Bean> ----- representa nuestra clase Bean personalizada, que también se puede escribir como ResponseBody. Esto generalmente se usa cuando se realizan pruebas o cuando el contenido devuelto no está claro. Devuelve directamente datos de tipo de forma de cadena

getAll ----- significa el nombre del método, podemos definir libremente el nombre del método

@Query("key") Clave de cadena ----- @Query representa la anotación del parámetro de solicitud, ("key") representa el campo de parámetro de solicitud de la interfaz. No se dice mucho que String sea el tipo de parámetro y la clave. Detrás está el valor del campo (consulte la Tabla 2 para obtener más detalles)

 Anotación del método de solicitud de la tabla 1

anotación del método de solicitud ilustrar
@CONSEGUIR obtener solicitud
@CORREO solicitud de publicación
@PONER poner solicitud
@BORRAR borrar petición
@PARCHE Solicitud de parche, que es un complemento de la solicitud de colocación y se utiliza para actualizar los recursos locales.
@CABEZA solicitud de cabeza
@OPCIONES solicitud de opciones
@HTTP A través de anotaciones, se pueden reemplazar todas las anotaciones anteriores. Tiene tres atributos: método, ruta, hasBody.

 Anotación del parámetro de solicitud de la Tabla 2

Solicitar anotación de parámetros ilustrar
@Cuerpo Se utiliza principalmente para solicitudes de publicación para enviar datos no expresivos. Según el método de conversión, el objeto de instancia se convierte en una cadena correspondiente para pasar parámetros. Por ejemplo, usar Post para enviar datos Json y agregar GsonConverterFactory es convertir el cuerpo. en una cadena json para transmisión
@Archivado Se usa principalmente para pasar parámetros en modo de publicación y debe usarse junto con @FromUrlEncoded, es decir, para pasar parámetros en forma de formulario.
@FiledMap Se usa principalmente para campos de formulario en solicitudes de publicación y debe usarse junto con @FromUrlEncoded
@Parte Para los campos de formulario, Part y PartMap se utilizan en combinación con la anotación @multipart, adecuada para cargar archivos
@PartMap Para los campos de formulario, el tipo aceptado predeterminado es Map<String,RequestBody>, que se puede utilizar para cargar varios archivos.
@Camino Utilizado para marcadores de posición en URL
@Consulta Parámetros utilizados en solicitudes de obtención
@QueryMap Similar a Consulta, utilizado para determinar los parámetros del formulario.
@URL Especifique la ruta de la solicitud

 Luego está la URL de solicitud de servicio, que se compone de IP y puerto, que es la interfaz que nos proporciona el fondo que usamos con frecuencia. Recuerde agregar "/" después de la interfaz porque las cosas se unirán más adelante. no lo agregues, reportarás un error

public static final String Url="http://web.juhe.cn:8080/constellation/";

2. Cree una instancia de actualización

Retrofit retrofit=new Retrofit.Builder().baseUrl(Url).build();

Tenga en cuenta aquí que si el Bean anterior usa ResponseBody, puede escribirlo directamente así: si es una clase de Bean personalizada, debe agregar addConverterFactory (GsonConverterFactory.create ()), que es el convertidor Gson.

Retrofit retrofit=new Retrofit.Builder().baseUrl(Url).addConverterFactory(GsonConverterFactory.create()).build();

Luego crea una instancia de la interfaz.

ApiService apiService=retrofit.create(ApiService.class);

El siguiente paso es llamar, llamar al método en la interfaz.

Call<ResponseBody> call=apiService.getAll("3e4d3cb8eb07d3b06e3f6a99ae34b1ee","双子座","today");

El último es recibir el resultado devuelto.

call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    System.out.println("666"+response.body().string());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                System.out.println("33333"+call+"/n"+t.toString());
            }
        });

3. Este es el código completo, aquí lo ejecuto directamente en la clase, lo cual es vago

public class RetrofitText {
    //服务器请求的URL
    public static final String Url="http://web.juhe.cn:8080/constellation/";
    //定义接口
    public interface ApiService{
        @GET("getAll")
        Call<ResponseBody> getAll(@Query("key") String key, @Query("consName") String consName, @Query("type") String type);
    }

    public static void main(String[] args){
        getList();
    }
    public static void getList(){
        //创建Retrofit实例
        Retrofit retrofit=new Retrofit.Builder().baseUrl(Url).build();
        //创建接口实例
        ApiService apiService=retrofit.create(ApiService.class);
        //调用接口中的方法
        Call<ResponseBody> call=apiService.getAll("3e4d3cb8eb07d3b06e3f6a99ae34b1ee","双子座","today");
        //返回结果
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                try {
                    System.out.println("返回的结果"+response.body().string());
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                System.out.println("33333"+call+"/n"+t.toString());
            }
        });
    }
}

El resultado obtenido después de ejecutar.

{"date":20200810,"name":"双子座","QFriend":"水瓶座","color":"水蓝色","datetime":"2020年08月10日","health":"80","love":"70","work":"80","money":"60","number":4,"summary":"请调整你处理事情的方式,你是有机会朝目标前进的,但双子座很容易在略感困难的状况下改变方向,这种消极行为尽量避免,你才能在合适的时机有收获。作者:伦敦占星学院-不卉游泳的鱼","all":"80","resultcode":"200","error_code":0}

Este artículo está aquí primero y se actualizará más adelante.

Supongo que te gusta

Origin blog.csdn.net/lanrenxiaowen/article/details/107906623
Recomendado
Clasificación