public interface ApiService {
//http://api.expoon.com/AppNews/getNewsList/type/1/p/1
/* @GET("type/1/p/1")
Observable<News> getHomes();*/
//http://api.svipmovie.com/front/columns/getVideoList.do?catalogId=402834815584e463015584e539330016&pnum=1
@POST
Observable<News> getHomess(@Url String url, @QueryMap Map<String, String> map);
}
对应的相关依赖
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.google.code.gson:gson:2.8.2'
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
compile 'com.android.support:recyclerview-v7:24.0.0'
compile 'com.jakewharton:butterknife:7.0.1'
//静态图片
compile 'com.facebook.fresco:fresco:0.12.0'
// 支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
compile 'com.android.support:design:23.4.0'
compile 'com.youth.banner:banner:1.4.9'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.squareup.okio:okio:1.5.0'
compile(name: 'ijkplayer-java-release', ext: 'aar') /**编译ijkplayer-java-release.aar文件*/
//对应的相关权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
public class Api {
/* public static final String HOME_URL="http://api.expoon.com/AppNews/getNewsList/";*/
//http://api.svipmovie.com/front/columns/getVideoList.do?catalogId=402834815584e463015584e539330016&pnum=1
public static final String HOME_URL="http://api.svipmovie.com/front/";
}
public class MainActivity extends AppCompatActivity implements IView {
RecyclerView recycler;
HomeAdaper homeAdaper;
UserPresenter userpresenter;
Banner banner;
ArrayList mlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
banner = (Banner)findViewById(R.id.banner);
recycler = (RecyclerView)findViewById(R.id.recycler) ;
recycler.setLayoutManager(new LinearLayoutManager(this));
userpresenter = new UserPresenter(this);
userpresenter.getUser(Api.HOME_URL);
}
@Override
public void getNews(List<News.RetBean.ListBean> list) {
recycler.setAdapter(homeAdaper = new HomeAdaper(this,list));
mlist = new ArrayList();
for (int i = 0; i < list.size(); i++) {
mlist.add(list.get(i).getPic());
}
banner.setImageLoader(new GlideImageLoader());
banner.setImages(mlist);
banner.start();
homeAdaper.setOnItemClickLitener(new HomeAdaper.OnItemClickLitener()
{
@Override
public void onItemClick(View view, int position)
{
Toast.makeText(MainActivity.this, position + " click",
Toast.LENGTH_SHORT).show();
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);
}
@Override
public void onItemLongClick(View view, int position)
{
Toast.makeText(MainActivity.this, position + " long click",
Toast.LENGTH_SHORT).show();
}
});
}
}
//下面就是model层 作用是 好说操作 ,网络请求数据
public interface IModel {
void getUrl(String url);
}
public class UserModel implements IModel {
List<News.RetBean.ListBean> list;
private OnFinish onFinish;
public interface OnFinish{
void OnFinishListener(List<News.RetBean.ListBean> list);
}
public void setOnFinish(OnFinish onFinish){
this.onFinish = onFinish;
}
@Override
public void getUrl(String url) {
list = new ArrayList<>();
HashMap<String,String> map = new HashMap<>();
map.put("catalogId","402834815584e463015584e539330016");
map.put("pnum","1");
Retrofit retrofit = new Retrofit.Builder().baseUrl(url).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(RxJavaCallAdapterFactory.create()).build();
ApiService apiService = retrofit.create(ApiService.class);
Observable<News> homes = apiService.getHomess(url+"columns/getVideoList.do",map);
homes.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<News>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.d("mylog", "onNext: "+"失败");
e.printStackTrace();
}
@Override
public void onNext(News newss) {
list = newss.getRet().getList();
onFinish.OnFinishListener(UserModel.this.list);
Log.d("mylog", "onNext: "+"成功");
}
});
}
}
//下面就是presenter层 来进行 实现它的方法和 用来交互两层 联系 处理业务
public class UserPresenter implements UserModel.OnFinish {
private final IView userView;
private final UserModel userModel;
public UserPresenter(IView userView) {
this.userView = userView;
this.userModel = new UserModel();
userModel.setOnFinish(this);
}
public void getUser(String url){
userModel.getUrl(url);
}
@Override
public void OnFinishListener(List<News.RetBean.ListBean> list) {
userView.getNews(list);
}
}
对应的view 它是视图层 用来实现对应页面接收用户进行联系
public interface IView {
void getNews(List<News.RetBean.ListBean> list);
}
对应的单立模式 创建一个实列 初始化 注意事项 要在对应的清单文件中
android:name=".utils.Myapp"
public class Myapp extends Application{
public static Myapp mInstance;
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
Fresco.initialize(this);
}
public static Myapp getInstance() {
return mInstance;
}
}
下面就是就是对应的布局
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="com.eightgroup.dsxyuelao.MainActivity">
<com.youth.banner.Banner
android:id="@+id/banner"
android:layout_width="wrap_content"
android:layout_height="250dp">
</com.youth.banner.Banner>
<android.support.v7.widget.RecyclerView
android:layout_below="@+id/banner"
android:id="@+id/recycler"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
对应的适配器的子布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
xmlns:fresco="http://schemas.android.com/apk/res-auto">
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/img"
android:layout_width="100dp"
android:layout_height="100dp"
fresco:placeholderImage="@mipmap/ic_launcher"
fresco:placeholderImageScaleType="focusCrop"
/>
<TextView
android:gravity="center"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
//主要的就是适配器进行的的上下文 有参构造 ,还有 返回参数 和三个方法
public class HomeAdaper extends RecyclerView.Adapter {
Context context;
List<News.RetBean.ListBean> list;
public HomeAdaper(Context context, List<News.RetBean.ListBean> list) {
this.context = context;
this.list = list;
}
public interface OnItemClickLitener
{
void onItemClick(View view, int position);
void onItemLongClick(View view , int position);
}
private OnItemClickLitener mOnItemClickLitener;
public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
{
this.mOnItemClickLitener = mOnItemClickLitener;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
MyViewHolder holder1 = new MyViewHolder(LayoutInflater.from(
context).inflate(R.layout.listview, parent,
false));
return holder1;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
MyViewHolder holder1 = (MyViewHolder) holder;
holder1.tv.setText(list.get(position).getTitle());
holder1.draweeView1.setImageURI(list.get(position).getPic());
//创建DraweeController
DraweeController controller = Fresco.newDraweeControllerBuilder()
//重试之后要加载的图片URI地址
.setUri(list.get(position).getPic())
//设置点击重试是否开启
.setTapToRetryEnabled(true)
//动画播放
.setAutoPlayAnimations(true)
//设置旧的Controller
.setOldController(holder1.draweeView1.getController())
//构建
.build();
//设置DraweeController
holder1.draweeView1.setController(controller);
if (mOnItemClickLitener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getLayoutPosition();
mOnItemClickLitener.onItemClick(holder.itemView, pos);
}
});
}
}
@Override
public int getItemCount() {
return list.size();
}
class MyViewHolder extends RecyclerView.ViewHolder {
SimpleDraweeView draweeView1;
TextView tv;
public MyViewHolder(View view) {
super(view);
tv = (TextView) view.findViewById(R.id.tv);
draweeView1 = (SimpleDraweeView) view.findViewById(R.id.img);
}
}
}
实现banner轮播图
public class GlideImageLoader extends ImageLoader {
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load(path).into(imageView);
}
}