GVKun编程网logo

android – sqlite onCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据

21

在这篇文章中,我们将带领您了解android–sqliteonCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据的全貌,同时,我们还将为您介绍有关And

在这篇文章中,我们将带领您了解android – sqlite onCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据的全貌,同时,我们还将为您介绍有关Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么、Android GCM:未在onCreate()方法上获取注册令牌、Android SQLiteOpenHelper:为什么不调用onCreate()方法?、android sql无法创建数据库的知识,以帮助您更好地理解这个主题。

本文目录一览:

android – sqlite onCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据

android – sqlite onCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据

我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据…

public class EventsData extends sqliteOpenHelper {
       private static final String DATABASE_NAME = "events.db";
       private static final int DATABASE_VERSION = 1;


       public EventsData(Context ctx) {
          super(ctx,DATABASE_NAME,null,DATABASE_VERSION);
       }

       @Override
       public void onCreate(sqliteDatabase db) {

          db.execsql("CREATE TABLE " + TABLE_NAME + " (" + _ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT," + TIME
                + " TEXT NOT NULL," + TITLE + " TEXT NOT NULL);");

    //This doesn''t work..
          db.execsql("INSERT INTO"+TABLE_NAME+"VALUES(null,''hello'',''android'');");
       }

       @Override
       public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) {
          db.execsql("DROP TABLE IF EXISTS " + TABLE_NAME);
          onCreate(db);
       }

    }

解决方法

这条线

db.execsql("INSERT INTO"+TABLE_NAME+"VALUES(null,''android'');

在TABLE_NAME周围缺少空格.如果你执行这一行,它就无法工作.

Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么

Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么

如何解决Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么?

假设我在 onCreate 中初始化了一堆东西,然后将应用程序带入后台一个小时。如果 Android 在我继续使用该应用程序时释放了在 onCreate 中初始化的内容,会发生什么情况?会再次调用 onCreate 吗?我之所以这么问是因为我考虑在 onResume 而不是 onCreate 中移动一些东西,如果再次调用 onCreate,这是不必要的。

解决方法

如果 Android 释放在我继续使用应用程序时在 onCreate 内部初始化的内容会怎样?

一般来说,Android 不会这样做。 Android 可能终止您的进程,在这种情况下,一切都会消失,您将在下一次应用启动时从头开始。

但是,如果您的进程设法在后台存活了一个小时,那么大多数事情都会在您离开的地方保持原样。当您的应用移至后台时,某些库可能会专门尝试释放一些内存(例如,缓存在图像加载库中),以尝试降低您的进程被终止以释放系统 RAM 的可能性。

文档有 a bit of material on the process lifecycle。

onCreate 会被再次调用吗?

如果 Android 终止了您的进程,那么是的,将再次调用任何已启动活动的 onCreate()。如果您的进程幸存下来,则 Activity 已经创建,因此不会再次调用 onCreate()onStart()onResume() 在任何一种情况下都会被调用。

文档有 some material on the activity lifecycle。

Android GCM:未在onCreate()方法上获取注册令牌

Android GCM:未在onCreate()方法上获取注册令牌

我正在我的应用程序中嵌入GCM以进行推送通知.我面临一个非常奇怪的问题,在第一次运行时我无法获得GCM注册令牌,但是当您第二次运行我的应用程序时,您将在控制台上打印注册ID.我不知道我在做什么.这是我到目前为止所做的.

这是我想要打印GCM regID的onCreate()方法:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final String regId = GCMRegistrar.getRegistrationId(this);
    GCM_regID = regId;
            System.out.println("GCM regId: "+GCM_regID);

在onCreate()中执行以下代码:

/**
     * Google Cloud Messaging - Getting server Url and device ID to send it
     * across Google server for the notification..
     */
    mGCMReceiver = new GCMReceiver();
    mOnRegisteredFilter = new IntentFilter();
    mOnRegisteredFilter.addAction(Constants.ACTION_ON_REGISTERED);

    if (Constants.SENDER_ID == null) {
        // mStatus.setText("Missing SENDER_ID");
        return;
    }
    if (Constants.SERVER_URL == null) {
        // mStatus.setText("Missing SERVER_URL");
        return;
    }

    GCMRegistrar.checkDevice(this);
    GCMRegistrar.checkManifest(this);

    if (!regId.equals("")) {
        sendIdToServer(regId);
    } else {
        GCMRegistrar.register(getApplicationContext(),Constants.SENDER_ID);
    }

    sendIdToServer(regId);

}

按照以下教程之一的指导,通过这些方法将GCM_regId发送到服务器:

/**
 * GCM - sending the data in json format to server db
 * */
public void sendIdToServer(String regId) {
    (new SendRegistrationIdTask(regId)).execute();
    GCM_regID = regId;
}

private class GCMReceiver extends broadcastReceiver {
    @Override
    public void onReceive(Context context,Intent intent) {
        String regId = intent
                .getStringExtra(Constants.FIELD_REGISTRATION_ID);
        token = regId;

    }
}

