GetDataInterface
public interface GetDataInterface { @GET("/toutiao/index") Callget(@Query("key") String key); @FormUrlEncoded @POST("/toutiao/index") Call post(@Field("key") String key); }
MyApi
public class MyApi extends Application{ //设置公共变量 public static DaoSession session; public static GetDataInterface request; @Override public void onCreate() { super.onCreate(); //1. 用于全局配置初始化Fresco 图片加载 Fresco.initialize(this); //2. 用于全局配置初始化Retrofit 网络请求 //构建Retrofit类,初始化参数 Retrofit retrofit = new Retrofit.Builder() .baseUrl(HttpUtils.goods_url) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) .build(); //创建网络请求接口实例 request = retrofit.create(GetDataInterface.class); //3. 用于全局配置初始化GreenDao数据库 // DaoMaster.DevOpenHelper database = new DaoMaster.DevOpenHelper(this, "database"); // Database db = database.getWritableDb(); //获取能读能写的数据库 // session = new DaoMaster(db).newSession(); } }
public class HttpUtils { public static String goods_url = "http://v.juhe.cn"; }
ModelCallBack
public interface ModelCallBack {
public void onSuccess(UserBean bean);
public void onError(Exception e);
}
2.
MyModel
public class MyModel { /** * get请求 * @param callBack */ public void getData(final ModelCallBack callBack){ //设置接口请求的key值 Callcall = MyApi.request.get("c4479ad58f41e7f78a8fa073d0b1f1b5"); call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { //获取响应的数据,保存在数据库中 UserBean bean = response.body(); // MyApi.session.getUserDao().insertInTx(bean.getResult().getData()); callBack.onSuccess(bean); } @Override public void onFailure(Call call, Throwable t) { //请求失败时返回数据 callBack.onError(new Exception("")); } }); } /** * post请求 * @param callBack */ public void postData(final ModelCallBack callBack){ //设置接口请求的key值 Call call = MyApi.request.post("c4479ad58f41e7f78a8fa073d0b1f1b5"); //发起异步请求 call.enqueue(new Callback () { @Override public void onResponse(Call call, Response response) { UserBean bean= response.body(); //MyApi.session.getUserDao().insertInTx(bean.getResult().getData()); callBack.onSuccess(bean); } @Override public void onFailure(Call call, Throwable t) { callBack.onError(new Exception("")); } }); } }
MyPresenter
public class MyPresenter {
private MyView myView;
private MyModel myModel;
public MyPresenter(MyView myView) {
this.myView = myView;
this.myModel = new MyModel();
}
public void get(){
myModel.getData(new ModelCallBack() {
@Override
public void onSuccess(UserBean bean) {
if(myView != null){
myView.onSuccess(bean);
}
}
@Override
public void onError(Exception e) {
if(myView != null){
myView.onError(e);
}
}
});
}
/**
* post请求数据交互
*/
public void post() {
myModel.postData(new ModelCallBack() {
@Override
public void onSuccess(UserBean bean) {
//数据交互时,为防止内存泄露,设置view层数据为空
if (myView != null){
myView.onSuccess(bean);
}
}
@Override
public void onError(Exception e) {
//数据交互时,为防止内存泄露,设置view层数据为空
if (myView != null){
myView.onError(e);
}
}
});
}
}
public interface MyView { public void onSuccess(UserBean bean); public void onError(Exception e); }
public class MainActivity extends AppCompatActivity implements MyView{ @BindView(R.id.recyclerView) RecyclerView recyclerView; private MyPresenter presenter; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); } private void initData() { //创建Presenter层实例,与view层交互 presenter = new MyPresenter(this); //get请求方式 presenter.get(); //设置布局管理器以及布局适配器 LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false); adapter = new MyAdapter(this); recyclerView.setLayoutManager(manager); recyclerView.setAdapter(adapter); //遍历查询数据库中的所有数据 //Listlist = MyApi.session.getUserDao().loadAll(); //for (DataBean listBean : list){ // System.out.println("查询:"+listBean.toString()); //} } @Override public void onSuccess(UserBean bean) { adapter.addData(bean); } @Override public void onError(Exception e) { System.out.println("数据出错:"+e); } }
public class MyAdapter extends RecyclerView.Adapter{ private Context context; private List list; public MyAdapter(Context context) { this.context = context; } //添加数据 public void addData(UserBean bean) { if (list == null) { list = new ArrayList<>(); } list.addAll(bean.getResult().getData()); notifyDataSetChanged(); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { //添加布局视图 View view = View.inflate(context, R.layout.adapter, null); return new MyViewHolder(view); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.title.setText(list.get(position).getTitle()); DraweeController controller = Fresco.newDraweeControllerBuilder() .setUri(list.get(position).getThumbnail_pic_s()) .setOldController(holder.draweeView.getController())//内存优化 .setAutoPlayAnimations(true) .build(); holder.draweeView.setController(controller); } @Override public int getItemCount() { return list == null ?0:list.size(); } class MyViewHolder extends RecyclerView.ViewHolder{ @BindView(R.id.draweeView) SimpleDraweeView draweeView; @BindView(R.id.title) TextView title; public MyViewHolder(View itemView) { super(itemView); ButterKnife.bind(this,itemView); } } }
<LinearLayout android:orientation="horizontal" android:padding="6dp" xmlns:fresco="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/draweeView" android:layout_width="100dp" android:layout_height="100dp" android:layout_marginLeft="6dp" fresco:placeholderImage="@drawable/app_default" fresco:placeholderImageScaleType="fitCenter" fresco:actualImageScaleType="focusCrop" fresco:failureImage="@drawable/load_error_image" fresco:failureImageScaleType="fitCenter" fresco:roundAsCircle="true"/> <TextView android:id="@+id/title" android:textSize="18sp" android:textStyle="bold" android:layout_marginLeft="6dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical"/> LinearLayout>
<uses-permission android:name="android.permission.INTERNET"/>
<application
之后Make Project就会自动创建Dao包