20210205日报

今天学习了数据的创建,以及关于数据库的相关操作。

今天主要是实现了对于数据库的增加和查找。

具体的代码如下:

首先是数据库的创建:

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/Clark-Shao/p/14881890.html