UserView
public interface IUserView extends IBaseView{
void callBackData(UserBean data);
}
BaseView
public interface IBaseView {}
ShowActivity
public class ShowActivity extends AppCompatActivity implements IUserView {
@BindView(R.id.reView)
RecyclerView reView;
private String path = "http://result.eolinker.com/iYXEPGn4e9c6dafce6e5cdd23287d2bb136ee7e9194d3e9?uri=one";
private IUserPresenter presenter;
private UserAdapter adapter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_layout);
ButterKnife.bind(this);
initData();
loadDataFromNet();
}
private void initData() {
presenter=new IUserPresenter();
//this == MainActivity == IMainView
//把 当期view 与 presenter 产生关联,把当期view 的对象赋值给P层,以便 p层回调数据
presenter.setView(this);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
GridLayoutManager gridLayoutManager=new GridLayoutManager(this,1);
reView.setLayoutManager(gridLayoutManager);
adapter = new UserAdapter(this);
reView.setAdapter(adapter);
}
@Override
public void callBackData(UserBean data) {
adapter.setData((ArrayList<UserBean.DataBean>) data.getData());
}
private void loadDataFromNet() {
presenter.getHomeData(path);
}
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView();
}
}
IUserPresenter
public class IUserPresenter extends IBaseUserPresenter<IUserView> implements UserHttpUtils.CallbackData<UserBean>{
private UserHttpUtils httpUtils;
public IUserPresenter(){
httpUtils = UserHttpUtils.getInstance();
httpUtils.setCallback(this);
}
public void getHomeData(String url){
//调用model层 真正的加载网络数据
httpUtils.getData(url,NewsBean.class);
}
@Override
public void onSuccess(UserBean t) {
getView().callBackData(t);
}
@Override
public void onErr(Exception e) {
}
public void detachView(){
}
}
IBaseUserPresenter
public class IBaseUserPresenter <V extends IUserView>{
private V view;
public V getView() {
return view;
}
public void setView(V view) {
this.view = view;
}
public void dettachView(){
this.view=null;
}
}
OkHttpUtil
public class UserHttpUtils<T> {
private static UserHttpUtils userhttpUtils;
private UserHttpUtils(){}
public static UserHttpUtils getInstance(){
if(userhttpUtils==null){
userhttpUtils=new UserHttpUtils();
return userhttpUtils;
}else{
return userhttpUtils;
}
}
private CallbackData callbackData;
public void setCallback(CallbackData callbackData) {
this.callbackData = callbackData;
}
public void getData(String path, final Class<T> tClass){
OkHttpClient okHttpClient=new OkHttpClient();
Request.Builder builder=new Request.Builder();
Request request = builder.url(path).build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {//失败
callbackData.onErr(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {//成功
String string = response.body().string();
Gson gson=new Gson();
T t = (T) gson.fromJson(string, UserBean.class);
Message message = handler.obtainMessage();
message.obj=t;
handler.sendMessage(message);
}
});
}
public interface CallbackData<D>{
void onSuccess(D t);
void onErr(Exception e);
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
T obj = (T) msg.obj;
callbackData.onSuccess(obj);
}
};
}
adapter
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.MyViewHolder> {
private Context con;
private ArrayList<UserBean.DataBean> arr=new ArrayList<>();
public UserAdapter(Context con) {
this.con = con;
}
public void setData(ArrayList<UserBean.DataBean> list){
if(list!=null){
arr.addAll(list);
notifyDataSetChanged();
}
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(con).inflate(R.layout.list_item, null);
MyViewHolder myViewHolder=new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, int i) {
myViewHolder.name.setText(arr.get(i).getTitle());
Glide.with(con).load(arr.get(i).getImage_url()).into(myViewHolder.img);
}
@Override
public int getItemCount() {
return arr.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
private final TextView name;
private final ImageView img;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
img = itemView.findViewById(R.id.icon);
}
}
}