我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Android Retrofit和Rxjava的网络请求

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Android  Retrofit和Rxjava的网络请求

Android  Retrofit和Rxjava的网络请求

去年的时候好多公司就已经使用Rxjava和Retrofit了,最近自自己学习了一下,感觉真的是很好用,让自己的网络请求变得更简单了,而且封装性极强。

首先做一下准备工作,导入需要引用的文件


compile 'com.android.support:appcompat-v7:25.1.0'
 testCompile 'junit:junit:4.12'
 compile 'io.reactivex:rxjava:1.1.0'
 compile 'io.reactivex:rxandroid:1.1.0'
 compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
 compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
 compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'
 compile 'com.google.code.gson:gson:2.6.2'
 compile 'com.jakewharton:butterknife:7.0.1'
 compile 'com.android.support:recyclerview-v7:25.1.0'

网络请求的地址:https://api.douban.com/v2/movie/top250?start=0&count=10

添加网络请求权限


<uses-permission android:name="android.permission.INTERNET"/>

首先看一下Retrofit的使用基本用法

创建一个接口类MovieService 对网络接口进行请求这里写代码片

构建网络请求


public interface MovieService {
 @GET("top250")
 Call<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);
}

String baseUrl="https://api.douban.com/v2/movie/";
  Retrofit retrofit = new Retrofit.Builder()
    .baseUrl(baseUrl)
    .addConverterFactory(GsonConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .build();
  MovieService service = retrofit.create(MovieService.class);
  service.getTopMovie(0,10)
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Subscriber<MovieBean>() {
     @Override
     public void onCompleted() {
      Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show();
     }
     @Override
     public void onError(Throwable e) {
      resultTV.setText(e.getMessage());
     }
     @Override
     public void onNext(MovieBean movieBean) {
      resultTV.setText(movieBean.getTitle());
     }
    });
  Call<MovieBean> call = service.getTopMovie(0, 10);
  call.enqueue(new Callback<MovieBean>() {
   @Override
   public void onResponse(Call<MovieBean> call, Response<MovieBean> response) {
    MovieBean body = response.body();
    resultTV.setText(response.body().getTitle());
    System.out.println("成功"+response.body().getCount());
   }
   @Override
   public void onFailure(Call<MovieBean> call, Throwable t) {
    resultTV.setText(t.getMessage());
   }
  });

现在看看我们的布局文件MainActivity的xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_main"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="ledon.com.retrofitdemo.MainActivity">
 <Button
  android:id="@+id/click_me_BN"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:padding="5dp"
  android:text="获取数据"
  android:textSize="16sp"/>
 <ListView
  android:id="@+id/result_TV"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:layout_above="@id/click_me_BN"
  android:textSize="16sp"/>
</RelativeLayout>

接下来就看看怎么样和RxJava的完美结合了。

首先改造一下MovieService这个接口


public interface MovieService {
 @GET("top250")
 Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);
}

然后看一下我们需要创建一个HttpMethods关于一个http的请求方法


package ledon.com.retrofitdemo.api;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.security.auth.Subject;
import ledon.com.retrofitdemo.MovieBean;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

public class HttpMethods {
 public static final String BASE_URL="https://api.douban.com/v2/movie/";
 private static final int DEFAULT_TIMEOUT=5;
 private Retrofit retrofit;
 private MovieService movieService;
 //私有化构造方法
 private HttpMethods(){
  //手动创建一个okhttpClient并设置超时时间
  OkHttpClient.Builder builder = new OkHttpClient.Builder();
  builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
  retrofit=new Retrofit.Builder()
    .client(builder.build())
    .addConverterFactory(GsonConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .baseUrl(BASE_URL)
    .build();
  movieService = retrofit.create(MovieService.class);
 }
 //在访问httpmethods时候创建单例
 private static class SingletonHolder{
  private static final HttpMethods INSTANCE=new HttpMethods();
 }
  //获取单例
 public static HttpMethods getInstance(){
  return SingletonHolder.INSTANCE;
 }
 public void getTopMovie(Subscriber<MovieBean>subscriber, int start, int count){
  movieService.getTopMovie(start, count)
    .subscribeOn(Schedulers.io())
    .unsubscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(subscriber);
 }
}

so,很简单,我们的结合之路已经完成,另附源代码


package ledon.com.retrofitdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Toast;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import ledon.com.retrofitdemo.adapter.MovieAdapter;
import ledon.com.retrofitdemo.api.HttpMethods;
import rx.Subscriber;
public class MainActivity extends AppCompatActivity {
 @Bind(R.id.click_me_BN)
 Button clickMeBN;
 @Bind(R.id.result_TV)
 ListView resultTV;
 @Bind(R.id.activity_main)
 RelativeLayout activityMain;
 private Subscriber<MovieBean> subscriber;
 private List<MovieBean.SubjectsBean> list;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  ButterKnife.bind(this);
  //resultTV.setAdapter();
 }
 //进行网络请求
 private void getMovie() {
  subscriber = new Subscriber<MovieBean>() {
   @Override
   public void onCompleted() {
    Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show();
   }
   @Override
   public void onError(Throwable e) {
    //resultTV.setText(e.getMessage());
   }
   @Override
   public void onNext(MovieBean movieBean) {
    // List<MovieBean.SubjectsBean> subjects = movieBean.getSubjects();
    list=movieBean.getSubjects();
    MovieAdapter movieAdapter=new MovieAdapter(MainActivity.this,list);
    resultTV.setAdapter(movieAdapter);
    //resultTV.setText(movieBean.getTitle());
   }
  };
  HttpMethods.getInstance().getTopMovie(subscriber, 0, 10);
  
  //Call<MovieBean> call = service.getTopMovie(0, 10);
  
 }
 @OnClick(R.id.click_me_BN)
 public void onClick() {
  getMovie();
 }
}

