//model层(接口和类)
public interface ILoginModel { void login(String mobile,String password,ILoginPrestenter iLoginPrestenter); }
package lianxi.bawei.com.mvp_login_regin_zhanshi.login.model; import android.os.Handler; import java.io.IOException; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.api.Constants; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.presenter.ILoginPrestenter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; //MVP当中的Model层 : 业务逻辑,网络请求 public class LoginModel implements ILoginModel{ private Handler handler=new Handler(); @Override public void login(String mobile, String password, final ILoginPrestenter iLoginPrestenter) { String url= Constants.LOGIN+"?mobile="+mobile+"&password="+password; OkHttpClient okHttpClient=new OkHttpClient(); 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) { handler.post(new Runnable() { @Override public void run() { iLoginPrestenter.onFailed(e.getMessage()); } }); } @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ final String result = response.body().string(); handler.post(new Runnable() { @Override public void run() { iLoginPrestenter.onSuccess(result); } }); } } }); } }//presenter(接口和类)
package lianxi.bawei.com.mvp_login_regin_zhanshi.login.presenter; public interface ILoginPrestenter { void login(String mobile,String password); void onFailed(String msg); void onSuccess(Object obj); //销毁 void onDestory(); }package lianxi.bawei.com.mvp_login_regin_zhanshi.login.presenter; import android.widget.Toast; import com.google.gson.Gson; import lianxi.bawei.com.mvp_login_regin_zhanshi.MainActivity; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.bean.LoginInfo; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.model.LoginModel; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.view.IMainView; public class LoginPresenter implements ILoginPrestenter{ private IMainView iMainView; private LoginModel loginModel; public LoginPresenter(IMainView iMainView) { this.iMainView = iMainView; loginModel=new LoginModel(); } @Override public void login(String mobile, String password) { loginModel.login(mobile,password,this); } @Override public void onFailed(String msg) { if(iMainView == null){ return; } iMainView.onFailed(msg); } @Override public void onSuccess(Object obj) { //判空处理 if(iMainView == null){ return; } //解析 Gson gson=new Gson(); LoginInfo loginInfo = gson.fromJson(obj.toString(), LoginInfo.class); String code = loginInfo.getCode(); if("0".equals(code)){ iMainView.onSuccess(loginInfo.getMsg()); }else{ iMainView.onFailed(loginInfo.getMsg()); } } @Override public void onDestory() { if(iMainView == null){ iMainView=null; } } }//view(接口和MainActivity)
package lianxi.bawei.com.mvp_login_regin_zhanshi.login.view; public interface IMainView { void onFailed(String msg); void onSuccess(Object obj); }package lianxi.bawei.com.mvp_login_regin_zhanshi; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.presenter.LoginPresenter; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.view.IMainView; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.view.LoginActivity; public class MainActivity extends AppCompatActivity implements IMainView{ private EditText etMobile; private EditText etPassword; private LoginPresenter loginPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //找控件 etMobile = (EditText) findViewById(R.id.etMobile); etPassword = (EditText) findViewById(R.id.etPassword); //创建Presenter对象 loginPresenter=new LoginPresenter(this); } //登录点击事件 public void btnLogin(View view){ //获取输入框的数据 String mobile = etMobile.getText().toString().trim(); String password = etPassword.getText().toString().trim(); //调用loginpresenter方法 loginPresenter.login(mobile,password); } //注册点击事件 public void btnResiger(View view){ Intent intent=new Intent(MainActivity.this, LoginActivity.class); startActivity(intent); } @Override public void onFailed(String msg) { Toast.makeText(this,"失败信息:"+msg,Toast.LENGTH_SHORT).show(); } @Override public void onSuccess(Object obj) { //显示操作 Toast.makeText(this,"操作成功:"+obj.toString(),Toast.LENGTH_SHORT).show(); //跳转主页Activity Intent intent=new Intent(MainActivity.this,SecActivity.class); startActivity(intent); finish(); } @Override protected void onDestroy() { super.onDestroy(); //解绑,防止内存泄漏 loginPresenter.onDestory(); } }//注册ResigerActivity
package lianxi.bawei.com.mvp_login_regin_zhanshi.login.view; import android.content.Intent; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.EditText; import android.widget.Toast; import com.google.gson.Gson; import java.io.IOException; import lianxi.bawei.com.mvp_login_regin_zhanshi.MainActivity; import lianxi.bawei.com.mvp_login_regin_zhanshi.R; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.api.Constants; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.bean.SuperClass; import lianxi.bawei.com.mvp_login_regin_zhanshi.login.presenter.ILoginPrestenter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; public class LoginActivity extends AppCompatActivity { private EditText tel; private EditText pass; private Handler handler=new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); tel = (EditText) findViewById(R.id.tel); pass = (EditText) findViewById(R.id.pass); } public void btnResiger1(View view) { String a = tel.getText().toString(); String b = pass.getText().toString(); OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder() .get() .url("http://120.27.23.105/user/reg?mobile=" + a + "&password=" + b) .build(); Call call = okHttpClient.newCall(request); call.enqueue(new Callback() { private String str; @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { str = response.body().string(); handler.post(new Runnable() { @Override public void run() { Gson gson=new Gson(); SuperClass superClass = gson.fromJson(str, SuperClass.class); String code = superClass.getCode(); if(code.equals("1")){ Toast.makeText(LoginActivity.this,superClass.getMsg(),Toast.LENGTH_SHORT).show(); return; }else{ Toast.makeText(LoginActivity.this,"注册成功",Toast.LENGTH_SHORT).show(); finish(); } } }); } }); } }
//contants(存放接口)
package lianxi.bawei.com.mvp_login_regin_zhanshi.login.api; public class Constants { //http://120.27.23.105/user/login //http://120.27.23.105/user/reg public static final String HOST_HOME="http://120.27.23.105"; public static final String LOGIN=HOST_HOME+"/user/login"; public static final String RESIGER=HOST_HOME+"/user/login"; }//bean包里解析获得的数据
....
//utils
package lianxi.bawei.com.mvp_login_regin_zhanshi.show.utils; import android.util.Log; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class NetWorkUtils { public String getJsonByHttpurlConnection(String jsonUrl){ URL url=null; HttpURLConnection urlConnection=null; String data=""; try { url=new URL(jsonUrl); urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setConnectTimeout(5000); urlConnection.setReadTimeout(5000); int responseCode = urlConnection.getResponseCode(); if(responseCode==200){ InputStream inputStream = urlConnection.getInputStream(); byte[] b=new byte[1024]; int len=0; while((len=inputStream.read(b))!=-1){ String str=new String(b,0,len); data+=str; } Log.d("TAG",data); } } catch (Exception e) { e.printStackTrace(); } return data; } }//图片Myapp
package lianxi.bawei.com.mvp_login_regin_zhanshi.show.app; import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class MyApp extends Application{ @Override public void onCreate() { super.onCreate(); ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build(); ImageLoader.getInstance().init(build); } }//适配器package lianxi.bawei.com.mvp_login_regin_zhanshi.show.adapter1; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; import lianxi.bawei.com.mvp_login_regin_zhanshi.R; import lianxi.bawei.com.mvp_login_regin_zhanshi.show.bean.GoodsClass; public class MyAdapter1 extends BaseAdapter { private List<GoodsClass.DataBean> list; private Context context; public MyAdapter1(List<GoodsClass.DataBean> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup viewGroup) { ViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.list_view_layout, null); holder = new ViewHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.imageView); holder.text01 = (TextView) convertView.findViewById(R.id.text01); holder.text02 = (TextView) convertView.findViewById(R.id.text02); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.text01.setText(list.get(position).getTitle()); holder.text02.setText(list.get(position).getCreatetime()); ImageLoader.getInstance().displayImage(list.get(position).getImages(),holder.imageView); return convertView; } public class ViewHolder { private ImageView imageView; private TextView text01,text02; } }//activity_sec布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_sec" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="lianxi.bawei.com.mvp_login_regin_zhanshi.SecActivity"> <lianxi.bawei.com.mvp_login_regin_zhanshi.XListView android:id="@+id/xlv" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout>//注册
<uses-permission android:name="android.permission.INTERNET"/>(还需要写加载图片的权限)//导入的依赖
compile 'com.squareup.okhttp3:okhttp:3.2.0' compile 'com.google.code.gson:gson:2.2.4' compile files('libs/universal-image-loader-1.9.5.jar')//需要导入XListView的包等