仿京东——我的界面(登录注册,上传头像)
我的界面 布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:id="@+id/my_head"android:layout_width="match_parent"android:layout_height="170dp"android:background="@drawable/loginbefore"><com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/my_icon"android:layout_width="70dp"android:layout_height="70dp"android:layout_alignParentStart="true"android:layout_centerVertical="true"android:layout_marginStart="21dp"app:placeholderImage="@drawable/loginbefore"app:roundAsCircle="true" /><TextViewandroid:id="@+id/my_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:layout_centerVertical="true"android:layout_marginStart="104dp"android:text="登录/注册>"android:textColor="@color/white" /></RelativeLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:id="@+id/my_order"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我的订单" /></LinearLayout>
</LinearLayout>
我的界面 代码
public class MyFragment extends Fragment {@BindView(R.id.my_icon)SimpleDraweeView myIcon;@BindView(R.id.my_name)TextView myName;@BindView(R.id.my_head)RelativeLayout myHead;Unbinder unbinder;@BindView(R.id.my_order)Button myOrder;private SharedPreferences preferences;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = View.inflate(getActivity(), R.layout.my_fg, null);unbinder = ButterKnife.bind(this, view);return view;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);}private int getIsLogin() {
// SharedPreferences preferences = getActivity().getSharedPreferences("user", 0);return preferences.getInt("islogin", 0);}@Overridepublic void onDestroyView() {super.onDestroyView();unbinder.unbind();}@Overridepublic void onResume() {super.onResume();preferences = getActivity().getSharedPreferences("user", 0);if (getIsLogin() == 1) {String icon = preferences.getString("icon", "null");String nickname = preferences.getString("nickname", "null");myHead.setBackground(getResources().getDrawable(R.drawable.loginafter));myIcon.setImageURI(Uri.parse(icon));myName.setText(nickname);//*****************************************myHead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(getActivity(), UserSetActivity.class));}});} else {myHead.setBackground(getResources().getDrawable(R.drawable.loginbefore));//设置本地图片myIcon.setActualImageResource(R.drawable.user);myName.setText("登录/注册>");myHead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(getActivity(), LoginActivity.class));}});}}@OnClick(R.id.my_order)public void onViewClicked() {startActivity(new Intent(getActivity(), MyOrderActivity.class));}
}
mvp-moedl-RegisterModel
public class RegisterModel {public Observable<Register> Register(String name, String pwd) {return RetrofitUtil.getDefault().create(MyRetrofit.class).getRegister(name, pwd);}
}
mvp-model-LoginModel
public class LoginModel {public Observable<Login> login(String name, String pwd) {return RetrofitUtil.getDefault().create(MyRetrofit.class).getLogin(name, pwd);}
}
mvp-presenter-RegisterPresenter
public class RegisterPresenter extends BasePresenter<RegisterView> {private RegisterModel registerModel;public RegisterPresenter(RegisterView view) {super(view);}@Overridepublic void initModel() {registerModel = new RegisterModel();}public void register(String name, String pwd){registerModel.Register(name,pwd).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Register>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(Register register) {view.onRegisterSuccess(register);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}
}
mvp-model-LoginPresenter
public class LoginPresenter extends BasePresenter<LoginView> {private LoginModel loginModel;public LoginPresenter(LoginView view) {super(view);}@Overridepublic void initModel() {loginModel = new LoginModel();}public void login(String name, String pwd){loginModel.login(name,pwd).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<Login>() {@Overridepublic void onSubscribe(Disposable d) {compositeDisposable.add(d);}@Overridepublic void onNext(Login login) {view.onLoginSuccess(login);}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}
}
mvp-model-registerView
public interface RegisterView extends IView {void onRegisterSuccess(Register register);
}
mvp-model-loginView
public interface LoginView extends IView {void onLoginSuccess(Login login);
}
跳转到LoginActivity
public class LoginActivity extends BaseActivity<LoginPresenter> implements LoginView, View.OnClickListener {@BindView(R.id.login_name)EditText loginName;@BindView(R.id.login_pwd)EditText loginPwd;@BindView(R.id.login_login)Button loginLogin;@BindView(R.id.login_reg)TextView loginReg;private String name;private String pwd;@Overridepublic LoginPresenter providePresenter() {return new LoginPresenter(this);}@Overridepublic int provideLayoutId() {return R.layout.activity_login;}@Overridepublic void initListener() {loginLogin.setOnClickListener(this);loginReg.setOnClickListener(this);}@Overridepublic void initDate() {}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.login_login:name = loginName.getText().toString().trim();pwd = loginPwd.getText().toString().trim();presenter.login(name, pwd);break;case R.id.login_reg:startActivity(new Intent(LoginActivity.this,RegisterActivity.class));break;}}@Overridepublic void onLoginSuccess(Login login) {String code = login.getCode();if (code.equals("0")) {Login.DataBean data = login.getData();//登录成功Toast.makeText(LoginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();//将是否登录状态值和uid存入sp中SharedPreferences.Editor editor = getSharedPreferences("user", 0).edit();editor.putInt("islogin",1);editor.putString("name",name);editor.putString("pwd",pwd);editor.putInt("uid",data.getUid());editor.putString("icon",data.getIcon());editor.putString("nickname",data.getNickname());editor.commit();finish();} else {Toast.makeText(LoginActivity.this, "用户名或密码错误!", Toast.LENGTH_SHORT).show();}}}
LoginActivity布局
<?xml version="1.0" encoding="utf-8"?>
<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=".mvp.view.activity.LoginActivity"><EditTextandroid:id="@+id/login_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入手机号" /><EditTextandroid:id="@+id/login_pwd"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入密码" /><Buttonandroid:id="@+id/login_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="登录" /><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/login_reg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:layout_alignParentTop="true"android:text="新用户注册" /></RelativeLayout>
</LinearLayout>
RegisterActivity
public class RegisterActivity extends BaseActivity<RegisterPresenter> implements RegisterView {@BindView(R.id.reg_name)EditText regName;@BindView(R.id.reg_pwd)EditText regPwd;@BindView(R.id.reg_reg)Button regReg;@Overridepublic RegisterPresenter providePresenter() {return new RegisterPresenter(this);}@Overridepublic int provideLayoutId() {return R.layout.activity_register;}@Overridepublic void initListener() {}@Overridepublic void initDate() {openDialog();}@Overridepublic void onRegisterSuccess(Register register) {String code = register.getCode();if (code.equals("0")) {Toast.makeText(RegisterActivity.this, "注册成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(RegisterActivity.this, register.getMsg(), Toast.LENGTH_SHORT).show();}}@OnClick(R.id.reg_reg)public void onViewClicked() {String name = regName.getText().toString().trim();String pwd = regPwd.getText().toString().trim();presenter.register(name, pwd);}private void openDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setTitle("注册协议及隐私政策");builder.setMessage("给我同意");builder.setPositiveButton("同意", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {}});builder.setNegativeButton("不同意", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});AlertDialog alertDialog = builder.create();//设置点击返回按钮不能关闭AlertDialogalertDialog.setCancelable(false);//设置点击alertDialog外部区域不能关闭AlertDialogalertDialog.setCanceledOnTouchOutside(false);alertDialog.show();}
}
RegisterActivity布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"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"tools:context=".mvp.view.activity.RegisterActivity"><EditTextandroid:id="@+id/reg_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入手机号" /><EditTextandroid:id="@+id/reg_pwd"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入密码" /><Buttonandroid:id="@+id/reg_reg"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="注册" />
</LinearLayout>
UserSetActivity布局
<FrameLayout 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"tools:context=".mvp.view.activity.UserSetActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><LinearLayoutandroid:layout_weight="9"android:layout_width="match_parent"android:layout_height="0dp"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:id="@+id/userset_txt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:text="账户设置" /></LinearLayout><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="150dp"><com.facebook.drawee.view.SimpleDraweeViewandroid:id="@+id/userset_icon"android:layout_width="70dp"android:layout_height="70dp"android:layout_alignParentStart="true"android:layout_centerVertical="true"android:layout_marginStart="21dp"app:placeholderImage="@drawable/ic_launcher_background"app:roundAsCircle="true" /><TextViewandroid:id="@+id/userset_name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:layout_centerVertical="true"android:layout_marginStart="107dp"android:text="昵称" /></RelativeLayout><TextViewandroid:id="@+id/userset_seticon"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="center_vertical"android:text="头像" /><TextViewandroid:id="@+id/userset_setnick"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="center_vertical"android:text="昵称" /><TextViewandroid:id="@+id/userset_setaddres"android:layout_width="match_parent"android:layout_height="40dp"android:gravity="center_vertical"android:text="地址管理" /></LinearLayout><Buttonandroid:id="@+id/userset_unlogin"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:text="退出登录" /></LinearLayout><Viewandroid:id="@+id/huiview"android:layout_width="fill_parent"android:layout_height="fill_parent"android:background="#60000000"android:visibility="gone" /></FrameLayout>
UserSetActivity
public class UserSetActivity extends AppCompatActivity implements View.OnClickListener {@BindView(R.id.userset_icon)SimpleDraweeView usersetIcon;@BindView(R.id.userset_name)TextView usersetName;@BindView(R.id.userset_seticon)TextView usersetSeticon;@BindView(R.id.userset_setnick)TextView usersetSetnick;@BindView(R.id.userset_setaddres)TextView usersetSetaddres;@BindView(R.id.huiview)View huiview;@BindView(R.id.userset_unlogin)Button usersetUnlogin;private SharedPreferences preferences;private PopupWindow popupWindow;private View view;private File file;private String uid;private AlertDialog alertDialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_user_set);ButterKnife.bind(this);//判断sd卡指定的目录是否存在
// File files = new File(Environment.getExternalStorageDirectory() + "/im g");
// File files = new File(getFilesDir().getAbsolutePath() + "/img");
// if (!files.exists()) {
// files.mkdirs();
// }file = new File(Environment.getExternalStorageDirectory() + "/1601v.png");initData();//点击监听usersetSeticon.setOnClickListener(this);usersetSetnick.setOnClickListener(this);usersetSetaddres.setOnClickListener(this);usersetUnlogin.setOnClickListener(this);//初始化alertdialoginitDialog();}private void initDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(this);
// builder.setTitle("确定退出登录?");builder.setMessage("确定退出登录?");builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialogInterface, int i) {SharedPreferences.Editor editor = preferences.edit();editor.clear();editor.commit();finish();}});builder.setNegativeButton("取消", null);alertDialog = builder.create();}private void initData() {preferences = getSharedPreferences("user", 0);String icon = preferences.getString("icon", "");
// String nickname = preferences.getString("nickname", "");//设置数据usersetIcon.setImageURI(Uri.parse(icon));
// usersetName.setText(nickname);//初始化头像popupwindowinitPop();}private void initPop() {view = View.inflate(this, R.layout.activity_user_set, null);View popView = View.inflate(this, R.layout.icon_pop, null);popupWindow = new PopupWindow(popView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);//设置透明背景popupWindow.setBackgroundDrawable(new ColorDrawable(0));//设置pop外部可触摸popupWindow.setOutsideTouchable(true);//设置焦点事件popupWindow.setFocusable(true);//设置内部可触摸popupWindow.setTouchable(true);
// popwindow消失监听,将huiview隐藏popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {@Overridepublic void onDismiss() {huiview.setVisibility(View.GONE);}});//拍照popView.findViewById(R.id.icon_capture).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {popupWindow.dismiss();
// Toast.makeText(UserSetActivity.this, "点点点", Toast.LENGTH_SHORT).show();//调用系统相机//打开相机 MediaStore.ACTION_IMAGE_CAPTURE 打开相机的ActionIntent it = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//在Sdcard 中创建文件 存入图片it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));//1.意图 2.requestCode 请求码startActivityForResult(it, 1000);}});//选取相册popView.findViewById(R.id.icon_photos).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {popupWindow.dismiss();Toast.makeText(UserSetActivity.this, "点点点1", Toast.LENGTH_SHORT).show();}});//取消popView.findViewById(R.id.icon_cancel).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {popupWindow.dismiss();}});}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.userset_seticon://显示popupwindow的位置popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0);
// //弹出后将view显示出来huiview.setVisibility(View.VISIBLE);break;case R.id.userset_setnick://修改昵称startActivity(new Intent(UserSetActivity.this, NcSetActivity.class));break;case R.id.userset_setaddres:break;case R.id.userset_unlogin://注销alertDialog.show();break;}}@Overrideprotected void onResume() {super.onResume();String nickname = preferences.getString("nickname", "");usersetName.setText(nickname);}//拍照完成后回调@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1000 && resultCode == RESULT_OK) {//调取裁剪功能 om.android.camera.action.CROP 裁剪的ActionIntent it = new Intent("com.android.camera.action.CROP");//得到图片设置类型it.setDataAndType(Uri.fromFile(file), "image/*");//是否支持裁剪 设置 true 支持 false 不支持it.putExtra("CROP", true);//设置比例大小 1:1it.putExtra("aspectX", 1);it.putExtra("aspectY", 1);//输出的大小it.putExtra("outputX", 250);it.putExtra("outputY", 250);//将裁剪好的图片进行返回到Intent中it.putExtra("return-data", true);startActivityForResult(it, 2000);}//点击完裁剪的完成以后会执行的方法if (requestCode == 2000 && resultCode == RESULT_OK) {Bitmap bitmap = data.getParcelableExtra("data");usersetIcon.setImageBitmap(bitmap);//裁剪完成开始上传到服务器upLoadIcon();}}//上传头像private void upLoadIcon() {uid = preferences.getInt("uid", 0) + "";final RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), file);MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);RetrofitUtil.getDefault().create(MyRetrofit.class).upLoadIcon(uid, part).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<UpLoadIcon>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(UpLoadIcon upLoadIcon) {String code = upLoadIcon.getCode();if (code.equals("0")) {Toast.makeText(UserSetActivity.this, "头像上传成功", Toast.LENGTH_SHORT).show();//上传成功后,获得上传图片的url,存入spsaveSp();} else {Toast.makeText(UserSetActivity.this, "头像上传失败", Toast.LENGTH_SHORT).show();}}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}private void saveSp() {//从sp中取出手机号,密码,登录,获得iconurlString name = preferences.getString("name", "");String pwd = preferences.getString("pwd", "");final SharedPreferences.Editor editor = preferences.edit();new LoginModel().login(name, pwd).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Login>() {@Overridepublic void accept(Login login) throws Exception {Login.DataBean data = login.getData();String icon = data.getIcon();editor.putString("icon", icon);editor.commit();}});}}
PopWindow布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFF"android:orientation="vertical"><TextViewandroid:id="@+id/icon_capture"android:layout_width="match_parent"android:gravity="center"android:layout_height="40dp"android:text="拍照上传" /><TextViewandroid:gravity="center"android:id="@+id/icon_photos"android:layout_width="match_parent"android:layout_height="40dp"android:text="相册上传" /><TextViewandroid:layout_marginTop="15dp"android:gravity="center"android:id="@+id/icon_cancel"android:layout_width="match_parent"android:layout_height="40dp"android:text="取消" />
</LinearLayout>
NcActivity(修改昵称)
public class NcSetActivity extends AppCompatActivity {@BindView(R.id.ncset_txt)EditText ncsetTxt;@BindView(R.id.ncset_update)Button ncsetUpdate;private SharedPreferences preferences;private String nc;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_nc_set);ButterKnife.bind(this);preferences = getSharedPreferences("user", 0);String nickname = preferences.getString("nickname", "");ncsetTxt.setText(nickname);}@OnClick(R.id.ncset_update)public void onViewClicked() {nc = ncsetTxt.getText().toString().trim();String uid = getSharedPreferences("user", 0).getInt("uid", 0)+"";RetrofitUtil.getDefault().create(MyRetrofit.class).getUpDateNc(uid, nc).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<UpDateNc>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(UpDateNc upDateNc) {String code = upDateNc.getCode();if (code.equals("0")){Toast.makeText(NcSetActivity.this,"昵称修改成功",Toast.LENGTH_SHORT).show();//将sp中的昵称也修改了SharedPreferences.Editor editor = preferences.edit();editor.putString("nickname",nc);editor.commit();finish();}else{Toast.makeText(NcSetActivity.this,"昵称修改失败",Toast.LENGTH_SHORT).show();}}@Overridepublic void onError(Throwable e) {}@Overridepublic void onComplete() {}});}
}
NcActivity布局
<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=".mvp.view.activity.NcSetActivity"><TextViewandroid:gravity="center_horizontal"android:text="修改昵称"android:layout_width="match_parent"android:layout_height="wrap_content" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><EditTextandroid:id="@+id/ncset_txt"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="8" /><Buttonandroid:id="@+id/ncset_update"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="2"android:text="修改" /></LinearLayout>
</LinearLayout>
仿京东——我的界面(登录注册,上传头像)相关推荐
- springboot+Jcrop实现图片裁剪(模仿邮箱注册上传头像)
1.pom配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- vue 移动端头像裁剪_移动端 上传头像 并裁剪功能(h5)
移动端头像图片上传裁剪 .button { outline: 0; display: inline-block; margin-bottom: 0; font-weight: 400; text-al ...
- 微信小程序仿淘票票之登录注册讲解
微信小程序仿淘票票之登录注册讲解(这也是我学习的第一步嘛) 前言 一.登录以及注册的业务逻辑 二.核心代码 1.register代码 2.login代码 总结 前言 愉快的期末,终于结束了,我准备把程 ...
- SpringBoot-项目1-用户(注册,登录,修改密码,修改个人资料,上传头像)
1. 项目分析 在设计一款软件时,在编写代码之前,应该先分析这个项目中需要处理哪些类型的数据!例如,本项目中需要处理的数据种类有:收藏,购物车,用户,收货地址,订单,商品,商品类别. 当确定了需要处理 ...
- c#web窗体登录界面登录注册以及密码找回发送邮箱功能
c#web窗体登录界面登录注册以及密码找回发送邮箱功能 效果图如下: 1.登录界面aspx代码 <%@ Page Language="C#" AutoEventWireup= ...
- 在本地测试无组件上传类上传大文件可以,在服务器上就不行,仿163网盘无刷新文件上传系统...
回复 引用 查看 2008-10-20 11:03 | fkeuem 真的很不错.谢谢. 回复 引用 查看 2008-10-20 11:20 | PuserChen 下载了,学 ...
- [转]仿163网盘无刷新文件上传系统
原文链接:http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html 这个仿163网盘无刷新文件上传系统,并没有用使用.net的 ...
- 高仿微信上传头像附带压缩,旋转图片,附加demo
本人初学者,再做项目时要求上传头像要像微信那种,需要外面裁剪框不动,里面图片可以改变大小,android系统裁剪和所要求的完全相反,所以,对于这个问题,困扰了我将近一个月,不断的修改,不断的出现新问题 ...
- 关于注册页面上传头像并在后台处理数据
之前在做注册页面头像上传时,发现直接通过request.getParameter方法获取到的值全是null,后面经过查找资料找出了原因,因为在普通注册页面的基础上加入了上传头像的功能,所以需要在for ...
最新文章
- CSS 魔法系列:纯 CSS 绘制基本图形(圆、椭圆等)
- [USACO18JAN][luoguP4183 ]Cow at Large P
- GridView RowCommand事件中取得當前行
- Qt之QGraphicsView实战篇(很强大)
- 10-5 5-5 查询只卖三种不同型号PC的厂商 (20 分)
- leetcode 107 --- 二叉树程序遍历 ii
- python入门——数字+字符串
- 值对于int32太大或太小_影响涂镀层测厚仪测量值的因素与解决方法
- git revert与git reset
- Kafka 0.10.1.1 特点
- 易筋SpringBoot 2.1 | 第一篇:构建第一个SpringBoot工程
- AI人工智能简史-人工智能与炼金术
- 水质检测c语言程序,单片机TDS水质检测源程序
- 此处纸薄不经墨,待入章中再续貂
- 语句摘抄——第29周
- 实时数仓实践(一)之数据库实时增量同步工具-CDC(Change Data Capture)
- Hypothesis Test Overview
- The Untended Antiquity (二维树状数组 哈希)
- mac悬浮窗_Mac OS 悬浮窗口,并且可以保持在全屏的其他应用上。
- 误差向量幅度(EVM)
热门文章
- IDEA maven配置教程
- RedHat系列系统 Clickhouse v18 源码编译安装
- GitKraken Authentication问题,无法同步代码
- CPU上下文切换、进程上下文、中断上下文
- oppo计算机夜间颜色,“暗夜精灵”出没,OPPO Reno超级夜景2.0让你成为色彩艺术家!...
- java深入微服务原理改造房产销售平台,Java深入微服务原理改造房产销售平台
- 80端口被Default Web Site占用,不能为自己的网站添加绑定80端口
- OGNL的基本语法与用法
- Py打包的天坑!(no moudle named xxxx)
- 快速理解Vue父子组件传值