草庐IT

java.lang.NumberFormatException : Invalid int: "null" 异常

coder 2023-07-21 原文

方法 getAllActivities() 必须以数组列表格式从数据库返回所有 Activity 但我得到了:java.lang.NumberFormatException: Invalid int: "null", 在 activity.setActivityType(Integer.parseInt(cursor.getString(1))); 不知道怎么回事

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import com.yast.util.Constants;
import com.yast.util.Utils;
import java.util.ArrayList;
import java.util.List;


public class DatabaseHandler extends SQLiteOpenHelper {
    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "YastDB.db";

    // Activities table name
    private static final String TABLE_ACTIVITIES = "Activities";

    // Activities Table Columns names
    private static final String KEY_ID = "id";
    private static final String KEY_ACTIVITYTYPE = "ActivityType";
    private static final String KEY_HARTRATE = "HartRate";
    private static final String KEY_HARTBATNO = "HartBatNo";
    private static final String KEY_DISTANCE = "Distance";
    private static final String KEY_SPEED = "Speed";
    private static final String KEY_STRIDES = "Strides";
    private static final String KEY_STARTDATETIME = "StartDateTime";
    private static final String KEY_ENDDATETIME = "EndDateTime";
    public static final String  KEY_CURRENTDATETIME = "CurrentDateTime";

    private String[] PROJECTION = new String[]{ KEY_ID,
            KEY_ACTIVITYTYPE, KEY_HARTRATE,KEY_HARTBATNO, KEY_DISTANCE,
            KEY_SPEED,KEY_STRIDES,KEY_STARTDATETIME,KEY_ENDDATETIME
            ,KEY_CURRENTDATETIME};

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    // Creating Tables
    @Override
    public void onCreate(SQLiteDatabase db) {
        String CREATE_Activitys_TABLE = "CREATE TABLE " + TABLE_ACTIVITIES + "("
                + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                KEY_ACTIVITYTYPE + " INTEGER,"+
                KEY_HARTRATE + " INTEGER, "+
                KEY_HARTBATNO + " INTEGER,"+
                KEY_DISTANCE + " INTEGER," +
                KEY_SPEED + " INTEGER," +
                KEY_STRIDES + " INTEGER," +
                KEY_STARTDATETIME + " TEXT," +
                KEY_ENDDATETIME + " TEXT," +
                KEY_CURRENTDATETIME + " TEXT" +
                ")";
        db.execSQL(CREATE_Activitys_TABLE);
    }

