• 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

  • 相关阅读:
    课堂作业04 2017.10.27
    课程作业 03 动手动脑 2017.10.20
    课程作业 03 2017.10.20
    HDU 3974 Assign the task
    POJ 2155 Matrix
    POJ 2481 Cows
    HDU 3038 How Many Answers Are Wrong
    CS Academy Array Removal
    POJ_1330 Nearest Common Ancestors LCA
    CF Round 427 D. Palindromic characteristics
  • 原文地址:https://www.cnblogs.com/rainbow-1/p/14486145.html
Copyright © 2020-2023  润新知