Maison >Java >javaDidacticiel >Explication détaillée de l'utilisation et exemples d'OkHttp en Java

Explication détaillée de l'utilisation et exemples d'OkHttp en Java

怪我咯
怪我咯original
2017-07-02 10:29:312145parcourir

Cet article présente principalement les méthodes d'utilisation et des exemples d'OkHttp en Java. Les amis qui en ont besoin peuvent se référer à

Les méthodes d'utilisation et des exemples d'OkHttp en Java

Vue d'ensemble

Préparez-vous à étudier Retrofit, et il repose sur OkHttp, alors utilisez d'abord OkHttp, sans vous plonger dans le code source, explorez simplement comment l'utiliser. Je vérifierai à nouveau le code source lorsque j'en aurai l'occasion.

Avant de continuer, vous avez d'abord besoin de 2 packages jar, dont l'un est le package jar okHttp, qui peut être téléchargé depuis github, et l'autre est son package de dépendances. Sans cela, le projet est très critique. ne peut pas courir.

Deux façons de demander OkHttp

Il n'est pas difficile de deviner qu'en ce qui concerne les requêtes réseau, il n'y a que deux façons, l'une est d'utiliser rappels, et l'autre est Le premier est de démarrer l'exécution du thread enfant.

Le premier : démarrer l'exécution du sous-thread

OkHttpClient client = new OkHttpClient(); 
Request build = new Request.Builder().url(url).build(); 
try { 
<span style="white-space:pre">  </span>Response execute = client.newCall(build).execute(); 
  if(execute.isSuccessful()){ 
    System.out.println("wisely aaa"); 
  } else { 
    System.out.println("wisely bbb"); 
  } 
} catch (IOException e) { 
  e.printStackTrace(); 
}

Le deuxième : utiliser les rappels, j'aime personnellement utiliser ce meilleur. (PS : je me sens trop jeune et trop simple !! Je pensais au départ que la méthode de rappel était dans le thread principal, mais il s'est avéré que c'était un sous-thread, un sous-thread....)

OkHttpClient client = new OkHttpClient(); 
Request build = new Request.Builder().url(url).build(); 
client.newCall(build).enqueue(new Callback() { 
 
  @Override 
  public void onResponse(Response arg0) throws IOException { 
    System.out.println("wisely  success"); 
  } 
 
  @Override 
  public void onFailure(Request arg0, IOException arg1) { 
    System.out.println("wisely  failure"); 
  } 
});

OkHttp obtenir la demande

Obtenir photo

OkHttpClient client = new OkHttpClient(); 
     
Request build = new Request.Builder().url(url).build(); 
client.newCall(build).enqueue(new Callback() { 
       
  @Override 
  public void onResponse(Response response) throws IOException { 
//   byte[] bytes = response.body().bytes(); 
    InputStream is = response.body().byteStream(); 
    Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 8; 
//   Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length,options); 
    Bitmap bitmap = BitmapFactory.decodeStream(is, null, options); 
    Message msg = handler.obtainMessage(); 
    msg.obj = bitmap; 
    handler.sendMessage(msg); 
  } 
     
  @Override 
  public void onFailure(Request arg0, IOException arg1) { 
    System.out.println("wisely fail:"+arg1.getCause().getMessage()); 
  } 
});
Écrivez uniquement le code clé, et le code correspondant du gestionnaire n'a pas été écrit.


Il existe deux façons d'obtenir des images réseau. La première consiste à obtenir le tableau d'octets

et la seconde consiste à obtenir le flux d'entrée. Notez que onResponse est dans le fil de discussion enfant...

La demande de publication d'OkHttp

Par rapport à la demande get, post Il y a un peu plus de catégories demandées.


1. Le premier est le formulaire de soumission le plus couramment utilisé.

OkHttpClient client = new OkHttpClient(); 
 
RequestBody body = new FormEncodingBuilder() 
    .add("userName", "13363114390") 
    .add("password", "200820e3227815ed1756a6b531e7e0d2").build(); 
 
Request build = new Request.Builder().url(url).post(body).build(); 
client.newCall(build).enqueue(new Callback() { 
 
  @Override 
  public void onResponse(Response response) throws IOException { 
    String lenght = response.header("Content-Length"); 
    System.out.println("wisely--lenght:" + lenght); 
 
    LoginResponse loginResponse = new Gson().fromJson(response.body().charStream(), LoginResponse.class); 
    System.out.println("wisely---" + loginResponse.getMessage()); 
  } 
 
  @Override 
  public void onFailure(Request arg0, IOException arg1) { 
    System.out.println("wisely-----fail"); 
  } 
});
String tokeId; 
  boolean result; 
 
  public boolean isResult() { 
    return result; 
  } 
 
  public void setResult(boolean result) { 
    this.result = result; 
  } 
 
  public String getMessage() { 
    return message; 
  } 
 
  public void setMessage(String message) { 
    this.message = message; 
  } 
 
  public String getTokeId() { 
    return tokeId; 
  } 
 
  public void setTokeId(String tokeId) { 
    this.tokeId = tokeId; 
  } 
 
}
Ce qui précède est un simple formulaire de connexion, dans lequel les données json renvoyées sont encapsulées dans un bean. En plus d'obtenir des données json, chaque en-tête de message peut également être obtenu.


2. Télécharger des images

C'est la fonction qui me tient le plus à cœur. Les expériences ont prouvé que okHttp a une fonction puissante de téléchargement d'images et prend en charge plusieurs images. téléchargements.

private MediaType PNG = MediaType.parse("application/octet-stream");
OkHttpClient client = new OkHttpClient(); 
     
RequestBody body = new MultipartBuilder() 
    .type(MultipartBuilder.FORM) 
    .addPart(Headers.of("Content-Disposition","form-data; name=\"files\";filename=\"img1.jpg\""),RequestBody.create(PNG, file1)) 
    .addPart(Headers.of("Content-Disposition","form-data; name=\"files\";filename=\"img2.jpg\""),RequestBody.create(PNG, file2)).build(); 
     
Request request = new Request.Builder() 
  <span style="white-space:pre">  </span>.url(url) 
    .post(body).build(); 
client.newCall(request).enqueue(new Callback() { 
       
  @Override 
  public void onResponse(Response response) throws IOException { 
         
    if(response.isSuccessful()){ 
      UploadPNGResponse uploadPNGResponse = new Gson().fromJson(response.body().charStream(), UploadPNGResponse.class); 
      String msg = uploadPNGResponse.getMsg(); 
           
      List<String> list = uploadPNGResponse.getList(); 
      for (String string : list) { 
        System.out.println("wisely---path:"+string); 
      } 
           
    } 
  } 
       
  @Override 
  public void onFailure(Request arg0, IOException arg1) { 
    System.out.println("wisely---fail--"+arg1.getCause().getMessage()); 
  } 
});

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn