家庭记账本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在我笔记上不能传递的没有解决的问题。

解决了数据库修改后,需要卸载原有的程序在进行安装运行,才可以完成修改之后的代码。

原文地址:https://www.cnblogs.com/dazhi151/p/12266927.html

时间: 02-05

家庭记账本app实现登录注册界面以及仿微信操作界面(共4个实现一个)遇到了麻烦的相关文章

家庭记账本app进度之ui相关概念控制ui界面与布局管理

ui就是用户界面设计的意思. 首先是view,view相当于窗户上的玻璃. 1.android:id属性.android:id="@+id/user".他的id是user前面的@+id是固定的写法. 2.android.background.当应用图片资源的时候这样写需要经名字为bg的相关图片般存在mi pmap这个里面才可以使用. 这样是设置背景颜色.后边是16进制的颜色 3.android.padding属性设置上下左右四个方向的内边距 这样写就是上下左右都一样这是分别进行设置的.

家庭记账本app进度之android中AlertDialog的相关应用以及对日期时间的相关操作(应用alertdialog使用的谈话框)

对于AlertDialog的相关知识: 1.创建构造器AlertDialog.Builder的对象:    2.通过构造器对象调用setTitle.setMessage.setIcon等方法构造对话框的标题.信息和图标等内容:    3.根据需要调用setPositive/Negative/NeutralButton()方法设置正面按钮.负面按钮和中立按钮:    4.调用构造器对象的create方法创建AlertDialog对象:    5.AlertDialog对象调用show方法,让对话框

进度2_家庭记账本App

今天在昨天的基础上,相继完成了三个页面的布局和显示情况: 新增加的xml文件如下: activity_add.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/a

家庭记账本app进度之下拉框和数字转轮的相关应用

这次主要是悬系的下拉框Spinner和数字转轮NumberPicker的使用.先分析相关的用到的知识点. 在Android中,用string-array是一种简单的提取XML资源文件数据的方法. 例子如下: 把相应的数据放到values文件夹的arrays.xml文件里 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="city&quo

家庭记账本Android登录界面

MainActivity.java package com.example.logindemo; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onC

Android ActionBar应用实战,高仿微信主界面的设计

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/26365683 经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了.唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是真正投入到项目实战当中时会不会掉链子还很难说.那么不用担心,本篇文章我就将带领大家一起进入ActionBar的应用实战,将理论和实践完美结合到一起. 如果你还没有看过我的前两篇文章,建议先去阅读一下 Andr

android 仿微信聊天界面,以及语音录制功能

extends:http://104zz.iteye.com/blog/1709840 本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图:     第一:chat.xml设计 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" an

安卓开发复习笔记——ViewPager组件(仿微信引导界面&gt;)

这2天事情比较多,都没时间更新博客,趁周末,继续继续~ 今天来讲个比较新潮的组件——ViewPager 什么是ViewPager? ViewPager是安卓3.0之后提供的新特性,继承自ViewGroup,专门用以实现左右滑动切换View的效果. 如果想向下兼容就必须要android-support-v4.jar这个包的支持,这是一个来自google提供的一个附加包. 通俗点来讲,就是现在市面上大多数app,安装完第一次打开软件会出现的一个左右滑动的引导界面. 先来看下效果图:     这是一个

iOS_29仿微信聊天界面

最终效果图: 自定义cell的封装 BeyondCell // // BeyondCell.h // 29_仿微信聊天 // // Created by beyond on 14-9-4. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> @class BeyondCellFrame; @interface BeyondCell : UITableViewCell // 一行自定