android MVP+Retrofit2.0与RxJava网络请求数据,listview展示
2017-11-05 18:20
786 查看
android Retrofit2.0
Retrofit 电影:
一个用于Android和Java平台的类型安全的网络框架(是一套注解形式的网络请求封装库,REST API协议),Retrofit是一个Square开发的类型安全的REST安卓客户端请求库,
为网络认证、API请求以及用OkHttp发送网络请求提供了强大的框架 。
Retrofit 把REST API返回的数据转化为Java对象,就像ORM框架那样,把数据库内的存储的数据转化为相应的Java bean对象。
REST(Resources Representational State Transfer–资源表现层状态转化)是一组架构约束条件和原则。
RESTful架构都满足以下规则:
1、每一个URI代表一种资源;
2、客户端和服务器之间,传递这种资源的某种表现层(“资源”具体呈现出来的形式,比如.txt,.png,.jpg) ;
3、客户端通过四个HTTP动词(GET用来获取资源,POST用来新建或更新资源,PUT用来更新资源,DELETE用来删除资源),对服务器端资源进行操作,实现”表现层状态转化”。
这里附带::android模拟数据实现全选反选批量删除:http://blog.csdn.net/qq_37199105/article/details/78463034
有兴趣的同学可以试试编辑数据。
1.build.gradle中添加依赖
Retrofit 电影:
https://api.douban.com/v2/movie/top250?start=0&count=10
一个用于Android和Java平台的类型安全的网络框架(是一套注解形式的网络请求封装库,REST API协议),Retrofit是一个Square开发的类型安全的REST安卓客户端请求库,
为网络认证、API请求以及用OkHttp发送网络请求提供了强大的框架 。
Retrofit 把REST API返回的数据转化为Java对象,就像ORM框架那样,把数据库内的存储的数据转化为相应的Java bean对象。
REST(Resources Representational State Transfer–资源表现层状态转化)是一组架构约束条件和原则。
RESTful架构都满足以下规则:
1、每一个URI代表一种资源;
2、客户端和服务器之间,传递这种资源的某种表现层(“资源”具体呈现出来的形式,比如.txt,.png,.jpg) ;
3、客户端通过四个HTTP动词(GET用来获取资源,POST用来新建或更新资源,PUT用来更新资源,DELETE用来删除资源),对服务器端资源进行操作,实现”表现层状态转化”。
这里附带::android模拟数据实现全选反选批量删除:http://blog.csdn.net/qq_37199105/article/details/78463034
有兴趣的同学可以试试编辑数据。
1.build.gradle中添加依赖
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'
//gson解析数据
compile 'com.google.code.gson:gson:2.6.2'
//注解 compile 'com.jakewharton:butterknife:7.0.1'
//图片 compile 'com.github.bumptech.glide:glide:3.7.0'
2.网络权限
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
3.activity_main.xml布局,
<ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/id1" android:layout_alignParentLeft="true" < 10068 span style="color:#008000;">android:layout_alignParentStart="true"> </ListView>
item.xml子布局
<ImageView android:layout_gravity="center" android:id="@+id/iv" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/tv_title" android:layout_marginTop="15dp" android:textSize="20dp" android:text="这个杀手不太冷" /> <TextView android:id="@+id/tv_name" android:layout_marginTop="15dp" android:layout_gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20dp" android:text="蒂姆·罗宾斯" /> </LinearLayout>
4.创建一个been类(SuperClass) ,这是接口地址(
http://api.expoon.com/
AppNews/getNewsList/type/1/p/1)
5.Api和Apiserver
public class Api { /*public static final String URL="http://tingapi.ting.baidu.com/";*/ public static final String URL="http://api.expoon.com/"; }
public interface ApiService { /*@GET("v1/restserver/ting?method=baidu.ting.billboa.billList&type=1&size=10&offset=0") Observable<Song> getSong();*/ @GET("AppNews/getNewsList/type/1/p/1") Observable<SuperClass> getHome(); }
6.View类
public interface Iview { void setUser(List<SuperClass.DataBean> list); }
7.presenter类
public class Upresenter implements UserModel.OnFinish{ private final Iview userview; private final UserModel userModel; public Upresenter(Iview userview) { this.userview = userview; this.userModel = new UserModel(); userModel.setOnFinish(this); } public void setJson(String url){ userModel.getJson(url); } @Override public void OnfinishListener(List<SuperClass.DataBean> list) { userview.setUser(list); } }
8.model类
先写一个接口
public interface Imodel { void getJson(String url); }
public class UserModel implements Imodel{ List<SuperClass.DataBean> list = new ArrayList<>(); private OnFinish onFinish; public interface OnFinish{ void OnfinishListener(List<SuperClass.DataBean> list); } public void setOnFinish(OnFinish finish){ this.onFinish = finish; } @Override public void getJson(String url) { //手动创建一个okhttpClient并设置超时时间 OkHttpClient okHttpClient = new OkHttpClient.Builder() //添加拦截器 .addInterceptor(new LoggingInterceptor()) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .client(okHttpClient) .build(); //创建动态代理 ApiService apiService = retrofit.create(ApiService.class); Observable<SuperClass> home = apiService.getHome(); home.subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Observer<SuperClass>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(SuperClass dataBean) { list = (ArrayList<SuperClass.DataBean>) dataBean.getData(); onFinish.OnfinishListener(list); } }); } }
9.Adapter类
public class HomeAdapter extends BaseAdapter { private List<SuperClass.DataBean> lists; private Context context; public HomeAdapter(Context context,List<SuperClass.DataBean> lists) { this.context = context; this.lists = lists; } @Override public int getCount() { return lists == null ? 0 : lists.size(); } @Override public Object getItem(int i) { return lists.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(final int i, View view, ViewGroup viewGroup) { ViewHolder holder; if (view == null){ view = LayoutInflater.from(context).inflate(R.layout.item, null); holder=new ViewHolder(); holder.tv_title= (TextView) view.findViewById(R.id.tv_title); holder.tv_name= (TextView) view.findViewById(R.id.tv_name); holder.image = (ImageView) view.findViewById(R.id.iv); view.setTag(holder); }else { holder= (ViewHolder) view.getTag(); } holder.tv_title.setText(lists.get(i).getNews_title()); holder.tv_name.setText(lists.get(i).getNews_summary()); Glide.with(context).load(lists.get(i).getPic_url()).into(((ViewHolder) holder).image); return view; } static class ViewHolder{ TextView tv_title; TextView tv_name; ImageView image; } }
10.MainActivity
public class MainActivity extends AppCompatActivity implements Iview { Upresenter upresenter; private ListView listView; private List<SuperClass.DataBean> list; private HomeAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); upresenter = new Upresenter(this); upresenter.setJson(Api.URL); listView = (ListView) findViewById(R.id.listview); } @Override public void setUser(List<SuperClass.DataBean> list) { adapter = new HomeAdapter(MainActivity.this,list); listView.setAdapter(adapter); } }
相关文章推荐
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- 使用MVP+Retrofit+RxJava 图片加载使用Fresco 做网络请求并展示数据
- MVP+Retrofit+RxJava请求网络数据实现RecyclerView多条目展示
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android_请求网络数据展示到Listview
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android三大设计模式之一------------------MVP设计模式(包括rxjava+retrofit网络请求框架)
- [置顶] Android 一步步搭建MVP+Retrofit+RxJava网络请求框架
- Retrofit+RxJava+MVP网络请求数据
- Android Retrofit2.0配合RxJava2.0请求网络
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android_Retrofit+RxJava+MVP+网络请求多次判断
- Retrofit2.0+RxJava+RxAndroid——强强联合的网络请求框架
- Android 框架设计Demo,一个简单的MVP示例搜索功能,网络请求用Retrofit+RxJava实现
- Kotlin新语言使用RxJava+Retrofit请求网络数据+lambda表达式+RecyclerView展示+Glide展示图片
- MVP+retrofit和Rxjava请求数据+recyclerview展示
- 简单的MVP+Retrofit+RxJava请求网络数据(一)
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架
- Android 搭建MVP+Retrofit+RxJava网络请求框架