package ledon.com.retrofitdemo;
import java.util.List;

public class MovieBean {
 
 private int count;
 private int start;
 private int total;
 private String title;
 private List<SubjectsBean> subjects;
 public int getCount() {
  return count;
 }
 public void setCount(int count) {
  this.count = count;
 }
 public int getStart() {
  return start;
 }
 public void setStart(int start) {
  this.start = start;
 }
 public int getTotal() {
  return total;
 }
 public void setTotal(int total) {
  this.total = total;
 }
 public String getTitle() {
  return title;
 }
 public void setTitle(String title) {
  this.title = title;
 }
 public List<SubjectsBean> getSubjects() {
  return subjects;
 }
 public void setSubjects(List<SubjectsBean> subjects) {
  this.subjects = subjects;
 }
 public static class SubjectsBean {
  
  private RatingBean rating;
  private String title;
  private int collect_count;
  private String original_title;
  private String subtype;
  private String year;
  private ImagesBean images;
  private String alt;
  private String id;
  private List<String> genres;
  private List<CastsBean> casts;
  private List<DirectorsBean> directors;
  public RatingBean getRating() {
   return rating;
  }
  public void setRating(RatingBean rating) {
   this.rating = rating;
  }
  public String getTitle() {
   return title;
  }
  public void setTitle(String title) {
   this.title = title;
  }
  public int getCollect_count() {
   return collect_count;
  }
  public void setCollect_count(int collect_count) {
   this.collect_count = collect_count;
  }
  public String getOriginal_title() {
   return original_title;
  }
  public void setOriginal_title(String original_title) {
   this.original_title = original_title;
  }
  public String getSubtype() {
   return subtype;
  }
  public void setSubtype(String subtype) {
   this.subtype = subtype;
  }
  public String getYear() {
   return year;
  }
  public void setYear(String year) {
   this.year = year;
  }
  public ImagesBean getImages() {
   return images;
  }
  public void setImages(ImagesBean images) {
   this.images = images;
  }
  public String getAlt() {
   return alt;
  }
  public void setAlt(String alt) {
   this.alt = alt;
  }
  public String getId() {
   return id;
  }
  public void setId(String id) {
   this.id = id;
  }
  public List<String> getGenres() {
   return genres;
  }
  public void setGenres(List<String> genres) {
   this.genres = genres;
  }
  public List<CastsBean> getCasts() {
   return casts;
  }
  public void setCasts(List<CastsBean> casts) {
   this.casts = casts;
  }
  public List<DirectorsBean> getDirectors() {
   return directors;
  }
  public void setDirectors(List<DirectorsBean> directors) {
   this.directors = directors;
  }
  public static class RatingBean {
   
   private int max;
   private double average;
   private String stars;
   private int min;
   public int getMax() {
    return max;
   }
   public void setMax(int max) {
    this.max = max;
   }
   public double getAverage() {
    return average;
   }
   public void setAverage(double average) {
    this.average = average;
   }
   public String getStars() {
    return stars;
   }
   public void setStars(String stars) {
    this.stars = stars;
   }
   public int getMin() {
    return min;
   }
   public void setMin(int min) {
    this.min = min;
   }
  }
  public static class ImagesBean {
   
   private String small;
   private String large;
   private String medium;
   public String getSmall() {
    return small;
   }
   public void setSmall(String small) {
    this.small = small;
   }
   public String getLarge() {
    return large;
   }
   public void setLarge(String large) {
    this.large = large;
   }
   public String getMedium() {
    return medium;
   }
   public void setMedium(String medium) {
    this.medium = medium;
   }
  }
  public static class CastsBean {
   
