初始化一个接口
public class Api {
public static final String BASE_PATH = "https://api.tianapi.com";
}
初始化Fresco的
public class MyApp extends Application{
public static Context context;
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
context=this;
}
}
创建一个Retrofit接口以便于用来网络连接用
public interface Services {
/**
* 结合Retrofit+RxJava
* http://service.meiyinkeqiu.com/service/ads/cptj
* @param
* @return
*/
@GET("/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10")
Observable<Homes> getJson();
}
创建一个适配器来进行布局加载数据
public class Myadapter extends RecyclerView.Adapter<Myadapter.MyHolder> {
List<Homes.NewslistBean> newslistBeen;
Context context;
SimpleDraweeView image;
public Myadapter(Context context, List<Homes.NewslistBean> newslistBeen) {
this.context = context;
this.newslistBeen = newslistBeen;
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyHolder holder = new MyHolder(LayoutInflater.from(context).inflate(R.layout.item_home, parent, false));
return holder;
}
@Override
public void onBindViewHolder(MyHolder holder, int position) {
holder.textView.setText(newslistBeen.get(position).getTitle());
Uri uri = Uri.parse(newslistBeen.get(position).getPicUrl());
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(uri)
.setAutoPlayAnimations(true)
.build();
image.setController(controller);
}
@Override
public int getItemCount() {
return newslistBeen.size();
}
class MyHolder extends RecyclerView.ViewHolder {
TextView textView;
public MyHolder(View itemView) {
super(itemView);
image = itemView.findViewById(R.id.image);
textView = itemView.findViewById(R.id.text);
}
}
创建一个Adaper 的model的接口
public interface Imodel {
void getAdapter();
}
在实现model类里面进行网络请求等操作
public class Mymodel implements Imodel{
private DataOverListener mDataOverListener;
@Override
public void getAdapter() {
Retrofit retrofit = new Retrofit.Builder().baseUrl(Api.BASE_PATH).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
Services services = retrofit.create(Services.class);
Observable<Homes> observable = services.getJson();
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Homes>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Homes myBean) {
Myadapter myadapter = new Myadapter(MyApp.context, myBean.getNewslist());
mDataOverListener.dataOver(myadapter);
}
});
}
public interface DataOverListener{
void dataOver(Myadapter myadapter);
}
public void setmDataOverListener(DataOverListener mDataOverListener) {
this.mDataOverListener = mDataOverListener;
}
}
在presenter里面进行一些简单的连接View 和 model操作
public class MyPresenter {
Mymodel imodel;
Iview iview;
public MyPresenter(Iview iview) {
this.iview = iview;
this.imodel = new Mymodel();
}
public void start(){
imodel.getAdapter();
imodel.setmDataOverListener(new Mymodel.DataOverListener() {
@Override
public void dataOver(Myadapter myadapter) {
iview.adapter(myadapter);
}
});
}
}
创建一个View的接口
public interface Iview {
void adapter(Myadapter myadapter);
}
下面这个就是mainactivity里面进行的一些操作
public class MainActivity extends AppCompatActivity implements Iview{
RecyclerView recyclerView;
MyPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = (RecyclerView) findViewById(R.id.recycler);
presenter = new MyPresenter(MainActivity.this);
presenter.start();
}
@Override
public void adapter(Myadapter myadapter) {
recyclerView.setLayoutManager(new GridLayoutManager(MyApp.context,2));
recyclerView.setAdapter(myadapter);
}
}
还有下面要用到的一些依赖什么的
compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.facebook.fresco:fresco:0.11.0'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.android.support:mediarouter-v7:25.0.0'
compile 'com.android.support:appcompat-v7:25.0.0'
compile 'com.android.support:recyclerview-v7:25.0.0'
子布局
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/image"
android:layout_width="200dp"
android:layout_height="200dp" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />