【已解决】Android学习---注册和登录功能模块合并报错以及解决办法

问题①

我在另外一个项目里写了一个注册和登录功能的几个文件,当我想把这些代码和另一个文件合起来的时候就出现了问题。

首先不可以直接把另外一个项目的某个文件直接复制过来,

最好的办法是重新新建一个相同名字的文件,然后去另一个文件里复制代码(除了包名不要复制,其他都可以)。

然后所有的activity文件都要在AndroidManifest文件里面注册

 1 <application
 2         android:allowBackup="true"
 3         android:icon="@mipmap/ic_launcher"
 4         android:label="@string/app_name"
 5         android:roundIcon="@mipmap/ic_launcher_round"
 6         android:supportsRtl="true"
 7         android:theme="@style/Theme.HelloWorld">
 8         <meta-data
 9             android:name="com.baidu.lbsapi.API_KEY"
10             android:value="SmUC55wktbFHpYaLz7DLNeOdy4ScE5qH">
11         </meta-data>
12         <service
13             android:name="com.baidu.location.f"
14             android:enabled="true"
15             android:process=":remote">
16         </service>
17 
18         <activity android:name=".MainActivity">
19         </activity>
20         <activity android:name=".SecondActivity"></activity>

21    <activity android:name=".loginActivity"> 22 <intent-filter> 23 <action android:name="android.intent.action.MAIN" /> 24 25 <category android:name="android.intent.category.LAUNCHER" /> 26 </intent-filter> 27 </activity>
<!--
  这一部分代码 <intent-fillter> 标签里面的部分就是说当这个软件开始运行的时候,哪一个activity是最先被运行的,
  这一段在哪个activity里面被注册就是哪个最先运行。
-->
28 <activity android:name=".RegisterActivity"></activity> 29 </application>

问题② 数据库帮助类的使用

  1 package com.example.helloworld;
  2 
  3 import android.content.Context;
  4 import android.database.Cursor;
  5 import android.database.sqlite.SQLiteDatabase;
  6 import android.database.sqlite.SQLiteOpenHelper;
  7 import android.util.Log;
  8 
  9 import java.util.ArrayList;
 10 
 11 public class DBOpenHelper extends SQLiteOpenHelper {
 12     /**
 13      * 声明一个AndroidSDK自带的数据库变量db
 14      */
 15     private SQLiteDatabase db;
 16 
 17     /**
 18      * 写一个这个类的构造函数,参数为上下文context,所谓上下文就是这个类所在包的路径
 19      * 指明上下文,数据库名,工厂默认空值,版本号默认从1开始
 20      * super(context,"db_test",null,1);
 21      * 把数据库设置成可写入状态,除非内存已满,那时候会自动设置为只读模式
 22      * 不过,以现如今的内存容量,估计一辈子也见不到几次内存占满的状态
 23      * db = getReadableDatabase();
 24      */
 25     public DBOpenHelper(Context context){
 26         super(context,"db_test",null,1);
 27         db = getReadableDatabase();
 28     }
 29 
 30     /**
 31      * 重写两个必须要重写的方法,因为class DBOpenHelper extends SQLiteOpenHelper
 32      * 而这两个方法是 abstract 类 SQLiteOpenHelper 中声明的 abstract 方法
 33      * 所以必须在子类 DBOpenHelper 中重写 abstract 方法
 34      * 想想也是,为啥规定这么死必须重写?
 35      * 因为,一个数据库表,首先是要被创建的,然后免不了是要进行增删改操作的
 36      * 所以就有onCreate()、onUpgrade()两个方法
 37      * @param db
 38      */
 39     @Override
 40     public void onCreate(SQLiteDatabase db){
 41         db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
 42                 "_id INTEGER PRIMARY KEY AUTOINCREMENT," +
 43                 "username TEXT," +
 44                 "userid TEXT,"+
 45                 "userphone TEXT,"+
 46                 "useraddress TEXT)"
 47         );
 48     }
 49     @Override
 50     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
 51         db.execSQL("DROP TABLE IF EXISTS user");
 52         onCreate(db);
 53     }
 54     /**
 55      * 接下来写自定义的增删改查方法
 56      * 这些方法,写在这里归写在这里,以后不一定都用
 57      * add()
 58      * delete()
 59      * update()
 60      * getAllData()
 61      */
 62     public void add(String username,String userid,String userphone,String useraddress){
 63         db.execSQL("INSERT INTO user (username,userid,userphone,useraddress) VALUES(?,?,?,?)",new Object[]{username,userid,userphone,useraddress});
 64     }
 65     public void delete(String userphone){
 66         db.execSQL("DELETE FROM user WHERE userphone = "+userphone);
 67     }
 68     public void updata(String userphone){
 69         db.execSQL("UPDATE user SET userphone = ?",new Object[]{userphone});
 70     }
 71 
 72     /**
 73      * 前三个没啥说的,都是一套的看懂一个其他的都能懂了
 74      * 下面重点说一下查询表user全部内容的方法
 75      * 我们查询出来的内容,需要有个容器存放,以供使用,
 76      * 所以定义了一个ArrayList类的list
 77      * 有了容器,接下来就该从表中查询数据了,
 78      * 这里使用游标Cursor,这就是数据库的功底了,
 79      * 在Android中我就不细说了,因为我数据库功底也不是很厚,
 80      * 但我知道,如果需要用Cursor的话,第一个参数:"表名",中间5个:null,
 81      *                                                     最后是查询出来内容的排序方式:"name DESC"
 82      * 游标定义好了,接下来写一个while循环,让游标从表头游到表尾
 83      * 在游的过程中把游出来的数据存放到list容器中
 84      * @return
 85      */
 86     public ArrayList<User> getAllData(){
 87 
 88         ArrayList<User> list = new ArrayList<User>();
 89         Cursor cursor = db.query("user",null,null,null,null,null,"username DESC");
 90         while(cursor.moveToNext()){
 91             String username = cursor.getString(cursor.getColumnIndex("username"));
 92             String userid = cursor.getString(cursor.getColumnIndex("userid"));
 93             String userphone = cursor.getString(cursor.getColumnIndex("userphone"));
 94             String useraddress = cursor.getString(cursor.getColumnIndex("useraddress"));
 95             list.add(new User(username,userid,userphone,useraddress));
 96         }
 97         Log.v("输出数据库查询结果:",list.toString());
 98         return list;
 99     }
100 }

 


 

添加public void add(String username,String userid,String userphone,String useraddress){

    db.execSQL("INSERT INTO user (username,userid,userphone,useraddress) VALUES(?,?,?,?)"
  ,new Object[]{username,userid,userphone,useraddress});

}
查询方法
public ArrayList<User> getAllData()
ArrayList<User> list = new ArrayList<User>(); Cursor cursor = db.query("user",null,null,null,null,null,"username DESC" while(cursor.moveToNext()){ String username = cursor.getString(cursor.getColumnIndex("username"));
        String userid = cursor.getString(cursor.getColumnIndex("userid"));
String userphone = cursor.getString(cursor.getColumnIndex("userphone"));
String useraddress = cursor.getString(cursor.getColumnIndex("useraddress"));
list.add(new User(username,userid,userphone,useraddress));
}
Log.v("输出数据库查询结果:",list.toString());
return list;
}
1、close()  关闭游标,释放资源
2、getColumnCount()返回所有列的总数
3、getColumnIndexOrThrow(String columnName)
  从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。
4、moveToNext()    
  移动光标到下一行
5、moveToFirst()
  移动光标到第一行
6、moveToPosition(int position)
移动光标到一个绝对的位置
7、moveToPrevious() 移动光标到上一行

数据库构造函数
public DBOpenHelper(Context context){
super(context,"db_test",null,1);
db = getReadableDatabase();
}

onCreate()方法

public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE IF NOT EXISTS user(" +
"_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"username TEXT," +
"userid TEXT,"+
"userphone TEXT,"+
"useraddress TEXT)"
);
}
注意不要丢掉_id 主键
每一段定义后面都有一个英文的逗号、

③实现页面跳转

 

Intent intent2 = new Intent(this, MainActivity.class);
startActivity(intent2);

 

自动获取时间

public void autoTimeAndDate(View view)
{
text2=(EditText)findViewById(R.id.tv_text2);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");// HH:mm:ss
//获取当前时间
Date date = new Date(System.currentTimeMillis());
text2.setText(simpleDateFormat.format(date));
}

//获取当前地址

 1    public LocationClient mLocationClient = null;
 2     private MyLocationListener myListener = new MyLocationListener();
 3     //获取地址
 4     public class MyLocationListener extends BDAbstractLocationListener {
 5         @Override
 6         public void onReceiveLocation(BDLocation location){
 7             //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
 8             //以下只列举部分获取地址相关的结果信息
 9             //更多结果信息获取说明,请参照类参考中BDLocation类中的说明
10             String addr = location.getAddrStr();    //获取详细地址信息
11             String country = location.getCountry();    //获取国家
12             String province = location.getProvince();    //获取省份
13             String city = location.getCity();    //获取城市
14             String district = location.getDistrict();    //获取区县
15             String street = location.getStreet();    //获取街道信息
16             String town = location.getTown();
17             //获取乡镇信息
18             text4=(EditText)findViewById(R.id.tv_text4);
19             text4.setText(country+" " +province+" "+city+" "+district+" "+town+" "+street+" ");
20         }
21     }
22     //自动获取地址
23     public void autoAddress(View view)
24     {
25         mLocationClient = new LocationClient(getApplicationContext());
26         //声明LocationClient类
27         mLocationClient.registerLocationListener(myListener);
28         LocationClientOption option = new LocationClientOption();
29         option.setIsNeedAddress(true);
30         option.setNeedNewVersionRgc(true);
31         mLocationClient.setLocOption(option);
32         //注册监听函数
33         mLocationClient.start();
34     }
所以大概是这样的
LocationClient这个类定义的是用户使用的类
MyLocationLisenter 这个类定义一个监听的工具,BDLocation这个类用来获取具体的地址字符串
mLocationClient.registerLocationListener(myListener);  这句话就是把用户的类和监听类绑定在一起

28-30行的内容是用户对这个地图的选项设置

LocationClientOption lcOption = new LocationClientOption();

//设置定位模式:高精度,低功耗,仅设备
lcOption.setLocationMode(LocationMode.Hight_Accuracy);
//设置坐标系
lcOption.setCoorType("bd09ll");
//设置GPS打开
lcOption.setOpenGps(true);
//设置需要地址信息
lcOption.setIsNeedAddress(true);
//设置每秒更新一次位置信息
lcOption.setScanSpan(1000);
//设置需要位置描述信息
lcOption.setIsNeedLocationDescribe(true);

mBdLocationManager.setLocOption(lcOption);
————————————————
版权声明:本文为CSDN博主「秋天该很好」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36444585/article/details/78152765

posted @ 2021-03-05 14:45  靠谱杨  阅读(316)  评论(0编辑  收藏  举报