目录 目录 功能说明 登录页面 注册页面 登录后界面 点击头像出现侧滑界面,并显示用户信息 点击编辑按钮进入信息编辑页面 保存后返回 用户名已更改 跳转网页 相关代码 布局 登录界面 注册界面 信息显示界面 主界面 实现侧滑布局
目录
目录
能够验证用户名是否已存在,并判断两次密码是否一致
当前用户无信息
编辑信息
信息页面显示更改后的信息
修改用户名后,下次登录需要填写更改后的用户名
点击按钮进入相应的网页 ,这里点击 “长知识”>>“菜鸟学编程”
package com.example.myfirst;import Androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.EditText;import com.example.myfirst.util.DBHelper;import com.example.myfirst.util.ToastUtil;import com.example.myfirst.util.User;import java.util.ArrayList;public class LoginActivity extends AppCompatActivity implements View.OnClickListener { //当需要用到新的onClick()时,要 implements View.OnClickListener private Button mBtLogin; //声明变量 private EditText mEtUser; private EditText mEtPassWord; private Button mBtReGISter; private DBHelper dbHelper; public static int userId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mBtLogin = findViewById(R.id.bt_login); mEtPassword = findViewById(R.id.Ed_password); mEtUser = findViewById(R.id.Ed_username); mBtRegister = findViewById(R.id.bt_register); dbHelper = new DBHelper(this); mBtLogin.setOnClickListener(this); //当需要用到新的onClick()时,就用this mBtRegister.setOnClickListener(this); } public void onClick(View view){ switch (view.getId()){ case R.id.bt_login: String username = mEtUser.getText().toString().trim(); String password = mEtPassword.getText().toString().trim(); if(!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password)){ ArrayList userData = dbHelper.getData(); //在User list创建一个实例userData boolean judge = false; //并让userData获取数据库里的数据 for (int i = 0; i < userData.size(); i++){ User user = userData.get(i); if (username.equals(user.getName()) && password.equals(user.getPassword())){judge = true;userId = i;break; } //遍历user id,当输入的用户名和密码与数据库里的数据匹配则judge=true else {judge = false; } } if (judge){ ToastUtil.showMsg(LoginActivity.this,"登陆成功!"); Intent intent2 = new Intent(this,Slideactivity.class); startActivity(intent2); finish(); } else { ToastUtil.showMsg(LoginActivity.this,"用户名错误或密码错误!"); } } else { ToastUtil.showMsg(LoginActivity.this,"用户名或密码不能为空"); } break; case R.id.bt_register: Intent intent1 = new Intent(LoginActivity.this,RegisterActivity.class); startActivity(intent1); break; } } public static int getUserId(){ return userId; }}
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.widget.Button;import android.widget.EditText;import com.example.myfirst.util.DBHelper;import com.example.myfirst.util.ToastUtil;public class RegisterActivity extends AppCompatActivity implements View.OnClickListener{ private Button mBtToRegister; private DBHelper dbHelper; private EditText mEtSetUsername; private EditText mEtSetUserPassword1; private EditText mEtSetUserPassword2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); mEtSetUsername = findViewById(R.id.set_username); mEtSetUserPassword1 = findViewById(R.id.set_userPassword1); mEtSetUserPassword2 = findViewById(R.id.set_userPassword2); mBtToRegister = findViewById(R.id.bt_startRegister); dbHelper = new DBHelper(this); mBtToRegister.setOnClickListener(this); } public void onClick(View view){ String username = mEtSetUsername.getText().toString().trim(); String password1 = mEtSetUserPassword1.getText().toString().trim(); String password2 = mEtSetUserPassword2.getText().toString().trim(); if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(password1)&& !TextUtils.isEmpty(password2) ) { if ((password1.equals(password2))) { if (dbHelper.add(username, password2)){ //将用户名和密码加入到数据库中 Intent intent2 = new Intent(this, LoginActivity.class); startActivity(intent2); finish(); ToastUtil.showMsg(RegisterActivity.this,"注册成功!"); } else { ToastUtil.showMsg(RegisterActivity.this,"该用户名已存在!"); } } else { ToastUtil.showMsg(RegisterActivity.this,"密码输入不一致"); } } else { ToastUtil.showMsg(RegisterActivity.this,"用户名和密码不能为空!"); } }}
信息编辑activity
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.RadioButton;import android.widget.RadioGroup;import com.example.myfirst.util.DBHelper;import com.example.myfirst.util.ToastUtil;import com.example.myfirst.util.User;import java.util.ArrayList;public class EditInformationActivity extends AppCompatActivity implements View.OnClickListener{ private EditText mEtUsername,mEtAge,mEtFavorite,mEtSignature; private Button mBtSaveInformation; private DBHelper dbHelper; private RadioButton mRbMale,mRbFemale; private String sexString; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_edit_infor); mEtUsername = findViewById(R.id.Et_EditUsername); mEtAge = findViewById(R.id.Et_editAge); mRbMale = findViewById(R.id.rdB_male); mRbFemale = findViewById(R.id.rdB_female); mEtFavorite = findViewById(R.id.Et_editFavorite); mEtSignature = findViewById(R.id.Et_editSignature); mBtSaveInformation = findViewById(R.id.bt_saveInformation); dbHelper = new DBHelper(this); showRadioButtonIsCheck(); mBtSaveInformation.setOnClickListener(this); } private void showRadioButtonIsCheck(){ //定义一个根据用户性别显示 哪个radiobutton被选中的方法 ArrayList userData = dbHelper.getData(); User user = userData.get(LoginActivity.getUserId()); if (!(user.getSex() == null)){ if (user.getSex().equals("男")){ mRbMale.setChecked(true); }else if (user.getSex().equals("女")){ mRbFemale.setChecked(true); } } } @Override public void onClick(View view) { String username = mEtUsername.getText().toString().trim(); String age = mEtAge.getText().toString(); String favorite = mEtFavorite.getText().toString(); String signature = mEtSignature.getText().toString(); //分别获取输入的用户信息 if (!username.isEmpty()){ dbHelper.updateUsername(username); } if (!age.isEmpty()){ dbHelper.updateAge(age); } if (mRbMale.isChecked()){ sexString = "男"; }else if (mRbFemale.isChecked()){ sexString = "女"; } dbHelper.updateSex(sexString); if (!favorite.isEmpty()){ dbHelper.updateFavorite(favorite); } if (!signature.isEmpty()){ dbHelper.updateSignature(signature); //分别保存到数据库中的User表,必须做一个是否为空的检查 } //否则表中数据可能会被覆盖 SlideActivity.slideActivity.finish(); //更改后销毁原来的信息显示页面 ToastUtil.showMsg(this,"更改成功"); Intent intent = new Intent(EditInformationActivity.this,SlideActivity.class); startActivity(intent); finish(); }}
娱乐
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;public class RelaxActivity extends AppCompatActivity { private Button btnGame1,btnGame2,btnGame3,btnGame4,btnGame5,btnGame6,btnGame7,btnGame8,btnGame9; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_relax); btnGame1 = findViewById(R.id.bt_game1); btnGame2 = findViewById(R.id.bt_game2); btnGame3 = findViewById(R.id.bt_game3); btnGame4 = findViewById(R.id.bt_game4); btnGame5 = findViewById(R.id.bt_game5); btnGame6 = findViewById(R.id.bt_game6); btnGame7 = findViewById(R.id.bt_game7); btnGame8 = findViewById(R.id.bt_game8); btnGame9 = findViewById(R.id.bt_game9); setClickListener(); } private class OnClick implements View.OnClickListener{ //新建私有类OnClick,实现View.OnClickListener @Override //重写onClick方法 public void onClick(View view) { Intent intent = null; switch (view.getId()){ case R.id.bt_game1: intent = new Intent(RelaxActivity.this,WEBZTypeActivity.class); break; case R.id.bt_game2: intent = new Intent(RelaxActivity.this,EatwhatActivity.class); break; case R.id.bt_game3: intent = new Intent(RelaxActivity.this, SummondraGonActivity.class); break; case R.id.bt_game4: intent = new Intent(RelaxActivity.this,WhichoneActivity.class); break; case R.id.bt_game5: intent = new Intent(RelaxActivity.this,MikutapActivity.class); break; case R.id.bt_game6: intent = new Intent(RelaxActivity.this,HenxiangsiActivity.class); break; case R.id.bt_game7: intent = new Intent(RelaxActivity.this, LoopTapActivity.class); break; case R.id.bt_game8: intent = new Intent(RelaxActivity.this, FlowerActivity.class); break; case R.id.bt_game9: intent = new Intent(RelaxActivity.this, EndlessLakeActivity.class); break; } startActivity(intent); } } //设计方法 private void setClickListener(){ OnClick onClick = new OnClick(); //在OnClick新建onClick实体,否则36行OnClick是灰色的,也就是没被调用 btnGame1.setOnClickListener(onClick); //每个button都调用监听,并用上面的方法 btnGame2.setOnClickListener(onClick); btnGame3.setOnClickListener(onClick); btnGame4.setOnClickListener(onClick); btnGame5.setOnClickListener(onClick); btnGame6.setOnClickListener(onClick); btnGame7.setOnClickListener(onClick); btnGame8.setOnClickListener(onClick); btnGame9.setOnClickListener(onClick); }}
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.view.SearchEvent;import android.view.View;import android.widget.Button;public class StudyActivity extends AppCompatActivity { private Button btnStudy1,btnStudy2,btnStudy3,btnStudy4,btnStudy5,btnStudy6; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_study); btnStudy1 = findViewById(R.id.btn_study1); btnStudy2 = findViewById(R.id.btn_study2); btnStudy3 = findViewById(R.id.btn_study3); btnStudy4 = findViewById(R.id.btn_study4); btnStudy5 = findViewById(R.id.btn_study5); btnStudy6 = findViewById(R.id.btn_study6); setClickListener(); } private class OnClick implements View.OnClickListener{ //新建私有类OnClick,与 View.OnClickListener接口对接 @Override public void onClick(View view) { Intent intent = null; switch (view.getId()){ case R.id.btn_study1: intent = new Intent(StudyActivity.this,RunoobActivity.class); break; case R.id.btn_study2: intent = new Intent(StudyActivity.this,TechnologyMuseuMactivity.class); break; case R.id.btn_study3: intent = new Intent(StudyActivity.this,MedicineActivity.class); break; case R.id.btn_study4: intent = new Intent(StudyActivity.this,AnswerActivity.class); break; case R.id.btn_study5: intent = new Intent(StudyActivity.this,SpaceActivity.class); break; case R.id.btn_study6: intent = new Intent(StudyActivity.this, DeepSeaActivity.class); break; } startActivity(intent); } } private void setClickListener(){ OnClick onClick = new OnClick(); btnStudy1.setOnClickListener(onClick); btnStudy2.setOnClickListener(onClick); btnStudy3.setOnClickListener(onClick); btnStudy4.setOnClickListener(onClick); btnStudy5.setOnClickListener(onClick); btnStudy6.setOnClickListener(onClick); //每个button都调用监听,并用上面的方法 }}
侧滑
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.TextView;import com.example.myfirst.util.DBHelper;import com.example.myfirst.util.SlideMenu;import com.example.myfirst.util.User;import java.util.ArrayList;public class SlideActivity extends AppCompatActivity { private ImageView mIvHead; private SlideMenu slideMenu; private Button buttonStudy; private Button buttonRelax; private Button buttonToEdit; private TextView mTvUsername,mTvSex,mTvAge,mTvFavorite,mTvSignature; private DBHelper dbHelper; public static SlideActivity slideActivity; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_slide); slideActivity = this; mIvHead = findViewById(R.id.iv_head); slideMenu = findViewById(R.id.slideMenu); buttonStudy = findViewById(R.id.btn_study); buttonRelax = findViewById(R.id.btn_relax); buttonToEdit = findViewById(R.id.bt_toEdit); mTvUsername = findViewById(R.id.tv_username); //用户信息显示控件 mTvSex = findViewById(R.id.tv_userSex); mTvAge = findViewById(R.id.tv_userAge); mTvFavorite = findViewById(R.id.tv_userFavorite); mTvSignature = findViewById(R.id.tv_userSignature); mIvHead.setOnClickListener(v -> slideMenu.switchMenu()); setClickListener(); dbHelper = new DBHelper(this); showUserInformation(); }//由于button太多,设计一个方法,设计方法之前写好要调用的类 private class OnClick implements View.OnClickListener{ //新建私有类OnClick,实现View.OnClickListener @Override //重写onClick方法 public void onClick(View view) { Intent intent = null; switch (view.getId()){ case R.id.btn_study: intent = new Intent(SlideActivity.this,StudyActivity.class); break; case R.id.btn_relax: intent = new Intent(SlideActivity.this,RelaxActivity.class); break; case R.id.bt_toEdit: intent = new Intent(SlideActivity.this,EditInformationActivity.class); } startActivity(intent); } }//设计方法 private void setClickListener(){ OnClick onClick = new OnClick(); //在OnClick新建onClick实体,否则36行OnClick是灰色的,也就是没被调用 buttonStudy.setOnClickListener(onClick); //每个button都调用监听,并用上面的方法 buttonRelax.setOnClickListener(onClick); buttonToEdit.setOnClickListener(onClick); } private void showUserInformation() { //建立获取用户信息的方法 ArrayList userData2 = dbHelper.getData(); //创建User队列 userData2 User user = userData2.get(LoginActivity.getUserId()); //创建一个实体user,并获取当前用户id的数据 mTvUsername.setText(user.getName()); mTvAge.setText(user.getAge()); mTvSex.setText(user.getSex()); mTvFavorite.setText(user.getFavorite()); //分别获取用户信息到TV控件 mTvSignature.setText(user.getSignature()); }}
这里是使用了别人封装好的类,👇(顺带一提,小姐姐在b站的教学视频很好) b站材料1-代码之侧滑界面的java文件_小小小白冷的博客-CSDN博客
package com.example.myfirst.util;import android.content.Context;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;import android.widget.FrameLayout;import android.widget.Scroller;public class SlideMenu extends FrameLayout { private View menuView,mainView; private int menuWidth; private Scroller scroller; public SlideMenu(Context context) { super(context); init(); } public SlideMenu(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init(){ scroller = new Scroller(getContext()); } @Override protected void onFinishInflate() { super.onFinishInflate(); menuView = getChildAt(0); mainView = getChildAt(1); menuWidth = menuView.getLayoutParams().width; } //使Menu也具有滑动功能 public boolean onInterceptTouchEvent(MotionEvent ev){ switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: downX = (int) ev.getX(); break; case MotionEvent.ACTION_MOVE: int deltaX = (int) (ev.getX() - downX); if (Math.abs(deltaX) > 8){ return true; } break; } return super.onInterceptTouchEvent(ev); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { menuView.layout(-menuWidth, 0, 0, b); mainView.layout(0, 0, r, b); } private int downX; public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: downX = (int) event.getX(); break; case MotionEvent.ACTION_MOVE: int moveX = (int) event.getX(); int deltaX = moveX - downX; int newScrollX = getScrollX() - deltaX; if (newScrollX < -menuWidth) newScrollX = -menuWidth; if (newScrollX > 0) newScrollX = 0; scrollTo(newScrollX, 0); downX = moveX; break; case MotionEvent.ACTION_UP: //当滑动距离小于Menu宽度的一半时,平滑滑动到主页面 if(getScrollX()>-menuWidth/2){ closeMenu(); }else { //当滑动距离大于Menu宽度的一半时,平滑滑动到Menu页面 openMenu(); } break; } return true; } //关闭menu private void closeMenu(){ scroller.startScroll(getScrollX(),0,0-getScrollX(),0,400); invalidate(); } //打开menu private void openMenu(){ scroller.startScroll(getScrollX(),0,-menuWidth-getScrollX(),0,400); invalidate(); } public void computeScroll(){ super.computeScroll(); if(scroller.computeScrollOffset()){ //返回true,表示动画没结束 scrollTo(scroller.getCurrX(),0); invalidate(); } } public void switchMenu(){ if(getScrollX()==0){ openMenu(); }else { closeMenu(); } }}
每个网页activity的内容步骤都一样,这里以菜鸟编程为例
package com.example.myfirst;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.ProgressBar;import com.example.myfirst.util.SetProgressBar;import com.example.myfirst.util.SetWebView;public class RunoobActivity extends AppCompatActivity { private WebView webView; private String url = "https://www.runoob.com/"; private ProgressBar progressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_runoob); webView = findViewById(R.id.wv_runOob); progressBar = findViewById(R.id.pb_run_oob); SetProgressBar.setProgressBar(webView,progressBar); SetWebView.setWebView(webView,url); }}
package com.example.myfirst.util;import android.webkit.WebSettings;import android.webkit.WebView;import android.webkit.WebViewClient;public class SetWebView { public static void setWebView(WebView webView,String url){ webView.getSettings().setSupportZoom(true); //设置可以支持缩放 webView.getSettings().setBuiltInZoomControls(true); //设置出现缩放工具 webView.getSettings().setUseWideViewPort(true); //扩大比例的缩放 webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //自适应屏幕,也就是不能左右滑动 webView.getSettings().setLoadWithOverviewMode(true); //加载完全缩小的WebView webView.getSettings().setjavascriptEnabled(true); //支持JavaScript webView.getSettings().setAppCacheEnabled(true); //开启应用缓存 webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); //设置缓存模式 webView.getSettings().setDomStorageEnabled(true); //开启 DOM storage api 功能 webView.setWebViewClient(new WebViewClient(){ //防止访问网页时跳转到外部页面 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //防止跳转到外部浏览器 return false; } }); webView.loadUrl(url); }}
package com.example.myfirst.util;import android.view.View;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.widget.ProgressBar;public class SetProgressBar { //单独建立一个加载进度条的类和方法 public static void setProgressBar(WebView webView,ProgressBar progressBar){ webView.setWebChromeClient(new WebChromeClient(){ @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if (newProgress == 100){ progressBar.setVisibility(View.GONE); //加载完成后消失 }else { progressBar.setVisibility(View.VISIBLE); //未加载完成则可见 progressBar.setProgress(newProgress); //让控件获取当前加载进度 } } }); }}
package com.example.myfirst.util;import android.annotation.SuppressLint;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import java.util.ArrayList;public class DBHelper extends SQLiteOpenHelper { private SQLiteDatabase db; public DBHelper(Context context){ //构造函数 super(context,"db_thisApp",null,1); db = getReadableDatabase(); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table if not exists user(" + "_id integer primary key autoincrement,"+ "name text,"+ "password text," + "sex text," + "age text," + "favorite text," + "signature text" + ")"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("drop table if exists user"); onCreate(db); } public boolean add(String name, String password){ //验证用户名是否已存在并注册 boolean judge2 = true; ArrayList userData = this.getData(); //在User list创建一个实例userData,并让userData获取数据库里的数据 for (int i = 0; i < userData.size(); i++){ User user = userData.get(i); if (name.equals(user.getName())){ judge2 = false; break; } //遍历user id,当输入的用户名已存在则false } if (judge2){ db.execSQL("insert into user(name,password) values(?,?)", new Object[]{name,password}); } return judge2; } // 需要用Object[]把值传进 ?中 public void delete(String name,String password){ db.execSQL("delete from user where name = and password =" + name + password); } public void update(String name,String password){ db.execSQL("update user set password = ?",new Object[]{password}); } public void updateUsername(String name){ db.execSQL("update user set name = ?", new Object[]{name}); //创建一个更新用户信息的DB方法 } public void updateSex(String sex){ db.execSQL("update user set sex = ?", new Object[]{sex}); } public void updateAge(String age){ db.execSQL("update user set age = ?", new Object[]{age}); } public void updateFavorite(String favorite){ db.execSQL("update user set favorite = ?", new Object[]{favorite}); } public void updateSignature(String signature){ db.execSQL("update user set signature = ?", new Object[]{signature}); } public ArrayList getData(){ //从数据库获取数据到list中 ArrayList userList = new ArrayList(); //队列,以User结构建立队列,也就是建立User队列 Cursor cursor = db.query("user",null,null, null, null, null, "name desc"); while (cursor.moveToNext()){ //因为value must be>0,所以不能使用moveToFirst,否则程序会崩溃: @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex("name")); @SuppressLint("Range") String password = cursor.getString(cursor.getColumnIndex("password")); @SuppressLint("Range") String sex = cursor.getString(cursor.getColumnIndex("sex")); @SuppressLint("Range") String age = cursor.getString(cursor.getColumnIndex("age")); @SuppressLint("Range") String favorite = cursor.getString(cursor.getColumnIndex("favorite")); @SuppressLint("Range") String signature = cursor.getString(cursor.getColumnIndex("signature")); userList.add(new User(name,password,sex,age,favorite,signature)); } cursor.close(); //游标一定要关掉!!!不然遍历过后会停留在最后一个位置,语句的位置也很讲究 return userList; //从表中遍历的值依次存入list中 }}
这里考虑到真实情况下,用户进去可能只更新一种属性,所以把用户的每种属性实现了单独更新
package com.example.myfirst.util;public class User { //构造User结构 private String name; private String password; private String sex,age,favorite,signature; public User(String name,String password,String sex,String age,String favorite,String signature){ this.name = name; this.password = password; this.sex = sex; this.age = age; this.favorite = favorite; this.signature = signature; } public String getName() { return name; } public String getPassword() { return password; } public String getSex(){ return sex; } public String getAge(){ return age; } public String getFavorite(){ return favorite; } public String getSignature(){ return signature; }}
这个是用来学习而创建的,上面的一些activity都用到了这里面的方法,无关紧要,可以直接Toast.makeText()
package com.example.myfirst.util;import android.content.Context;import android.widget.Toast;public class ToastUtil { public static Toast mToast; public static void showMsg(Context context,String msg){ if(mToast == null){ mToast = Toast.makeText(context,msg,Toast.LENGTH_SHORT); } else{ mToast.setText(msg); } mToast.show(); } }
这个项目是边学边做的,所以有些注释看起来是多余的,而且有些地方肯定不够好,有时间再学习并实现 用户上传头像功能,搜索并添加好友功能
下面是整个项目的压缩包,需要的可以自取
链接:https://pan.baidu.com/s/1vvN-xUjXGXVjJri4RWofQQ?pwd=vjif
提取码:vjif
项目里还加了更换头像的功能,不过只适应较低的安卓版本,大概不超过安卓9吧,个别手机系统也不行,比如小米和vivo
这是7月弄的,很就没碰了,最近在弄微信小程序,所以要是有什么问题问我可能答不上来,请见谅
来源地址:https://blog.csdn.net/Ice1774/article/details/124564436
--结束END--
本文标题: 安卓studio 个人课设项目:“这个app“——实现注册登录,显示用户信息功能,并跳转对应网页
本文链接: https://www.lsjlt.com/news/408622.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0