IView
public interface IView {
Context context();
}
DataCall–继承IView
public interface DataCall extends IView {
void onSuccess(NewsBean newBean);
void LoginSuccess(LoginBean loginBean);
void onFaild(String error);
}
LoginModel
public void getLogin(String moblie, String pwd, final IMainModelCallback2 iMainModelCallback) {
OkHttpUtils oKhttpUtils = OkHttpUtils.getoKhttpUtils();
//"http://www.zhaoapi.cn/user/login?mobile=" + mobile + "" + "&password=" + pwd
oKhttpUtils.doGet(HttpConfig.urlLogin + "?mobile=" + moblie + "" + "&password=" + pwd, new OkHttpUtils.IOKhttpUtilsCallback() {
@Override
public void onFailure(String error) {
if (iMainModelCallback != null) {
iMainModelCallback.getFaild(error);
}
}
@Override
public void onResponse(String json) {
LoginBean loginBean = new Gson().fromJson(json, LoginBean.class);
String code = loginBean.getCode();
if (code.equals("0")) {
if (iMainModelCallback != null) {
iMainModelCallback.getSuccess(loginBean);
}
} else {
if (iMainModelCallback != null) {
iMainModelCallback.getFaild("请求数据失败");
}
}
}
});
}
public interface IMainModelCallback2 {
void getSuccess(LoginBean loginBean);
void getFaild(String error);
}
NewsModel
public void getNews(Integer page, final IMainModelCallback iMainModelCallback) {
OkHttpUtils oKhttpUtils = OkHttpUtils.getoKhttpUtils();
oKhttpUtils.doGet(HttpConfig.url + "?page=" + page, new OkHttpUtils.IOKhttpUtilsCallback() {
@Override
public void onFailure(String error) {
if (iMainModelCallback != null) {
iMainModelCallback.getFaild(error);
}
}
@Override
public void onResponse(String json) {
NewsBean newBean = new Gson().fromJson(json, NewsBean.class);
int code = newBean.getCode();
if (1 == code) {
if (iMainModelCallback != null) {
iMainModelCallback.getSuccess(newBean);
}
} else {
if (iMainModelCallback != null) {
iMainModelCallback.getFaild("请求数据失败");
}
}
}
});
}
public interface IMainModelCallback {
void getSuccess(NewsBean newsBean);
void getFaild(String error);
}
HttpUtils
public static OkHttpUtils oKhttpUtils;
private final OkHttpClient okHttpClient;
private final Handler handler;
private OkHttpUtils() {
//主线程Handler
handler = new Handler(Looper.getMainLooper());
okHttpClient = new OkHttpClient.Builder()
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
.build();
}
public static OkHttpUtils getoKhttpUtils() {
if (oKhttpUtils == null) {
synchronized (OkHttpUtils.class) {
if (oKhttpUtils == null) {
return oKhttpUtils = new OkHttpUtils();
}
}
}
return oKhttpUtils;
}
//异步get
public void doGet(String url, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
Request request = new Request.Builder()
.get()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure(e.getMessage());
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
final String json = response.body().string();
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure("网络异常");
}
});
}
}
}
});
}
//异步post
public void doPost(String url, Map<String, String> map, final IOKhttpUtilsCallback ioKhttpUtilsCallback) {
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : map.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder()
.post(formBody)
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure(e.getMessage());
}
});
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response != null && response.isSuccessful()) {
final String json = response.body().string();
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
handler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure("网络异常");
}
});
}
}
}
});
}
//接口回调
public interface IOKhttpUtilsCallback {
void onFailure(String error);
void onResponse(String json);
}
BasePresenter–泛型继承Iview
public abstract class BasePresenter<V extends IView> {
protected V view;
public BasePresenter(V view) {
this.view = view;
initModel();
}
protected abstract void initModel();
public void onDestroy() {
view = null;
}
}
LoginProsenter
在这里插入代码片public class LoginPresenter extends BasePresenter<DataCall> {
private LoginModel loginModel;
public LoginPresenter(DataCall view) {
super(view);
}
@Override
protected void initModel() {
loginModel = new LoginModel();
}
public void getLogin(String moblie, String pwd) {
loginModel.getLogin(moblie, pwd, new LoginModel.IMainModelCallback2() {
@Override
public void getSuccess(LoginBean loginBean) {
if (view != null) {
view.LoginSuccess(loginBean);
}
}
@Override
public void getFaild(String error) {
if (view != null) {
view.onFaild(error);
}
}
});
}
}
NewsPresenter
public class NewsPresenter extends BasePresenter<DataCall> {
private NewsModel newsModel;
public NewsPresenter(DataCall view) {
super(view);
}
@Override
protected void initModel() {
newsModel = new NewsModel();
}
public void getNews(Integer page) {
newsModel.getNews(page, new NewsModel.IMainModelCallback() {
@Override
public void getSuccess(NewsBean newsBean) {
if (view != null) {
view.onSuccess(newsBean);
}
}
@Override
public void getFaild(String error) {
if (view != null) {
view.onFaild(error);
}
}
});
}
}
多条目Adapter
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<NewsBean.DataBean> list;
private static final int viewType01 = 0;
private static final int viewType02 = 1;
private Context context;
public MyAdapter(List<NewsBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView01 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item1, parent, false);
View itemView02 = LayoutInflater.from(parent.getContext()).inflate(R.layout.item2, parent, false);
if (viewType == viewType01) {
return new MyViewHolder01(itemView01);
}
return new MyViewHolder02(itemView02);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
if (holder instanceof MyViewHolder01) {
((MyViewHolder01) holder).textView01.setText(list.get(position).getTitle());
((MyViewHolder01) holder).textView02.setText(list.get(position).getAuthor_name() + "描述");
String url = list.get(position).getThumbnail_pic_s();
Glide.with(context).load(url).into(((MyViewHolder01) holder).imageView);
((MyViewHolder01) holder).imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.OnItemClick(v, position);
}
});
//长按
((MyViewHolder01) holder).imageView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onItemLongClickListener.OnItemLongClick(v, position);
return true;
}
});
} else if (holder instanceof MyViewHolder02) {
((MyViewHolder02) holder).textView01.setText(list.get(position).getTitle());
((MyViewHolder02) holder).textView02.setText(list.get(position).getAuthor_name());
String url0 = list.get(position).getThumbnail_pic_s();
String url1 = list.get(position).getThumbnail_pic_s02();
String url2 = list.get(position).getThumbnail_pic_s03();
Glide.with(context).load(url0).into(((MyViewHolder02) holder).imageView);
Glide.with(context).load(url1).into(((MyViewHolder02) holder).imageView2);
Glide.with(context).load(url2).into(((MyViewHolder02) holder).imageView3);
// ImageLoader.getInstance().displayImage(url0, ((MyViewHolder02) holder).imageView, MyApp.getOptions());
((MyViewHolder02) holder).imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.OnItemClick(v, position);
}
});
((MyViewHolder02) holder).imageView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.OnItemClick(v, position);
}
});
((MyViewHolder02) holder).imageView3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onItemClickListener.OnItemClick(v, position);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
onItemLongClickListener.OnItemLongClick(v, position);
return true;
}
});
}
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return viewType01;
} else {
return viewType02;
}
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public class MyViewHolder01 extends RecyclerView.ViewHolder {
private TextView textView01, textView02;
private ImageView imageView;
public MyViewHolder01(View itemView) {
super(itemView);
textView01 = itemView.findViewById(R.id.item_tv);
textView02 = itemView.findViewById(R.id.item_tvv);
imageView = itemView.findViewById(R.id.item_img);
}
}
public class MyViewHolder02 extends RecyclerView.ViewHolder {
private TextView textView01, textView02;
private ImageView imageView, imageView2, imageView3;
public MyViewHolder02(View itemView) {
super(itemView);
textView01 = itemView.findViewById(R.id.title);
textView02 = itemView.findViewById(R.id.pinglun);
imageView = itemView.findViewById(R.id.imageView);
imageView2 = itemView.findViewById(R.id.imageView2);
imageView3 = itemView.findViewById(R.id.imageView3);
}
}
private OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
void OnItemClick(View view, int position);
}
private OnItemLongClickListener onItemLongClickListener;
public void setOnItemLongClickListener(OnItemLongClickListener onItemLongClickListener) {
this.onItemLongClickListener = onItemLongClickListener;
}
public interface OnItemLongClickListener {
void OnItemLongClick(View view, int position);
}
}
BaseActivity
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity {
protected P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(provideLayoutId());
initViews();
initListener();
presenter = providePresenter();
initDatas();
}
protected abstract P providePresenter();
protected abstract int provideLayoutId();
protected abstract void initDatas();
protected abstract void initListener();
protected abstract void initViews();
@Override
protected void onDestroy() {
presenter.onDestroy();
super.onDestroy();
}
}
LoginActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener, DataCall {
private static final String TAG = "MainActivity+++++";
private TextView mTxtName;
/**
* 登陆
*/
private Button mBtnLogin;
private RecyclerView mRecy;
private MyAdapter adapter;
private List<NewsBean.DataBean> list;
private NewsPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
presenter.getNews(1);
Intent intent = getIntent();
String username = intent.getStringExtra("username");
mTxtName.setText(username);
}
private void initView() {
mTxtName = findViewById(R.id.txt_name);
mBtnLogin = findViewById(R.id.btn_login);
mBtnLogin.setOnClickListener(this);
mRecy = findViewById(R.id.recy);
presenter = new NewsPresenter(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.btn_login:
Intent intent = new Intent(MainActivity.this, ScendActivity.class);
startActivity(intent);
finish();
break;
}
}
@Override
public void onSuccess(NewsBean newBean) {
list = newBean.getData();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecy.setLayoutManager(linearLayoutManager);
adapter = new MyAdapter(list, MainActivity.this);
mRecy.setAdapter(adapter);
//点击图片改变 透明
adapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void OnItemClick(View view, int position) {
ObjectAnimator alpha = ObjectAnimator.ofFloat(view, "alpha", 1f, 0f, 1f);
alpha.setDuration(5000);
alpha.start();
}
});
adapter.setOnItemLongClickListener(new MyAdapter.OnItemLongClickListener() {
@Override
public void OnItemLongClick(View view, final int position) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("数据");
builder.setMessage("确定删除吗");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
list.remove(position);
adapter.notifyDataSetChanged();
}
});
builder.setNegativeButton("取消", null);
builder.show();
}
});
}
@Override
public void LoginSuccess(LoginBean loginBean) {
}
@Override
public void onFaild(String error) {
}
@Override
public Context context() {
return this;
}
}
NewsActivity
public class ScendActivity extends AppCompatActivity implements View.OnClickListener, DataCall {
/**
* 请输入用户名...
*/
private EditText mEdName;
/**
* 请输入密码...
*/
private EditText mEdPwd;
/**
* 登录登录
*/
private Button mBtnLogin;
private LoginPresenter presenter;
private String moblie;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scend);
initView();
}
private void initView() {
mEdName = findViewById(R.id.ed_name);
mEdPwd = findViewById(R.id.ed_pwd);
mBtnLogin = findViewById(R.id.btn_login);
mBtnLogin.setOnClickListener(this);
presenter = new LoginPresenter(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.btn_login:
moblie = mEdName.getText().toString().trim();
String pwd = mEdPwd.getText().toString().trim();
presenter.getLogin(moblie, pwd);
break;
}
}
@Override
public void onSuccess(NewsBean newBean) {
}
@Override
public void LoginSuccess(LoginBean loginBean) {
Toast.makeText(ScendActivity.this, "" + loginBean.getMsg(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ScendActivity.this, MainActivity.class);
intent.putExtra("username", moblie);
startActivity(intent);
}
@Override
public void onFaild(String error) {
Toast.makeText(ScendActivity.this, "666666666666" , Toast.LENGTH_SHORT).show();
}
@Override
public Context context() {
return this;
}
}