    // Upgrading database
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // Drop older table if existed
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ACTIVITIES);

        // Create tables again
        onCreate(db);
    }

    //CRUD operations (Create, Read, Update and Delete)
    // Adding new activity
    public void addActivity(ActivityEntity activity) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_ACTIVITYTYPE, activity.getActivityType()); // Activity type
        values.put(KEY_HARTRATE, activity.getHartRate());
        values.put(KEY_HARTBATNO, activity.getHartBatNo());
        values.put(KEY_DISTANCE, activity.getDistance());
        values.put(KEY_SPEED, activity.getSpeed());
        values.put(KEY_STRIDES, activity.getStrides());
        values.put(KEY_STARTDATETIME,activity.getStartDateTime().toString());
        values.put(KEY_ENDDATETIME, activity.getEndDateTime().toString());
        values.put(KEY_CURRENTDATETIME, activity.getCurrentDateTime().toString());

        // Inserting Row
        db.insert(TABLE_ACTIVITIES, null, values);
        db.close(); // Closing database connection

    }

    // Getting single Activity
    /*
    The following method getActivity() will read single contact row.
    It accepts id as parameter and will return the matched row from the database.
     */
    public ActivityEntity getActivity(int id) {
        ActivityEntity activity = null;
        SQLiteDatabase db = this.getReadableDatabase();

        String where = KEY_ID + "=?";
        String[] selectionArg = new String[]{String.valueOf(id)};

        Cursor cursor = db.query(TABLE_ACTIVITIES, PROJECTION, where, selectionArg,
 null, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();

            activity = new ActivityEntity(Integer.parseInt(cursor.getString(0)),
                    Integer.parseInt(cursor.getString(1)),
                    Integer.parseInt(cursor.getString(2)),
                    Integer.parseInt(cursor.getString(3)),
                    Integer.parseInt(cursor.getString(4)),
                    Integer.parseInt(cursor.getString(5)),
                    Integer.parseInt(cursor.getString(6)),
                    cursor.getString(7),
                    cursor.getString(8),
                    cursor.getString(9));
        }
        return activity;
    }

    // Getting All Activities
    public ArrayList<ActivityEntity> getAllActivitys() {

        ArrayList<ActivityEntity> activitiesList = new ArrayList<ActivityEntity>();
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.query(TABLE_ACTIVITIES, PROJECTION, null, null, null, null, null, null);

        // looping through all rows and adding to list
        if (cursor.moveToFirst()) {
            do {
                ActivityEntity activity = new ActivityEntity();
                activity.setID(Integer.parseInt(cursor.getString(0)));
                activity.setActivityType(Integer.parseInt(cursor.getString(1)));
                activity.setHartRate(Integer.parseInt(cursor.getString(2)));
                activity.setHartBatNo(Integer.parseInt(cursor.getString(3)));
                activity.setDistance(Integer.parseInt(cursor.getString(4)));
                activity.setSpeed(Integer.parseInt(cursor.getString(5)));
                activity.setStrides(Integer.parseInt(cursor.getString(6)));
                activity.setStartDateTime(cursor.getString(7));
                activity.setEndDateTime(cursor.getString(8));
                activity.set_currentDateTime(cursor.getString(9));

                // Adding activity to list
                activitiesList.add(activity);
            } while (cursor.moveToNext());

        }
        return activitiesList;
    }


    public int getActivitiesCount() {

        String countQuery = "SELECT  * FROM " + TABLE_ACTIVITIES;
        SQLiteDatabase db = this.getReadableDatabase();
        Cursor cursor = db.rawQuery(countQuery, null);
        cursor.close();

        // return count
        return cursor.getCount();
    }

    // Updating single Activity
    public int updateActivity(ActivityEntity activity) {
            SQLiteDatabase db = this.getWritableDatabase();

            String where = KEY_ID + "=?";

            ContentValues values = new ContentValues();
            values.put(PROJECTION[1], activity.getActivityType());
            values.put(PROJECTION[2], activity.getHartRate());
            values.put(PROJECTION[3], activity.getHartBatNo());
            values.put(PROJECTION[4], activity.getDistance());
            values.put(PROJECTION[5], activity.getSpeed());
            values.put(PROJECTION[6], activity.getStrides());
            values.put(PROJECTION[7], activity.getStartDateTime().toString());
            values.put(PROJECTION[8], activity.getEndDateTime().toString());
            values.put(PROJECTION[9], activity.getCurrentDateTime().toString());


            // updating row
            return db.update(TABLE_ACTIVITIES, values, where, new String[] { String.valueOf(activity.getID()) });
    }

    public void deleteActivity(ActivityEntity activity)
    {
        String where = KEY_ID + "=?";

        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_ACTIVITIES, where,
                new String[] { String.valueOf(activity.getID()) });
        db.close();
    }

    public void bulkInsert(ArrayList<ActivityEntity> arrayOfActivities) {
        SQLiteDatabase db = this.getWritableDatabase();
        String sql = "INSERT INTO "+ TABLE_ACTIVITIES +" VALUES (?,?,?,?,?,?,?,?,?,?);";
        SQLiteStatement statement = db.compileStatement(sql);
        db.beginTransaction();
       for (ActivityEntity a : arrayOfActivities ) {
            statement.clearBindings();
            statement.bindLong(1, (long) a.getID());
            statement.bindLong(2, (long) a.getActivityType());
            statement.bindLong(3, (long) a.getHartRate());
            statement.bindLong(4, (long) a.getHartBatNo());
            statement.bindLong(5, (long) a.getDistance());
            statement.bindLong(6, (long) a.getSpeed());
            statement.bindLong(7, (long) a.getStrides());
            statement.bindString(8, a.getStartDateTime());
            statement.bindString(9, a.getEndDateTime());
            statement.bindString(10,a.getCurrentDateTime());

            statement.clearBindings();
            statement.execute();
        }
        db.setTransactionSuccessful();
        db.endTransaction();
    }


}

