IView
public interface IView {
Context context();
}
MainView
public interface MainView extends IView {
void ShowSuccess(GoodsBean goodsBean);
void ShowError(String error);
}
HttpUtils
public class OkHttpUtils {
public static OkHttpUtils oKhttpUtils;
private final OkHttpClient okHttpClient;
private final Handler myhandler;
private OkHttpUtils() {
//主线程Handler
myhandler = new Handler(Looper.getMainLooper());
okHttpClient = new OkHttpClient.Builder()
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.connectTimeout(5000, TimeUnit.MILLISECONDS)
// .addInterceptor(httpLoggingInterceptor)
.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) {
//切换到主线程
myhandler.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) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.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) {
//切换到主线程
myhandler.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) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onResponse(json);
}
});
}
} else {
if (ioKhttpUtilsCallback != null) {
//切换到主线程
myhandler.post(new Runnable() {
@Override
public void run() {
ioKhttpUtilsCallback.onFailure("网络异常");
}
});
}
}
}
});
}
//接口回调
public interface IOKhttpUtilsCallback {
void onFailure(String error);
void onResponse(String json);
}
}
MainModel
public class MainModel {
public void showGoods(int page,final MainmodelCallback mainmodelCallback,String name){
OkHttpUtils okHttpUtils = OkHttpUtils.getoKhttpUtils();
String url = "http://www.zhaoapi.cn/product/searchProducts?keywords="+name+"&page="+page;
okHttpUtils.doGet(url, new OkHttpUtils.IOKhttpUtilsCallback() {
@Override
public void onFailure(String error) {
if(mainmodelCallback!=null){
mainmodelCallback.getFaid(error);
}
}
@Override
public void onResponse(String json) {
GoodsBean goodsBean = new Gson().fromJson(json, GoodsBean.class);
Log.i("aaa",goodsBean.getData().toString());
if(goodsBean.getCode().equals("0")){
if(mainmodelCallback!=null){
mainmodelCallback.getSuccess(goodsBean);
}
}else{
if(mainmodelCallback!=null){
mainmodelCallback.getFaid("请求失败");
}
}
}
});
}
public interface MainmodelCallback{
void getSuccess(GoodsBean goodsBean);
void getFaid(String error);
}
}
BasePresenter
public abstract class BasePresenter<V extends IView> {
protected V view;
public BasePresenter(V view){
this.view=view;
initModel();
}
protected abstract void initModel();
void onDestroy(){
view=null;
}
}
MainPresenter
public abstract class BasePresenter<V extends IView> {
protected V view;
public BasePresenter(V view){
this.view=view;
initModel();
}
protected abstract void initModel();
void onDestroy(){
view=null;
}
}
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();
}
}
Activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener, MainView {
String url = "http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=";
private ImageView mMainImg;
/**
* 综合
*/
private TextView mMainTextZh;
/**
* 销量
*/
private TextView mMainTextXl;
/**
* 价格
*/
private TextView mMainTextJg;
private XRecyclerView mMainRecycler;
private int page = 1;
private int type = 1;
private MainAdapter adapter;
private MainPresenter presenter;
private ImageView imageView;
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
//布局
initData();
// String urls = url+page+"&type="+type;
presenter.showGoods( page, "手机");
//上拉加载下拉刷新
initRefresh();
// //价格监听
// mMainTextJg.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// page = 1;
// type = 2;
// url = "http://www.zhaoapi.cn/product/searchProducts?keywords=笔记本&page=";
// String s = editText.getText().toString();
// presenter.showGoods( page, s);
//
// }
// });
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String s = editText.getText().toString();
presenter.showGoods( page, s);
}
});
}
private void initRefresh() {
mMainRecycler.setLoadingListener(new XRecyclerView.LoadingListener() {
@Override
public void onRefresh() {
//更新UI
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mMainRecycler.refreshComplete();
Toast.makeText(MainActivity.this, "刷新完成", Toast.LENGTH_SHORT).show();
}
}, 2000);
}
@Override
public void onLoadMore() {
//更新UI
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
mMainRecycler.loadMoreComplete();
Toast.makeText(MainActivity.this, "加载完成", Toast.LENGTH_SHORT).show();
}
}, 2000);
}
});
}
private void initData() {
presenter = new MainPresenter(this);
mMainImg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (type == 1) {
mMainImg.setImageResource(R.drawable.menu2);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mMainRecycler.setLayoutManager(linearLayoutManager);
adapter.notifyDataSetChanged();
type = 2;
} else {
mMainImg.setImageResource(R.drawable.menu1);
GridLayoutManager gridLayoutManager = new GridLayoutManager(MainActivity.this, 2);
mMainRecycler.setLayoutManager(gridLayoutManager);
adapter.notifyDataSetChanged();
type = 1;
}
}
});
}
private void initView() {
mMainImg = findViewById(R.id.main_img);
mMainImg.setOnClickListener(this);
mMainTextZh = findViewById(R.id.main_text_zh);
mMainTextXl = findViewById(R.id.main_text_xl);
mMainTextJg = findViewById(R.id.main_text_jg);
mMainRecycler = findViewById(R.id.main_recycler);
imageView = findViewById(R.id.sousuo);
editText = findViewById(R.id.edit_query01);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.main_img:
break;
}
}
@Override
public void ShowSuccess(GoodsBean goodsBean) {
Toast.makeText(this, "成功——————------55555" + goodsBean.getData().toString(), Toast.LENGTH_SHORT).show();
List<GoodsBean.DataBean> list = goodsBean.getData();
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mMainRecycler.setLayoutManager(linearLayoutManager);
adapter = new MainAdapter(list, MainActivity.this);
mMainRecycler.setAdapter(adapter);
}
@Override
public void ShowError(String error) {
Toast.makeText(this, "失败——————" + error, Toast.LENGTH_SHORT).show();
}
@Override
public Context context() {
return this;
}
}
Adapter
public class MainAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<GoodsBean.DataBean> list;
private Context context;
public MainAdapter(List<GoodsBean.DataBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return (new ViewHolder(view));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
((ViewHolder) holder).item_dec.setText(list.get(position).getTitle());
((ViewHolder) holder).item_price.setText(list.get(position).getPrice() + "");
//String imageurl="http"+icon.substring(5);
String images = list.get(position).getImages();
String imageurl = "http" + images.substring(5);
Glide.with(context).load(imageurl).into(((ViewHolder) holder).item_img);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, DetaActivity.class);
intent.putExtra("aaa", list.get(position).getDetailUrl());
context.startActivity(intent);
Toast.makeText(context, "点击了" + position, Toast.LENGTH_LONG).show();
}
});
//ImageLoader.getInstance().displayImage(imageurl, ((ViewHolder) holder).item_img, MyApp.getOptions());
}
@Override
public int getItemCount() {
return list.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
private TextView item_dec, item_price;
private ImageView item_img;
public ViewHolder(View itemView) {
super(itemView);
item_img = itemView.findViewById(R.id.item_img);
item_dec = itemView.findViewById(R.id.item_dec);
item_price = itemView.findViewById(R.id.item_price);
}
}
}
ShowActivity
public class DetaActivity extends AppCompatActivity {
private WebView mWebview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_deta);
initView();
mWebview = findViewById(R.id.webview);
WebSettings settings = mWebview.getSettings();
//设置js的交互权限
settings.setJavaScriptEnabled(true);
//设置允许js弹窗
settings.setJavaScriptCanOpenWindowsAutomatically(true);
Intent intent = getIntent();
String aaa = intent.getStringExtra("aaa");
Log.d("qwer", aaa);
//如果不设置webviewclient,请求会跳转到系统浏览器
mWebview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//该方法在Build.VERSION_CODES.LOLLIPOP以前有效,从Build.VERSION_CODES.LOLLIPOP起,建议使用shouldOverrideUrlLoading(WebView, WebResourceRequest)} instead
//返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
//返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下
return false;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
//返回false,意味着请求过程里,不管有多少次的跳转请求(即新的请求地址),均交给webView自己处理,这也是此方法的默认处理
//返回true,说明你自己想根据url,做新的跳转,比如在判断url符合条件的情况下
return true;
}
});
// 先载入JS代码
// 格式规定为:file:///android_asset/文件名.html
mWebview.loadUrl(aaa);
// webview只是载体,内容的渲染需要使用webviewChromClient类去实现
// 通过设置WebChromeClient对象处理JavaScript的对话框
//设置响应js 的Alert()函数
mWebview.setWebChromeClient(new WebChromeClient());
}
private void initView() {
mWebview = findViewById(R.id.webview);
}
}