<MVP框架>
接口拼接
在MainActivity中调用 传入数据
public class API {
public String toUrl(String keyword,int page,int count){
String url="http://172.17.8.100/small/commodity/v1/findCommodityByKeyword?keyword="+keyword+"&page="+page+"&count="+count;
return url;
}
}
MyApp 上下文
public class MyApp extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context=this;
}
}
## Base
------activity和presenter互相继承
BaseActivity
------BaseActivityr泛型继承BasePresente
public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements Icontract.IView {
public P p;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(Layout());
p=Payout();
//绑定
if (p!=null){
p.attach(this);
}
//初始化控件
initVeiw();
//设置数据
initData();
}
protected abstract void initData();
protected abstract void initVeiw();
protected abstract int Layout();
protected abstract P Payout();
//解绑方法
@Override
protected void onDestroy() {
super.onDestroy();
if (p!=null){
p.unbind();
p=null;
}
}
}
BasePresenter
------BasePresenter泛型继承BaseActivity
public class BasePresenter<V extends BaseActivity> {
public V v;
//绑定方法
public void attach(V v){
this.v=v;
}
//解绑方法
public void unbind(){
if(v!=null){
v=null;
}
}
}
MainActivity
------继承BaseActivity
public class MainActivity extends BaseActivity implements MyView.onClick{
MyPresenter myPresenter;
RecyclerView recyclerView;
MyView my_view;
//设置数据
@Override
protected void initData() {
boolean net = VolleyUtil.getInstance().getNet(this);
if (net){
//有网
API api=new API();
String str = URLEncoder.encode("板鞋");
myPresenter.success(api.toUrl(str,1,5));
}else {
Toast.makeText(this, "请检查网络", Toast.LENGTH_SHORT).show();
}
}
//初始化控件
@Override
protected void initVeiw() {
recyclerView=findViewById(R.id.recy_activity);
StaggeredGridLayoutManager gridLayoutManager=new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
recyclerView.setLayoutManager(gridLayoutManager);
// recyclerView.setLayoutManager(new LinearLayoutManager(this));
my_view=findViewById(R.id.my_view);
my_view.setClick(this);
}
@Override
protected int Layout() {
return R.layout.activity_main;
}
@Override
protected BasePresenter Payout() {
myPresenter = new MyPresenter();
return myPresenter;
}
@Override
public void success(Shop shop) {
MyAdapter adapter=new MyAdapter(shop.getResult(),this);
recyclerView.setAdapter(adapter);
}
//搜索框点击事件
@Override
public void setclick() {
String trim = my_view.edit_ss.getText().toString();
//判断
if (trim.isEmpty()){
Toast.makeText(this, "输入为空", Toast.LENGTH_SHORT).show();
}else {
API api=new API();
String str = URLEncoder.encode(trim);
myPresenter.success(api.toUrl(str,1,5));
}
}
}
P层
MyPresenter
------mypersenter实例化model层
------调用model中的方法
------接口回调
public class MyPresenter extends BasePresenter implements Icontract.IPresenter {
MyModel model;
public MyPresenter() {
model=new MyModel();
}
@Override
public void success(String url) {
model.getGet(url, new Icontract.CallBack() {
@Override
public void success(String json) {
//解析
Gson gson=new Gson();
Shop shop = gson.fromJson(json, Shop.class);
MainActivity activity= (MainActivity) v;
activity.success(shop);
}
@Override
public void error(String er) {
}
});
}
}
Mymodel
------model调用volley中的方法+接口回调callback
public class MyModel {
public void getGet(String url, Icontract.CallBack callBack){
VolleyUtil.getInstance().toGet(url, callBack);
}
}
Icontract契约类
public interface Icontract {
//V
interface IView{
void success(Shop shop);
}
//p层
interface IPresenter{
void success(String url);
}
//callBack
interface CallBack{
void success(String json);
void error(String er);
}
}
网络工具类Volley
public class VolleyUtil {
//创建队列
RequestQueue queue= Volley.newRequestQueue(MyApp.context);
//单例模式
public static VolleyUtil util=new VolleyUtil();
//私有构造
private VolleyUtil() {
}
public static VolleyUtil getInstance(){
return util;
}
//网络
public boolean getNet(Context context){
ConnectivityManager manager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info!=null){
return info.isConnected();
}
return false;
}
//Get请求
public void toGet(String url, final Icontract.CallBack callBack){
StringRequest request=new StringRequest(0, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
callBack.success(response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
callBack.error(error.getMessage());
}
});
queue.add(request);
}
}
bean类
------进入接口
public class Shop {
private String message;
private String status;
private List<ResultBean> result;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<ResultBean> getResult() {
return result;
}
public void setResult(List<ResultBean> result) {
this.result = result;
}
public static class ResultBean {
private int commodityId;
private String commodityName;
private String masterPic;
private int price;
private int saleNum;
public int getCommodityId() {
return commodityId;
}
public void setCommodityId(int commodityId) {
this.commodityId = commodityId;
}
public String getCommodityName() {
return commodityName;
}
public void setCommodityName(String commodityName) {
this.commodityName = commodityName;
}
public String getMasterPic() {
return masterPic;
}
public void setMasterPic(String masterPic) {
this.masterPic = masterPic;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getSaleNum() {
return saleNum;
}
public void setSaleNum(int saleNum) {
this.saleNum = saleNum;
}
}
}
搜索框 点击搜索
在activitiy中
public class MyView extends LinearLayout {
Button but_ss;
public EditText edit_ss;
onClick click;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
View view= LayoutInflater.from(context).inflate(R.layout.ss_layout,this);
but_ss=view.findViewById(R.id.but_ss);
edit_ss=view.findViewById(R.id.edit_ss);
but_ss.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
click.setclick();
}
});
}
public void setClick(onClick click){
this.click=click;
}
public interface onClick{
void setclick();
}
}
适配器
--------点击条目跳转到Main2
--------在适配器中接口回调点击
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder> {
List<Shop.ResultBean> list;
Context context;
MainActivity activity;
public MyAdapter(List<Shop.ResultBean> list, Context context) {
this.list = list;
this.context = context;
this.activity= (MainActivity) context;
}
@NonNull
@Override
public Holder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View inflate = LayoutInflater.from(context).inflate(R.layout.item_layout, null);
return new Holder(inflate);
}
@Override
public void onBindViewHolder(@NonNull Holder holder, int i) {
holder.textView1.setText(list.get(i).getCommodityName());
holder.textView2.setText("价格:"+list.get(i).getPrice()+"");
Glide.with(context)
.load(list.get(i).getMasterPic())
.apply(RequestOptions.bitmapTransform(new RoundedCorners(10)))
.error(R.drawable.ic_launcher_background)
.placeholder(R.mipmap.ic_launcher_round)
.into(holder.imageView);
*//给linnerlayout一个id
//设置点击事件跳转到webview页面*
holder.linner1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(context, Main2Activity.class);
activity.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return list.size();
}
class Holder extends RecyclerView.ViewHolder {
ImageView imageView;
TextView textView1;
LinearLayout linner1;
TextView textView2;
public Holder(@NonNull View itemView) {
super(itemView);
linner1=itemView.findViewById(R.id.linner1);
imageView=itemView.findViewById(R.id.img_layout);
textView1=itemView.findViewById(R.id.item_text1);
textView2=itemView.findViewById(R.id.item_text2);
}
}
}
Webview js:android互相调用
public class Main2Activity extends AppCompatActivity implements View.OnClickListener {
private Button ac2_but1;
private Button ac2_but2;
private WebView web_view;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
initView();
}
@SuppressLint("JavascriptInterface")
private void initView() {
ac2_but1 =findViewById(R.id.ac2_but1);
ac2_but2 = findViewById(R.id.ac2_but2);
web_view = findViewById(R.id.web_view);
//允许加载js
web_view.getSettings().setJavaScriptEnabled(true);
//加载网页
web_view.loadUrl("https://abnerming8.github.io/abnerming.html");
//允许弹框
web_view.setWebChromeClient(new WebChromeClient());
ac2_but1.setOnClickListener(this);
ac2_but2.setOnClickListener(this);
web_view.addJavascriptInterface(new Oclick(),"android");
}
class Oclick{
@SuppressLint("JavascriptInterface")
@JavascriptInterface
void show(){
Toast.makeText(Main2Activity.this, "郝世龙", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ac2_but1:
web_view.loadUrl("javascript:changeColor('#d43c3c')");
break;
case R.id.ac2_but2:
web_view.loadUrl("javascript:toast()");
break;
}
}
}
WebView加载地址
—https://abnerming8.github.io/abnerming.html—