ActivityEntity.java 调用:

import com.yast.util.Constants;
import com.yast.util.Utils;
import java.util.Date;

public class ActivityEntity {

    int id;
    int activityType;
    int hartRate;
    int hartBatNo;
    int distance;
    int speed;
    int strides;
    String startDateTime;
    String endDateTime;
    String currentDateTime;

    public ActivityEntity(){

    }
    // constructor
    public ActivityEntity(int Id, int activityType, int hartRate, int _hartBatNo, int distance, int speed, int strides, String startDateTime, String endDateTime, String currentDateTime){
        this.id = Id;
        this.activityType = activityType;
        this.hartRate = hartRate;
        this.hartBatNo = _hartBatNo;
        this.distance = distance;
        this.speed = speed;
        this.strides = strides;
        this.startDateTime = startDateTime;
        this.endDateTime = endDateTime;
        this.currentDateTime = currentDateTime;
    }
    public void setID(int id){
        this.id = id;
    }
    public int getID(){
        return this.id;
    }
    public void setActivityType(int activityType){
        this.activityType = activityType;
    }
    public int getActivityType(){
        return this.activityType;
    }
    public void setHartRate(int hartRate){
        this.hartRate = hartRate;
    }

    public int getHartRate(){
        return this.hartRate;
    }
    public void setHartBatNo(int hartBatNo){
        this.hartBatNo = hartBatNo;
    }
    public int getHartBatNo(){
        return this.hartBatNo;
    }

    public void setDistance(int distance){
        this.distance = distance;
    }

    public int getDistance(){
        return this.distance;
    }

    public void setSpeed(int speed){
        this.speed = speed;
    }

    public int getSpeed(){
        return this.speed;
    }

    public void setStrides(int strides){
        this.strides = strides;
    }

    public int getStrides(){
        return this.strides;
    }

    public void setStartDateTime(String startDateTime){
        this.startDateTime = startDateTime;
    }

    public String getStartDateTime(){
        return this.startDateTime;
    }

    public void setEndDateTime(String endDateTime){
        this.endDateTime = endDateTime;
    }

    public String getEndDateTime(){
        return this.endDateTime;
    }

    public void set_currentDateTime(String currentDateTime){
        this.currentDateTime = currentDateTime;
    }
    public String getCurrentDateTime(){
        return this.currentDateTime;
    }

    @Override
    public String toString() {
        return "ActivityEntity{" +
                "id=" + id +
                ", activityType=" + activityType +
                ", hartRate=" + hartRate +
                ", hartBatNo=" + hartBatNo +
                ", distance=" + distance +
                ", speed=" + speed +
                ", strides=" + strides +
                ", startDateTime='" + startDateTime + '\'' +
                ", endDateTime='" + endDateTime + '\'' +
                ", currentDateTime='" + currentDateTime + '\'' +
                '}';
    }
}

最佳答案

在您的代码中,如果 cursor.getString(int num) 返回 null,则 Integer.parseInt(String str)将抛出 NumberFormatException

为避免这种情况,您应该检查 cursor.getString(int num) 返回的内容。

或者,如果出现 NumberFormatException,您可以使用 try-catch 并在 catch 中打印适当的消息。

关于java.lang.NumberFormatException : Invalid int: "null" 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24910757/

有关java.lang.NumberFormatException : Invalid int: "null" 异常的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  2. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  3. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  4. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  5. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  6. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  7. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

  8. 使用 ACL 调用 upload_file 时出现 Ruby S3 "Access Denied"错误 - 2

    我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file

  9. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  10. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

随机推荐