编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

OKHTTP 框架的网络请求,应用于登录界面

wxchong 2024-06-10 17:03:27 开源技术 12 ℃ 0 评论

登录界面的实现要求

对于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;

}

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表