登录界面的实现要求
对于UI界面的设置就不赘述了,只是普通的控件;
考虑到登录逻辑问题,一开始我们是没有账号的,所以需要进行注册功能的编辑;为了模拟登录效果,我们需要将用户注册的账户和密码发送到网络上。然后在登录界面将上传的数据获取下来进行比对从而登录成功;
上传和下载数据所需要的bean类:
BaseBean:用于一开始的手机号和密码的上传:
public class BaseBean {
public int code;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
LoginBean:用以获取是否登录成功和用户数据:
private Object age;
private String createtime;
private int gender;
private Object icon;
private String mobile;
private int money;
private Object nickname;
private String password;
private int uid;
private String username;
进行get,set的设置即可;
User用户信息:
private String userName;
private String pwd;
设置有参、无参、get、set即可;
Register :注册所用bean类:
private String msg;
private String code;
private DataBean data;
public static class DataBean {
private Object age;
private Object createtime;
private int gender;
private Object icon;
private String mobile;
private int money;
private Object nickname;
private String password;
private int uid;
private String username;
}
获取用户信息的方法类:
接口类:IUserModel:
public interface IUserModel {
public void setUserName(String userName);
public void setPwd(String pwd);
public User getUser();
}
//定义获取用户账号和密码的两个方法;
调用接口的用户类:UserModel:
User user = new User();
@Override
public void setUserName(String userName) {
user.setUserName(userName);
}
@Override
public void setPwd(String pwd) {
user.setPwd(pwd);
}
@Override
public User getUser() {
return user;
}
}
网络请求方法:
1:HTTPUtil:
private static volatile HttpUtil httpUtil;
private final OkHttpClient client;
private Context context;
private Handler handler = new Handler(Looper.getMainLooper());
private HttpUtil(Context context) {
//缓存目录
File sdcache = new File(Environment.getExternalStorageDirectory(), "cache");
int cacheSize = 10 * 1024 * 1024;
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
client = new OkHttpClient.Builder()
.addInterceptor(logging)
// .addNetworkInterceptor(new CacheInterceptor())
// .writeTimeout(20, TimeUnit.SECONDS)
// .readTimeout(20, TimeUnit.SECONDS)
// .cache(new Cache(sdcache,cacheSize))
.build();
this.context = context;
}
public static HttpUtil getInstance(Context context) {
if (httpUtil == null) {
synchronized (HttpUtil.class) {
if (httpUtil == null) {
httpUtil = new HttpUtil(context);
}
}
}
return httpUtil;
}
public void doPost(String url, Map<String, String> params, final Class clazz, final OnNetListener onNetListener) {
//网络判断
if (!NetWorkUtil.isNetworkAvailable(context)) {
Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
return;
}
if (params != null && params.size() > 0) {
FormBody.Builder builder = new FormBody.Builder();
params.put("client", "android");
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final BaseBean baseBean = (BaseBean) new Gson().fromJson(response.body().string(), clazz);
int code = baseBean.getCode();
if (code == 200) {
handler.post(new Runnable() {
@Override
public void run() {
try {
onNetListener.onSuccess(baseBean);
} catch (IOException e) {
e.printStackTrace();
}
}
});
} else if (code == 400) {
} else if (code == 300) {
}
}
});
}
}
public void download(String url, Callback callback) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(callback);
}
public void doGet(String url, final Class clazz, final OnNetListener onNetListener) {
//网络判断
if (!NetWorkUtil.isNetworkAvailable(context)) {
Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
return;
}
Request.Builder builder = new Request.Builder();
builder.url(url);
final Request request = builder.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onError(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz);
int code = baseBean.getCode();
if (code == 200) {
handler.post(new Runnable() {
@Override
public void run() {
try {
onNetListener.onSuccess(baseBean);
} catch (IOException e) {
e.printStackTrace();
}
}
});
} else if (code == 400) {
} else if (code == 300) {
}
}
});
}
/**
* @param url
* @param params
* @param header
* @param clazz
* @param onNetListener
*/
public void doGet(String url, HashMap<String, String> params, HashMap<String, String> header, final Class clazz, final OnNetListener onNetListener) {
//网络判断
if (!NetWorkUtil.isNetworkAvailable(context)) {
Toast.makeText(context, "没有网络,请查看设置", Toast.LENGTH_SHORT).show();
return;
}
Request.Builder builder = new Request.Builder();
if (params != null && params.size() > 0) {
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {
sb.append(url);
sb.append("?");
sb.append(entry.getKey());
sb.append("=");
sb.append(entry.getValue());
}
url = sb.toString();
}
builder.url(url);
//添加请求头
if (params != null && header.size() > 0) {
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.addHeader(entry.getKey(), entry.getValue());
}
}
final Request request = builder.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
onNetListener.onError(e);
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
final BaseBean baseBean = (BaseBean) new Gson().fromJson(string, clazz);
int code = baseBean.getCode();
if (code == 200) {
handler.post(new Runnable() {
@Override
public void run() {
try {
onNetListener.onSuccess(baseBean);
} catch (IOException e) {
e.printStackTrace();
}
}
});
} else if (code == 400) {
} else if (code == 300) {
}
}
});
}
/**
* 上传
*
* @param url
* @param fileName
*/
public void uploadFile(String url, String fileName) {
String file = Environment.getExternalStorageState() + "/" + fileName;
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
//创建RequestBody 设置类型等
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", fileName, fileBody).build();
Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
/**
* 下载
*
* @param url
*/
public void download(String url) {
Request request = new Request.Builder().url(url).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
NetWorkUtil:
// check all network connect, WIFI or mobile 检查网络连接;
public static boolean isNetworkAvailable(final Context context) {
boolean hasWifoCon = false;
boolean hasMobileCon = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfos = cm.getAllNetworkInfo();
for (NetworkInfo net : netInfos) {
String type = net.getTypeName();
if (type.equalsIgnoreCase("WIFI")) {
if (net.isConnected()) {
hasWifoCon = true;
}
}
if (type.equalsIgnoreCase("MOBILE")) {
if (net.isConnected()) {
hasMobileCon = true;
}
}
}
return hasWifoCon || hasMobileCon;
}
OKHttpUtils :
private static OkHttpUtils okHttpUtils;
private final OkHttpClient httpClient;
private final Handler handler;
//构造方法私有化
private OkHttpUtils() {
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BASIC);
httpClient = new OkHttpClient.Builder()
.addInterceptor(logging)
.build();
handler = new Handler(Looper.getMainLooper());
}
public static OkHttpUtils getInstance() {
if (okHttpUtils == null) {
synchronized (OkHttpUtils.class) {
if (okHttpUtils == null) {
okHttpUtils = new OkHttpUtils();
}
}
}
return okHttpUtils;
}
/**
* post请求
*
* @param url
* @param params
* @param clazz
* @param onNetListener
*/
public void doPost(String url, Map<String, String> params, Class clazz, OnNetListener onNetListener) {
FormBody.Builder builder = new FormBody.Builder();
for (Map.Entry<String, String> entry : params.entrySet()) {
builder.add(entry.getKey(), entry.getValue());
}
FormBody formBody = builder.build();
Request request = new Request.Builder().url(url).post(formBody).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
public void doGet(String url, Class clazz, OnNetListener onNetListener) {
Request request = new Request.Builder()
.url(url)
.build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
handler.post(new Runnable() {
@Override
public void run() {
// onNetListener.onSuccess();
}
});
}
});
}
public void uploadFile(String url, String fileName) {
String file = Environment.getExternalStorageState() + "/" + fileName;
RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
//创建RequestBody 设置类型等
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", fileName, fileBody).build();
Request request = new Request.Builder().url(url).post(requestBody).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
public void download(String url) {
Request request = new Request.Builder().url(url).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
}
});
}
OnNetListener:
public void onSuccess(BaseBean baseBean) throws IOException;
public void onError(IOException e);
present类
private IUser iUser;
private IUserModel iUserModel;
public UserPresenter(IUser iUser) {
this.iUser = iUser;
iUserModel = new UserModel();
}
public void register() {
String userName = iUser.getUserName();
String pwd = iUser.getPwd();
iUserModel.setUserName(userName);
iUserModel.setPwd(pwd);
}
public void getUser() {
User user = iUserModel.getUser();
iUser.showUser(user);
}
登录成功需要跳转到个人信息界面
个人信息类:
PersonMainActivity:
public class PersonmianActivity extends AppCompatActivity implements View.OnClickListener {
private TextView mUser;
/**
* kson
*/
private TextView mName;
/**
* 退出登录
*/
private Button mFinish;
/**
* 跳转到商品搜索页
*/
private Button mShopping;
private String string; private Geren geren;
private List<Geren> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gerenyemian);
initView();
Intent intent = getIntent();
int uid = intent.getIntExtra("UID",0);
String url="http://120.27.23.105/user/getUserInfo?uid="+uid;
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new HttpLoggingInterceptor()).build();
Request request = new Request.Builder().url(url).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
string = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
geren = new Gson().fromJson(string, Geren.class);
list.add(geren);
}
});
}
});
}
private void initView() {
mUser = (TextView) findViewById(R.id.user);
mName = (TextView) findViewById(R.id.name);
mFinish = (Button) findViewById(R.id.finish);
mFinish.setOnClickListener(this);
mShopping = (Button) findViewById(R.id.shopping);
mShopping.setOnClickListener(this);
String name = getIntent().getStringExtra("name");
String password = getIntent().getStringExtra("password");
mUser.setText(name);
mName.setText(password);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.finish:
finish();
break;
case R.id.shopping:
Intent intent = new Intent(GerenyemianActivity.this,ShoppingActivity.class);
startActivity(intent);
break;
}
}
}
Iuser
public interface IUser {
public String getUserName();
public String getPwd();
public void showUser(User user);
}
MainActivity:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText mDlname;
private EditText mDlpwd;
private Button mLagin;
private Button mZhuce;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
mDlname = (EditText) findViewById(R.id.dlname);
mDlpwd = (EditText) findViewById(R.id.dlpwd);
mLagin = (Button) findViewById(R.id.lagin);
mLagin.setOnClickListener(this);
mZhuce = (Button) findViewById(R.id.zhuce);
mZhuce.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.lagin:
String namel = mDlname.getText().toString().trim();
String pwdl = mDlpwd.getText().toString().trim();
String url="http://120.27.23.105/user/login?mobile="+namel+"&password="+pwdl;
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new HttpLoggingInterceptor()).build();
Request request = new Request.Builder().url(url).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
String string=null;
@Override
public void onResponse(Call call, final Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
string = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
Denglu denglu = new Gson().fromJson(string, Denglu.class);
Toast.makeText(MainActivity.this, denglu.getMsg(), Toast.LENGTH_SHORT).show();
if (denglu.getCode().equals("0")){
int uid = denglu.getData().getUid();
Intent intent = new Intent(MainActivity.this,GerenyemianActivity.class);
intent.putExtra("name",denglu.getData().getUsername());
intent.putExtra("password",denglu.getData().getPassword());
intent.putExtra("UID",uid);
startActivity(intent);
MainActivity.this.finish();
}
}
});
}
});
break;
case R.id.zhuce: Intent intent = new Intent(MainActivity.this, ZhuceActivity.class);
startActivity(intent);
finish();
break;
}
}
}
MyAdapter:
public class MyAdapter extends Adapter {
private Context context;
private List<ShoppingBean.DataBean> list;
private static final int TYPE1 = 0;
private static final int TYPE2 = 1;
public MyAdapter(Context context, List<ShoppingBean.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder holder = null;
if(viewType == TYPE1){
View view1 = LayoutInflater.from(context).inflate(R.layout.item1, parent, false);
holder = new Type1ViewHolder(view1);
}else{
View view2 = LayoutInflater.from(context).inflate(R.layout.item2, parent, false);
holder = new Type2ViewHolder(view2);
}
return holder;
}
@Override
public int getItemViewType(int position) {
return position % 2 == 0? TYPE1 : TYPE2;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if(holder instanceof Type1ViewHolder){
ShoppingBean.DataBean dataBean = list.get(position);
Type1ViewHolder type1ViewHolder = (Type1ViewHolder) holder;
type1ViewHolder.item1_price.setText(dataBean.getPrice()+"");
type1ViewHolder.item1_title.setText(dataBean.getTitle());
ImageLoader.getInstance().displayImage(dataBean.getImages(),type1ViewHolder.item1_iv);
}else{
ShoppingBean.DataBean dataBean = list.get(position);
Type2ViewHolder type2ViewHolder = (Type2ViewHolder) holder;
type2ViewHolder.item2_price.setText(dataBean.getPrice()+"");
type2ViewHolder.item2_title.setText(dataBean.getTitle());
ImageLoader.getInstance().displayImage(dataBean.getImages(),type2ViewHolder.item2_iv);
}
}
@Override
public int getItemCount() {
return list.size();
}
private class Type1ViewHolder extends RecyclerView.ViewHolder{
private final ImageView item1_iv;
private final TextView item1_title;
private final TextView item1_price;
public Type1ViewHolder(View itemView) {
super(itemView);
item1_iv = itemView.findViewById(R.id.item1_iv);
item1_title = itemView.findViewById(R.id.item1_title);
item1_price = itemView.findViewById(R.id.item1_price);
}
}
private class Type2ViewHolder extends RecyclerView.ViewHolder{
private final ImageView item2_iv;
private final TextView item2_title;
private final TextView item2_price;
public Type2ViewHolder(View itemView) {
super(itemView);
item2_iv = itemView.findViewById(R.id.item2_iv);
item2_title = itemView.findViewById(R.id.item2_title);
item2_price = itemView.findViewById(R.id.item2_price);
}
}
}
application类:MyApp:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration
);
}
}
跳转到商品页面
商品界面代码:
shoppingActivity:
public class ShoppingActivity extends AppCompatActivity implements View.OnClickListener {
/**
* 输入搜索关键词
*/
private EditText mEt;
/**
* 查找
*/
private TextView mFind;
/**
* 切换
*/
private TextView mChange;
private RecyclerView mRv;
private boolean flag;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 1:
String string = (String) msg.obj;
Toast.makeText(ShoppingActivity.this,string,Toast.LENGTH_LONG).show();
ShoppingBean shangpinbean = new Gson().fromJson(string, ShoppingBean.class);
list= shangpinbean.getData();
show(true);
break;
}
}
};
private List<ShoppingBean.DataBean> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shopping);
initView();
}
private void initView() {
mEt = (EditText) findViewById(R.id.et);
mFind = (TextView) findViewById(R.id.find);
mChange = (TextView) findViewById(R.id.change);
mRv = (RecyclerView) findViewById(R.id.rv);
mFind.setOnClickListener(this);
mChange.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.find:
String s = mEt.getText().toString().trim();
String url="http://120.27.23.105/product/searchProducts?keywords=" + s + "&page=1";
OkHttpClient httpClient = new OkHttpClient.Builder().addInterceptor(new HttpLoggingInterceptor()).build();
Request request = new Request.Builder().url(url).build();
httpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Message message = new Message();
message.what=1;
message.obj =string;
handler.sendMessage(message);
}
});
break;
case R.id.change:
if(!flag){
show(false);
flag=true;
}else{
show(true);
flag=false;
}
break;
}
}
public void show(boolean flag){
mRv.setLayoutManager(flag ? new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false) : new GridLayoutManager(this,2));
MyAdapter adapter = new MyAdapter(this,list);
mRv.setAdapter(adapter);
}
}
注册界面:
public class ZhuceActivity extends AppCompatActivity implements View.OnClickListener {
/**
* 输入手机号
*/
private EditText mZcname;
/**
* 输入密码
*/
private EditText mZcpwd;
/**
* 注册
*/
private Button mZcbut;
private User user;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_zhuce);
initView();
}
private void initView() {
mZcname = (EditText) findViewById(R.id.zcname);
mZcpwd = (EditText) findViewById(R.id.zcpwd);
mZcbut = (Button) findViewById(R.id.zcbut);
mZcbut.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.zcbut:
String name = mZcname.getText().toString();
String pwd = mZcpwd.getText().toString();
String url="http://120.27.23.105/user/reg?mobile="+name+"&password="+pwd;
OkHttpClient builder = new OkHttpClient.Builder().addInterceptor(new HttpLoggingInterceptor()).build();
Request request = new Request.Builder().url(url).build();
builder.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, final Response response) throws IOException {
runOnUiThread(new Runnable() {
private String string;
@Override
public void run() {
try {
string = response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
Zhuce zhuce = new Gson().fromJson(string, Zhuce.class);
Toast.makeText(ZhuceActivity.this, zhuce.getMsg(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(ZhuceActivity.this,MainActivity.class);
startActivity(intent);
ZhuceActivity.this.finish();
}
});
}
});
break;
}
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)