   private String alt;
   private AvatarsBean avatars;
   private String name;
   private String id;
   public String getAlt() {
    return alt;
   }
   public void setAlt(String alt) {
    this.alt = alt;
   }
   public AvatarsBean getAvatars() {
    return avatars;
   }
   public void setAvatars(AvatarsBean avatars) {
    this.avatars = avatars;
   }
   public String getName() {
    return name;
   }
   public void setName(String name) {
    this.name = name;
   }
   public String getId() {
    return id;
   }
   public void setId(String id) {
    this.id = id;
   }
   public static class AvatarsBean {
    
    private String small;
    private String large;
    private String medium;
    public String getSmall() {
     return small;
    }
    public void setSmall(String small) {
     this.small = small;
    }
    public String getLarge() {
     return large;
    }
    public void setLarge(String large) {
     this.large = large;
    }
    public String getMedium() {
     return medium;
    }
    public void setMedium(String medium) {
     this.medium = medium;
    }
   }
  }
  public static class DirectorsBean {
   
   private String alt;
   private AvatarsBeanX avatars;
   private String name;
   private String id;
   public String getAlt() {
    return alt;
   }
   public void setAlt(String alt) {
    this.alt = alt;
   }
   public AvatarsBeanX getAvatars() {
    return avatars;
   }
   public void setAvatars(AvatarsBeanX avatars) {
    this.avatars = avatars;
   }
   public String getName() {
    return name;
   }
   public void setName(String name) {
    this.name = name;
   }
   public String getId() {
    return id;
   }
   public void setId(String id) {
    this.id = id;
   }
   public static class AvatarsBeanX {
    
    private String small;
    private String large;
    private String medium;
    public String getSmall() {
     return small;
    }
    public void setSmall(String small) {
     this.small = small;
    }
    public String getLarge() {
     return large;
    }
    public void setLarge(String large) {
     this.large = large;
    }
    public String getMedium() {
     return medium;
    }
    public void setMedium(String medium) {
     this.medium = medium;
    }
   }
  }
 }
}

package ledon.com.retrofitdemo.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import java.util.List;
import ledon.com.retrofitdemo.MovieBean;
import ledon.com.retrofitdemo.R;

public class MovieAdapter extends BaseAdapter {
 private Context context;
 private List<MovieBean.SubjectsBean> lists;
 public MovieAdapter(Context context, List<MovieBean.SubjectsBean> lists) {
  this.context = context;
  this.lists = lists;
 }
 @Override
 public int getCount() {
  System.out.println("集合大小:"+lists.size());
  return lists.size();
 }
 @Override
 public Object getItem(int i) {
  return null;
 }
 @Override
 public long getItemId(int i) {
  return 0;
 }
 @Override
 public View getView(int i, View convertView, ViewGroup viewGroup) {
  ViewHolder holder;
  if (convertView==null){
   convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
   holder=new ViewHolder();
   holder.tv_title= (TextView) convertView.findViewById(R.id.tv_title);
   holder.tv_name= (TextView) convertView.findViewById(R.id.tv_name);
   convertView.setTag(holder);
  }else {
   holder= (ViewHolder) convertView.getTag();
  }
  //MovieBean.SubjectsBean subjectsBean = lists.get(i).getSubjects().get(i);
  holder.tv_title.setText(lists.get(i).getTitle());
//  holder.tv_name.setText(lists.get(i).getCasts().get(i).getName());
  return convertView;
 }
 static class ViewHolder{
  TextView tv_title;
  TextView tv_name;
 }
}

package ledon.com.retrofitdemo.api;
import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.security.auth.Subject;
import ledon.com.retrofitdemo.MovieBean;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;

public class HttpMethods {
 public static final String BASE_URL="https://api.douban.com/v2/movie/";
 private static final int DEFAULT_TIMEOUT=5;
 private Retrofit retrofit;
 private MovieService movieService;
 //私有化构造方法
 private HttpMethods(){
  //手动创建一个okhttpClient并设置超时时间
  OkHttpClient.Builder builder = new OkHttpClient.Builder();
  builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
  retrofit=new Retrofit.Builder()
    .client(builder.build())
    .addConverterFactory(GsonConverterFactory.create())
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .baseUrl(BASE_URL)
    .build();
  movieService = retrofit.create(MovieService.class);
 }
 //在访问httpmethods时候创建单例
 private static class SingletonHolder{
  private static final HttpMethods INSTANCE=new HttpMethods();
 }
  //获取单例
 public static HttpMethods getInstance(){
  return SingletonHolder.INSTANCE;
 }
 public void getTopMovie(Subscriber<MovieBean>subscriber, int start, int count){
  movieService.getTopMovie(start, count)
    .subscribeOn(Schedulers.io())
    .unsubscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(subscriber);
  
 }
 private class HttpResultFunc<T> implements Func1<HttpResult<T>,T>{
  @Override
  public T call(HttpResult<T> httpResult) {
   return httpResult.getSubjects();
  }
 }
}

