我们要需要的依赖和相关的导的依赖这次全部发出来!
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.okhttp3:okhttp:3.1.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta3'
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
控件就不多说了 一个
RecyclerView 和相关的里面litm的自己编写
首先我做的这个接口必须要有拦截器
**
* 网络拦截器
*/
public class LoggingInterceptor implements Interceptor {
private static final String UA = "User-Agent";
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader(UA, makeUA())
.build();
return chain.proceed(request);
}
private String makeUA() {
String s = Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
return Build.BRAND + "/" + Build.MODEL + "/" + Build.VERSION.RELEASE;
}
}
定义的接口
public interface NetDataCallBack {
void Suesses(Bean baseBean);
void Error(String msg);
}
关键的OKhttp网络请求类
package com.example.retrofit;
import android.content.Context;
import android.util.Log;
import com.google.gson.Gson;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
public class OkHttpUntils {
private Context context ;
private static OkHttpUntils okHttpUntils ;
private OkHttpUntils(Context context){
this.context = context ;
}
public static OkHttpUntils getOkHttpUntils(Context context){
if(okHttpUntils==null){
synchronized (OkHttpUntils.class){
if(okHttpUntils==null){
okHttpUntils = new OkHttpUntils(context);
}
}
}
return okHttpUntils;
}
public void get(String url, final Class clazz, final NetDataCallBack netClickListener){
Request request = new Request.Builder()
.get()
.url(url)
.build();
OkHttpClient.Builder okbuild = new OkHttpClient.Builder();
okbuild.addInterceptor(new LoggingInterceptor())
.build()
.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String string = response.body().string();
Observable.create(new Observable.OnSubscribe<Bean>() {
@Override
public void call(Subscriber<? super Bean> subscriber) {
Gson gson = new Gson();
Bean o = (Bean) gson.fromJson(string, clazz);
subscriber.onNext(o);
subscriber.onCompleted();
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Bean>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Bean baseBean) {
netClickListener.Suesses(baseBean);
Log.d("aaa",""+baseBean.getSong_list().get(0).getTitle());
}
});
}
});
}
}
然后就是适配器类
package com.example.retrofit;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHondler>{
Context context;
List<Bean.SongListBean> list;
public Adapter(Context context, List<Bean.SongListBean> list) {
this.context = context;
this.list = list;
}
@Override
public MyViewHondler onCreateViewHolder(ViewGroup parent, int viewType) {
View view=View.inflate(context,R.layout.recyclerview_item1,null);
MyViewHondler myViewHondler=new MyViewHondler(view);
return myViewHondler;
}
@Override
public void onBindViewHolder(MyViewHondler holder, int position) {
ImageLoader.getInstance().displayImage(list.get(position).getPic_small(),holder.im,Myapp.getDisk());
holder.tv.setText(list.get(position).getTitle());
}
@Override
public int getItemCount() {
return list.size();
}
public class MyViewHondler extends RecyclerView.ViewHolder{
ImageView im;
TextView tv;
public MyViewHondler(View itemView) {
super(itemView);
im= itemView.findViewById(R.id.recyclerview_img);
tv= itemView.findViewById(R.id.recyclerview_text);
}
}
}
MainActivity的编写
package com.example.retrofit;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fangfa();
}
private void fangfa() {
rv= (RecyclerView) findViewById(R.id.rv);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
rv.setLayoutManager(linearLayoutManager);
OkHttpUntils.getOkHttpUntils(this).get("http://tingapi.ting.baidu.com/v1/restserver/ting?method=baidu.ting.billboard.billList&type=1&size=10&offset=0",
Bean.class, new NetDataCallBack() {
@Override
public void Suesses(Bean baseBean) {
List<Bean.SongListBean> baseBeana= baseBean.getSong_list();
Adapter adapter=new Adapter(MainActivity.this,baseBeana );
rv.setAdapter(adapter);
}
@Override
public void Error(String msg) {
}
});
}
}
//我做这个竟然忘记编写 recyclerview的布局管理器 千万要记住这一点