家庭记账本app实现登录注册界面以及仿微信操作界面(共4个实现一个)遇到了麻烦
Posted dazhi151
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了家庭记账本app实现登录注册界面以及仿微信操作界面(共4个实现一个)遇到了麻烦相关的知识,希望对你有一定的参考价值。
今天学习了数据的创建,以及关于数据库的相关操作。
今天主要是实现了对于数据库的增加和查找。
具体的代码如下:
首先是数据库的创建:
DBOpenMessage.java
package com.example.thetrueappwen;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import androidx.annotation.Nullable;
public class DBOpenMessage extends SQLiteOpenHelper
{
final String db_wen2="create table db_wen2 (_id integer primary key autoincrement,username varchar,usermoney integer,userevent varchar,userkind varchar,userdata varchar,usertime varchar)";
public DBOpenMessage(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(db_wen2);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.i("数据","更新"+"oldVerSion"+"-->"+newVersion);
}
}
这是其中的一个数据库的创建。
现在一共创建了两个数据库的表格。在此先展示一个。
对应的要完成app的登录和注册。
对应的代码如下:
MainActivity.java
package com.example.thetrueappwen;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private DBOpenMessageUser messageuser;
private EditText username,password;
private Button login,register;
private String passwordstr="";
private String usernamestr="";
private String passwordstr2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建数据库对象
messageuser=new DBOpenMessageUser(MainActivity.this,"db_wen",null,1);
putusername();
username=(EditText)findViewById(R.id.username1);
password=(EditText)findViewById(R.id.password1);
login=(Button)findViewById(R.id.button_login);
register=(Button)findViewById(R.id.button_register);
//点击登录后的判断
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
usernamestr=username.getText().toString();
passwordstr=password.getText().toString();
Cursor cursor1=messageuser.getReadableDatabase().query("db_wen",null,"username=?",new String[]{usernamestr},null,null,null);
//显示表名、限制列、条件、值、其他的默认
if(usernamestr.equals("")||passwordstr.equals(""))
{
Toast.makeText(MainActivity.this,"请填写齐全",Toast.LENGTH_SHORT).show();
}
if(cursor1.moveToFirst())
{
do {
passwordstr2=cursor1.getString(cursor1.getColumnIndex("password"));
}while(cursor1.moveToNext());
}
cursor1.close();
if(password.getText().toString().equals(passwordstr2)&&!usernamestr.equals("")&&!passwordstr.equals(""))
{
Toast.makeText(MainActivity.this,"恭喜登录成功",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(MainActivity.this,AllWord.class);
//传递参数在intent中
intent.putExtra("username",usernamestr);
startActivity(intent);
}
else
{
Toast.makeText(MainActivity.this,"账号不存在,不能进行登录",Toast.LENGTH_SHORT).show();
username.setText("");
password.setText("");
Toast.makeText(MainActivity.this,"请确认信息在登录",Toast.LENGTH_SHORT).show();
}
}
});
//注册页面的相关操作
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,Register.class);
startActivity(intent);
}
});
}
private void putusername()
{
//
//传递数值
WeixinFragment11 myFragment4 = new WeixinFragment11();
Bundle bundle4 = new Bundle();
bundle4.putString("username",usernamestr);
myFragment4.setArguments(bundle4);
}
}
还有就是:
register2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
username_str=reg_username.getText().toString();
password_str1=reg_password1.getText().toString();
password_str2=reg_password2.getText().toString();
if(password_str1.equals("")||password_str2.equals("")||username_str.equals(""))
{
Toast.makeText(Register.this,"存在没有填写的项目",Toast.LENGTH_SHORT).show();
Toast.makeText(Register.this,"请重新输入",Toast.LENGTH_SHORT).show();
}
else if(password_str1.equals(password_str2))
{
insterData(messageregister.getReadableDatabase(),username_str,password_str1);
//进行数据库的数据增加
Toast.makeText(Register.this,"注册成功",Toast.LENGTH_SHORT).show();
Toast.makeText(Register.this,"可以登录了",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Register.this,MainActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(Register.this,"输入的两次密码不一致",Toast.LENGTH_LONG).show();
Toast.makeText(Register.this,"请重新输入",Toast.LENGTH_SHORT).show();
reg_password1.setText("");
reg_password2.setText("");
}
package com.example.thetrueappwen;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class Register extends AppCompatActivity
{
private DBOpenMessageUser messageregister;
private Button login2,register2;
private EditText reg_password1,reg_password2,reg_username;
private String username_str="";
private String password_str1="";
private String password_str2="";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
//创建数据库对象
messageregister=new DBOpenMessageUser(Register.this,"db_wen",null,1);
login2=(Button)findViewById(R.id.login2);
register2=(Button)findViewById(R.id.register2);
reg_password1=(EditText)findViewById(R.id.reg_password1);
reg_password2=(EditText)findViewById(R.id.reg_password2);
reg_username=(EditText)findViewById(R.id.reg_username);
//返回登录界面
login2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(Register.this,MainActivity.class);
Toast.makeText(Register.this,"欢迎来到登录界面",Toast.LENGTH_SHORT).show();
startActivity(intent);
}
});
//确定注册界面
register2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
username_str=reg_username.getText().toString();
password_str1=reg_password1.getText().toString();
password_str2=reg_password2.getText().toString();
if(password_str1.equals("")||password_str2.equals("")||username_str.equals(""))
{
Toast.makeText(Register.this,"存在没有填写的项目",Toast.LENGTH_SHORT).show();
Toast.makeText(Register.this,"请重新输入",Toast.LENGTH_SHORT).show();
}
else if(password_str1.equals(password_str2))
{
insterData(messageregister.getReadableDatabase(),username_str,password_str1);
//进行数据库的数据增加
Toast.makeText(Register.this,"注册成功",Toast.LENGTH_SHORT).show();
Toast.makeText(Register.this,"可以登录了",Toast.LENGTH_SHORT).show();
Intent intent=new Intent(Register.this,MainActivity.class);
startActivity(intent);
}
else
{
Toast.makeText(Register.this,"输入的两次密码不一致",Toast.LENGTH_LONG).show();
Toast.makeText(Register.this,"请重新输入",Toast.LENGTH_SHORT).show();
reg_password1.setText("");
reg_password2.setText("");
}
}
});
}
private void insterData(SQLiteDatabase sqLiteDatabase, String username, String password)
{
ContentValues values=new ContentValues();
values.put("username",username);
values.put("password",password);
sqLiteDatabase.insert("db_wen",null,values);
}
@Override
protected void onDestroy()
{
super.onDestroy();
if(messageregister!=null)
messageregister.close();
}
}
解决了各个网页之间的信息的传递:
具体的截图如下:
这里的遇到的主要错误是对于参数的相互传递:
刚开始想用的是Bundle来进行activity向fragment传递参数;具体的网上的代码简单如下操作:
//Activity传值,通过Bundle
Bundle bundle = new Bundle();
bundle.putString("MainActivity", "Hello,Fragment");
//首先有一个Fragment对象 调用这个对象的setArguments(bundle)传递数据
myFragment.setArguments(bundle);
//点击按钮接受Fragment传回来的值
btn_send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = myFragment.getArguments();
String result = bundle.getString("MyFragment");
Toast.makeText(MainActivity.this, result, Toast.LENGTH_LONG).show();
}
});
接收数据
//点击按钮接收Activity传过来的值
btn_fragment.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = getArguments();
String result = bundle.getString("MainActivity");
Toast.makeText(getActivity(), result, Toast.LENGTH_LONG).show();
}
});
//Fragment回传值给Activity
getArguments().putString("MyFragment", "Hello,Activity");
这里就是对于boudle的简单的操作。
但是由于一些原因。当接收到的时候,得到的Boudle的参数对于他的操作得到getString会出现空指针的错误。
经过一些处理。发现和Fragment和activity之间的传递时间等相关因素。收到影响。最后弄了好几个小时一直没解决问题。
但是用onAttach解决了参数传递之间的问题,解决了Boudle在我笔记上不能传递的没有解决的问题。
解决了数据库修改后,需要卸载原有的程序在进行安装运行,才可以完成修改之后的代码。
以上是关于家庭记账本app实现登录注册界面以及仿微信操作界面(共4个实现一个)遇到了麻烦的主要内容,如果未能解决你的问题,请参考以下文章
android 仿微信demo————微信顶部操作栏界面实现