package ledon.com.retrofitdemo.api;
import ledon.com.retrofitdemo.MovieBean;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
import rx.Observable;

public interface MovieService {
 @GET("top250")
 Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);
}

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical">
 <TextView
  android:layout_gravity="center"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:id="@+id/tv_title"
  android:textSize="20dp"
  android:text="这个杀手不太冷"/>
 <ImageView
  android:layout_gravity="center"
  android:id="@+id/iv"
  android:layout_width="100dp"
  android:layout_height="100dp"
  android:class="lazy" data-src="@mipmap/ic_launcher"/>
<TextView
 android:id="@+id/tv_name"
 android:layout_gravity="center"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:textSize="20dp"
 android:text="主演:呵呵哈哈哈"/>
</LinearLayout>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:深入浅出RxJava+Retrofit+OkHttp网络请求Kotlin结合Rxjava+Retrofit实现极简网络请求的方法RxJava+Retrofit实现网络请求封装的方法


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Android Retrofit和Rxjava的网络请求

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Android Retrofit和Rxjava的网络请求

Android Retrofit和Rxjava的网络请求 去年的时候好多公司就已经使用Rxjava和Retrofit了,最近自自己学习了一下,感觉真的是很好用,让自己的网络请求变得更简单了,而且封装性极强。首先做一下准备工作,导入需要引用
2022-06-06

如何在Android中利用Retrofit与Rxjava实现网络请求

今天就跟大家聊聊有关如何在Android中利用Retrofit与Rxjava实现网络请求,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先做一下准备工作,导入需要引用的文件compi
2023-05-31

Kotlin结合Rxjava+Retrofit实现极简网络请求的方法

前言因为最近正在写的项目集成了两个网络请求框架(Volley and Retrofit)对比之下也是选择了Retrofit。既然选择那自然要让自己以后开发更加省力(就是懒)。于是我在Retrofit中加入了Rxjava,这也是当下蛮流行的一
2023-05-30

Android网络请求框架Retrofit详解

介绍:Retrofit 是Square公司开发的一款针对Android网络请求的框架,Retrofit2底层基于OkHttp实现的,OkHttp现在已经得到Google官方认可,大量的app都采用OkHttp做网络请求。本文使用Retrof
2023-05-30

Retrofit网络请求和响应处理源码分析

本篇内容主要讲解“Retrofit网络请求和响应处理源码分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Retrofit网络请求和响应处理源码分析”吧!网络请求在使用 Retrofit 发起网
2023-07-05

Retrofit网络请求和响应处理重点分析讲解

这篇文章主要介绍了Retrofit网络请求和响应处理重点分析,在使用Retrofit发起网络请求时,我们可以通过定义一个接口并使用Retrofit的注解来描述这个接口中的请求,Retrofit会自动生成一个实现该接口的代理对象
2023-03-10

Retrofit创建网络请求接口实例过程

这篇文章主要为大家介绍了Retrofit创建网络请求接口实例过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-12-19

Retrofit网络请求框架之注解解析和动态代理

这篇文章主要介绍了Retrofit网络请求框架之注解解析和动态代理,Retrofit是目前Android平台上比较流行的网络请求框架之一,它提供了一种简洁、灵活的方式来处理HTTP请求和响应
2023-03-10

Android网络请求之OkHttp

OkHttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary)。用于替代HttpUrlConnection和Ap
2022-06-06

vue网络请求方案原生网络请求和js网络请求库的示例分析

这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准) // 没有promise时
2023-06-21

Android实现网络请求方法

Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。 ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之妙,但是安卓软件毕竟的安装在我们手机上的
2023-08-19

Android网络请求库android-async-http介绍

Android网络请求库:android-async-http开源框架 之前有一篇描述了客户端请求服务器端的方式—Post的请求方式。今天介绍一个请求服务器的一个开源库—android-async-http库。 1. 概念: 这个网络
2022-06-06

Android HTTP网络请求的异步实现

前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个类来实现,外部其它模块只要调用和处理回调函数即可。外部模块和网络
2022-06-06

Android Volley 异步网络请求分析

Volley下载Google I/O 2013 大会上发布的 Android 异步网络请求框架和图片加载框架。试用场景:适合数据量小,通信频繁的网络操作。git clone https://android.googlesource.com/
2022-06-06

Android中OkHttp是如何做网络请求的

小编给大家分享一下Android中OkHttp是如何做网络请求的,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是OKhttp简单来说 OkHttp 就是一个客户端用来发送 HTTP 消息并对服务器的响应做出处理的应用层
2023-06-14

Retrofit网络请求框架之注解解析和动态代理方法怎么使用

本篇内容介绍了“Retrofit网络请求框架之注解解析和动态代理方法怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Retrofit是
2023-07-05

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录