//M
public interface IBaseModel {
}
//P
public interface IBasePresent<V extends IBaseView> {
void attch(V v);
void deAttch();
}
//V
public interface IBaseView {
}
/**
* MVP 的契约类
*/
public interface AccounConten {
interface View extends IBaseView {
void showding(String relult);
void hideing();
void Error();
}
interface Model extends IBaseModel{
interface NetCallBack{
void onSuccess(String relult);
void onReeor(String msg);
}
void showData(String url,NetCallBack callBack);
}
interface Present extends IBasePresent<View>{
void Showdata(String url);
}
}
//M
public class AccountModel implements AccounConten.Model {
private OkHttpUtils okHttpUtils;
public AccountModel(){
okHttpUtils = new OkHttpUtils();
}
@Override
public void showData(String url, final NetCallBack callBack) {
OkHttpUtils.getInstance().get(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
String estring = e.getMessage().toString();
callBack.onReeor(estring);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String estring = response.body().string().toString();
callBack.onSuccess(estring);
}
});
}
}
//P
public class AccountPresent implements AccounConten.Present{
private AccounConten.Model model;
private AccounConten.View view;
private WeakReference<AccountModel> modelWeakReference;
private WeakReference<AccounConten.View> viewWeakReference;
@Override
public void Showdata(String url) {
modelWeakReference.get().showData(url, new AccounConten.Model.NetCallBack() {
@Override
public void onSuccess(String relult) {
view.showding(relult);
}
@Override
public void onReeor(String msg) {
String msgs = msg.toString();
Log.i("aaa",msgs);
}
});
}
@Override
public void attch(AccounConten.View view) {
this.view=view;
viewWeakReference = new WeakReference(view);
model=new AccountModel();
modelWeakReference=new WeakReference(model);
}
@Override
public void deAttch() {
}
}
//adapter
public class Myapdater extends RecyclerView.Adapter<MyHoderView> {
List<UiBean.ResultBean.NearbyCinemaListBean> list;
Context context;
public Myapdater(List<UiBean.ResultBean.NearbyCinemaListBean> list, Context context) {
this.list = list;
this.context = context;
}
@NonNull
@Override
public MyHoderView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
MyHoderView inflate = new MyHoderView(LayoutInflater.from(context).inflate(R.layout.item, parent, false));
return inflate;
}
@Override
public void onBindViewHolder(@NonNull MyHoderView holder, int position) {
holder.tv_name.setText(list.get(position).getName());
holder.tv_title.setText(list.get(position).getAddress());
if(list!=null&&list.size()>=0){
Glide.with(context)
.load(list.get(position).getLogo())
.into(holder.tv_image);
}
}
@Override
public int getItemCount() {
return list.size();
}
}
//OkHttpUtils
public class OkHttpUtils {
public OkHttpClient client;
private static OkHttpUtils okHttpUtils = new OkHttpUtils();
public static OkHttpUtils getInstance() {
if(okHttpUtils==null){
synchronized (OkHttpUtils.class){
okHttpUtils=new OkHttpUtils();
}
}
return okHttpUtils;
}
public OkHttpUtils() {
if(client==null){
synchronized (OkHttpClient.class){
client = new OkHttpClient.Builder().build();
}
}
}
public void get(String url, Callback callback){
Request build = new Request.Builder().url(url).build();
client.newCall(build).enqueue(callback);
}
}
//主页面
public class MainActivity extends AppCompatActivity implements AccounConten.View {
private RecyclerView rexecyView;
private AccountPresent present;
private List<UiBean.ResultBean.NearbyCinemaListBean> list = new ArrayList<>();
private Myapdater apdater;
private UiBean bean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rexecyView = findViewById(R.id.recylerView);
rexecyView.setLayoutManager(new LinearLayoutManager(this));
apdater = new Myapdater(list,this);
rexecyView.setAdapter(apdater);
rexecyView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
present=new AccountPresent();
present.attch(this);
present.Showdata("http://172.17.8.100/movieApi/cinema/v1/findRecommendCinemas?longitude=116.30551391385724&laitude=40.04571807462411&page=1&count=10&userld=18&sessionld=15320748258726");
}
@Override
public void showding(String relult) {
Log.i("aaa",relult+"sss");
Gson gson = new Gson();
bean = gson.fromJson(relult, UiBean.class);
runOnUiThread(new Runnable() {
@Override
public void run() {
list.addAll(bean.getResult().getNearbyCinemaList());
apdater.notifyDataSetChanged();
}
});
}
@Override
public void hideing() {
}
@Override
public void Error() {
}
}