private final class SendRegistrationIdTask extends
        AsyncTask<String,Void,HttpResponse> {
    // private String mRegId;

    public SendRegistrationIdTask(String regId) {
        // mRegId = regId;
    }

    @Override
    protected HttpResponse doInBackground(String... regIds) {
        // String url = Constants.SERVER_URL + "/register";

        return null;
    }

    @Override
    protected void onPostExecute(HttpResponse response) {
        if (response == null) {

            return;
        }

        StatusLine httpStatus = response.getStatusLine();
        if (httpStatus.getStatusCode() != 200) {
            Log.e(Constants.TAG,"Status: " + httpStatus.getStatusCode());
            return;
        }
    }
}

我不这么认为,这里需要GCMIntentService类来解决我的问题.请仔细研究并帮助我解决这个问题.

我可以在onRegistered()上的GCMIntentService类中打印.在这里:

@Override
protected void onRegistered(Context context,String regId) {
    Intent intent = new Intent(Constants.ACTION_ON_REGISTERED);
    intent.putExtra(Constants.FIELD_REGISTRATION_ID,regId);
    context.sendbroadcast(intent);
}

我必须在onCreate()上的MainActivity上打印regId.

解决方法

注册设备需要一些时间..因此,如果您在onCreate()中注册设备后立即尝试检索注册ID,那么每次它将返回一个空值.所以尝试在onCreate()中注册您的设备检索任何不同活动/服务中的id(您可以从GCM中检索来自GCMIntentService类的ID).注意GCM Intent Service类的方法.

protected void onRegistered(Context arg0,String arg1) {
    Logger.d(arg0,"REG ID="+arg1);
    regID = arg1;
}

这是在Reg完成后调用的方法.所以对于我的情况,regID我把它当作一个静态字符串并且正在访问它.或者就像你想要活动B上的regID一样,最好在活动A上注册它,并通过GCMIntent类中的上述方法中的静态字符串检索它.

Android SQLiteOpenHelper:为什么不调用onCreate()方法?

Android SQLiteOpenHelper:为什么不调用onCreate()方法?

我正在尝试制作我的第一个Android应用程序。我注意到,SQLiteOpenHelper.onCreate()如果数据库不存在,则不会调用该方法来创建表。但是,onCreate()即使我尝试调试,该方法也无法正常工作。

请查看下面的代码,并给我任何建议。任何帮助将不胜感激。

public class NameToPinyinActivity extends Activity {    DatabaseOpenHelper helper = null;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.nametopinyin);        Button searchButton = (Button) findViewById(R.id.search);        searchButton.setOnClickListener(new ButtonClickListener());        helper = new DatabaseOpenHelper(NameToPinyinActivity.this);    }public class DatabaseOpenHelper extends SQLiteOpenHelper {    /** DB Name */    private static final String DB_NAME = "pinyin";    /** CREATE TABLE SQL */    private static final String CREATE_TABLE_SQL = "CREATE TABLE UNICODE_PINYIN"            + "(ID INTEGER PRIMARY KEY AUTOINCREMENT, "            + "UNICODE TEXT NOT NULL, PINYIN TEXT NOT NULL)";    public DatabaseOpenHelper(Context context) {        super(context, DB_NAME, null, 1);    }    @Override    public void onCreate(SQLiteDatabase db) {        db.beginTransaction();        try {            db.execSQL(CREATE_TABLE_SQL);            db.setTransactionSuccessful();        } catch (Exception e) {            e.printStackTrace();        } finally {            db.endTransaction();        }    }

答案1

小编典典

我也遇到了 SQLiteOpenHelper的 麻烦。对我有用的是存储成员变量

SQLiteDatabase db;

在SQLiteOpenHelper子类中并调用

 db = getWritableDatabase();

在构造函数中。

该问题的答案还包括一些有用的信息:SQLiteOpenHelper无法调用onCreate?

我希望这有帮助!

android sql无法创建数据库

android sql无法创建数据库

public class MainActivity extends ActionBarActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SQLiteDatabase db = openOrCreateDatabase("student.db",MODE_PRIVATE, null);
        String sql = "create table UserTb1(_id integer primary key autoincrement,usename,password)";
        db.execSQL(sql);
        String sql1 = "insert into UserTb1(_id,username,password) values(2013800057,''lihuabin'',285398)";
        db.execSQL(sql1);
        Cursor c = db.query("UserTb1",null,null,null,null,null,null);
        if(c.moveToFirst()){
        for(int i = 0;i < c.getCount();i++){
        c.move(i);
        int id = c.getInt(0);
        String username = c.getString(1);
        int password = c.getInt(2);
        System.out.println(id + username + password);
        }
        }
     }


}
运行结果显示没有这个数据库,请问是怎么回事

关于android – sqlite onCreate()问题我希望我的数据库创建一次,它不会改变,但我在onCreate()时无法创建数据的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android - 当 android 释放在 onCreate 中创建的数据的内存时会发生什么、Android GCM:未在onCreate()方法上获取注册令牌、Android SQLiteOpenHelper:为什么不调用onCreate()方法?、android sql无法创建数据库等相关内容,可以在本站寻找。

本文标签: