http
public class HttpConfig { public static String login_url = "https://www.zhaoapi.cn/user/login"; public static String reg_url = "https://www.zhaoapi.cn/user/reg"; public static String good_url = "https://www.zhaoapi.cn/quarter/getJokes"; }
/** * 网络请求成功失败的接口 * <p> * 判断OKHttp请求是否成功 * 区分登录是否成功 */ public interface LoadListener { void loadSuccess(String json);//网络请求成功 void loadError(String error);//失败 }
public class OkHttpUtils { //单例模式获取对象 public static OkHttpUtils okHttpUtils = null; private MyHandler myHandler = new MyHandler(); private final int FAILED = 0; private final int SUCCESS = 1; private LoadListener loadListener; public static OkHttpUtils getInstance() { if (okHttpUtils == null) { okHttpUtils = new OkHttpUtils(); } return okHttpUtils; } //封装get请求 public void okHttpGet(String url) { OkHttpClient okHttpClient = new OkHttpClient(); final Request request = new Request.Builder().url(url).build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what = FAILED; message.obj = "失败"; myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what = SUCCESS; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //封装post请求 public void okHttpPost(String url, User user) { OkHttpClient okHttpClient = new OkHttpClient(); FormBody formBody = new FormBody.Builder().add("mobile", user.getMobile()).add("password", user.getPassword()).build(); final Request request = new Request.Builder().url(url).post(formBody).build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Message message = myHandler.obtainMessage(); message.what = FAILED; message.obj = "失败"; myHandler.sendMessage(message); } @Override public void onResponse(Call call, Response response) throws IOException { Message message = myHandler.obtainMessage(); message.what = SUCCESS; message.obj = response.body().string(); myHandler.sendMessage(message); } }); } //处理子线程 class MyHandler extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case FAILED: //当请求网络失败,调用接口里失败的方法 String error = (String) msg.obj; loadListener.loadError(error); break; case SUCCESS: //当请求网络成功,调用接口里成功的方法 String json = (String) msg.obj; loadListener.loadError(json); break; } } } //提供外部调用得方法,用于设置接口回调 public void setLoadListener(LoadListener loadListener) { this.loadListener = loadListener; } }model
public class GoodsBean {}
public interface ILoadModel { void showData(String url,LoadModelListener loadModelListener); void refresh(String url,LoadModelListener loadModelListener); void loadMore(String url,LoadModelListener loadModelListener); }
public interface ILogin { //Model的登录操作 void login(User user, LoginListener loginListener); }
public class LoadModelImpl implements ILoadModel { @Override public void showData(String url, final LoadModelListener loadModelListener) { OkHttpUtils instance = OkHttpUtils.getInstance(); instance.okHttpGet(url); instance.setLoadListener(new LoadListener() { @Override public void loadSuccess(String json) { //成功 loadModelListener.loadModelSucess(json); } @Override public void loadError(String error) { loadModelListener.loadModelError(error); } }); } @Override public void refresh(String url, LoadModelListener loadModelListener) { OkHttpUtils instance = OkHttpUtils.getInstance(); instance.okHttpGet(url); instance.setLoadListener(new LoadListener() { @Override public void loadSuccess(String json) { //成功 // loadModelListener.loadModelSucess(json); } @Override public void loadError(String error) { // loadModelListener.loadModelError(error); } }); } @Override public void loadMore(String url, LoadModelListener loadModelListener) { } }
public interface LoadModelListener { void loadModelSucess(String json); void loadModelError(String error); }
public class LoginImpl implements ILogin { @Override public void login(User user, final LoginListener loginListener) { //拿着手机号和密码去请求网络验证 OkHttpUtils okHttpUtils = OkHttpUtils.getInstance(); // okHttpUtils.okHttpPost(HttpConfig.login_url, user); okHttpUtils.okHttpGet(HttpConfig.login_url+"?mobile="+user.getMobile()+"&password="+user.getPassword()); //监听 okHttpUtils.setLoadListener(new LoadListener() { @Override public void loadSuccess(String json) { //判断code try { JSONObject object = new JSONObject(json); String code = object.getString("code"); if (code.equals("0")){ loginListener.loginSuccess(json); }else { loginListener.loginError("登录失败"); } } catch (JSONException e) { } } @Override public void loadError(String error) { //网络请求失败,肯定登录失败 loginListener.loginError(error); } }); } }
public interface LoginListener { //登录成功的监听 void loginSuccess(String json); //登录失败的监听 void loginError(String json); }
public class User {}presenter
public interface IPresenter { //登陆 void presenterLogin(ILogin iLogin, IView iView); //显示数据 void presenterShowData(Context context,ILoadModel iLoadModel, GoodView goodView); }
public class PresenterImpl implements IPresenter { private static final String TAG = "PresenterImpl"; @Override public void presenterLogin(ILogin iLogin, final IView iView) { Log.d(TAG, "presenterLogin() returned: " + iView.getMobile()+"==="+iView.getPassword()); //登陆 iLogin.login(new User(iView.getMobile(), iView.getPassword()), new LoginListener() { @Override public void loginSuccess(String json) { //登陆成功 iView.jump(); } @Override public void loginError(String json) { //登陆失败 iView.showError(); } }); } //将数据显示到listview @Override public void presenterShowData(final Context context, ILoadModel iLoadModel, final GoodView goodView) { iLoadModel.showData(HttpConfig.good_url + "?source=android&appVersion=100&page=1", new LoadModelListener() { @Override public void loadModelSucess(String json) { Gson gson = new Gson(); GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class); goodView.showDataToView(context, goodsBean.getData()); } @Override public void loadModelError(String error) { } }); } }view
public class GoodsActivity extends AppCompatActivity implements GoodView { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_goods); listView = findViewById(R.id.listview); } @Override public void showDataToView(Context context, List<GoodsBean.DataBean> data) { MyAdapter myAdapter = new MyAdapter(context, data); listView.setAdapter(myAdapter); } }
public interface GoodView { //设置视图 void showDataToView(Context context,List<GoodsBean.DataBean> data); }
public interface IView { String getMobile(); String getPassword(); void jump(); void showError(); }
public class MainActivity extends AppCompatActivity implements IView, View.OnClickListener { private EditText mobile; private EditText password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化节目 initViews(); } private void initViews() { mobile = findViewById(R.id.mobile); password = findViewById(R.id.password); Button login = findViewById(R.id.login); Button reg = findViewById(R.id.reg); login.setOnClickListener(this); reg.setOnClickListener(this); } @Override public String getMobile() { return mobile.getText().toString(); } @Override public String getPassword() { return password.getText().toString(); } @Override public void jump() { startActivity(new Intent(MainActivity.this, GoodsActivity.class)); } @Override public void showError() { Toast.makeText(MainActivity.this, "登陆失败", Toast.LENGTH_SHORT).show(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.login: PresenterImpl presenter = new PresenterImpl(); presenter.presenterLogin(new LoginImpl(),this); break; case R.id.reg: break; } } }
public class MyAdapter extends BaseAdapter { private final Context context; private final List<GoodsBean.DataBean> list; public MyAdapter(Context context, List<GoodsBean.DataBean> data) { this.context = context; this.list = data; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TextView textView = new TextView(context); textView.setText(list.get(position).getCreateTime()); return textView; } }activity_goods
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gjl.zhoukao22.view.GoodsActivity"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content"></ListView> </LinearLayout>activity_main
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.gjl.zhoukao22.view.MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="登录"/> <View android:layout_width="match_parent" android:layout_height="0.75dp" android:background="#999999"/> <EditText android:id="@+id/mobile" android:layout_width="match_parent" android:layout_height="wrap_content"/> <EditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/login" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="登录"/> <Button android:id="@+id/reg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="注册"/> </LinearLayout> </LinearLayout>
依赖
compile 'com.github.bumptech.glide:glide:3.5.2' compile 'com.google.code.gson:gson:2.2.4' compile 'com.squareup.okhttp3:okhttp:3.4.1'