为了完成实验室作业——天气预报软件,故从数据库开始,缺啥补啥,不会就查。(答案基本来自网络)
一、《第一行Android代码》P230 (之后如未说明则全为此书)
<strong><span style="font-size:14px;">@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
savaData =(Button) findViewById(R.id.save_data);
savaData.setOnClickListener(new OnClickListener){
@override
public void onClick(view v){
SharedPreferences.Editor editor=getSharedPreferences("data",MODE_PRIVATE).edit();
……
}
})</span></strong>
1、内部类问题.
SharedPreferences.Editor editor 什么意思?
答:成员内部类
成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的,了解这一点,就可以明白更多事情,在此省略更多的细节了。
在成员内部类要引用外部类对象时,使用outer.this来表示外部类对象;
而需要创建内部类对象,可以使用outer.inner obj =outerobj.new inner();
<strong><span style="font-size:14px;">public class Outer {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.print("Outer.new");
inner = outer.getInner();
inner.print("Outer.get");
}
// 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时
public Inner getInner() {
return new Inner();
} </span></strong>
2、super.omCreate(savedInstanceState),savedInstanceState是什么?在onCreat之前是如何存在的?
答:在activity的生命周期中,只要离开了可见阶段,或者说失去了焦点,activity就很可能被进程终止了!被KILL掉了,这时候,就需要有种机制,能保存当时的状态,这就是savedInstanceState的作用。
当一个Activity在PAUSE时,被kill之前,它可以调用onSaveInstanceState()来保存当前activity的状态信息(在paused状态时,要被KILLED的时候)。用来保存状态信息的Bundle会同时传给两个method,即onRestoreInstanceState() and onCreate().
<strong><span style="font-size:14px;">package com.myandroid.test;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class AndroidTest extends Activity {
private static final String TAG = "MyNewLog";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// If an instance of this activity had previously stopped, we can
// get the original text it started with.
if(null != savedInstanceState)
{
int IntTest = savedInstanceState.getInt("IntTest");
String StrTest = savedInstanceState.getString("StrTest");
Log.e(TAG, "onCreate get the savedInstanceState+IntTest="+IntTest+"+StrTest="+StrTest);
}
setContentView(R.layout.main);
Log.e(TAG, "onCreate");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save away the original text, so we still have it if the activity
// needs to be killed while paused.
savedInstanceState.putInt("IntTest", 0);
savedInstanceState.putString("StrTest", "savedInstanceState test");
super.onSaveInstanceState(savedInstanceState);
Log.e(TAG, "onSaveInstanceState");
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
int IntTest = savedInstanceState.getInt("IntTest");
String StrTest = savedInstanceState.getString("StrTest");
Log.e(TAG, "onRestoreInstanceState+IntTest="+IntTest+"+StrTest="+StrTest);
}
}
</span></strong>
现在可以明白,当活动要被销毁前,会保存状态于 savedInstanceState中,于是系统在创建活动时会自动调用onCreate(Bundle savedInstanceState),便可以读取结束前的状态。第二个问题在于, 如果是第一次调用onCreate()那么savedInstanceState存在吗?值是什么?
根据上述代码,可以得知,存在,不过值为NULL。(不知对错)这也就意味着,系统run是并不是一开始就直接调用onCreate(),而是有前续操作。即先实例化MainActivity, 然后在调用onCreate方法
二、P240
<strong><span style="font-size:14px;">public static final String CREATE_BOOK ="create table Book"("
+"id integer primary key autoincrement."
+"author text,"+
'"price real,
"+……}</span></strong>
问题&个人解答
1、SQLite建表语句基本数据类型是什么?
SQLite3 特征
Sql 语句: SELECT
INSERT UPDATE
CREATE DROP
数据类型:
(不知对错)
"CREATE TABLE person //建立一个表person
(_id INTEGER PRIMARY KEY, //设置一个_id (int类型)作为关键字
name VARCHAR)"
那么定义成String时,根据java语法:
String CREATE_PERSON="CREATE TABLE person (
+"_id INTEGER PRIMARY KEY,"
+"name VARCHAR)";
execSQL函数是SQL数据库的语法,android带的一个,需要用SQLiteDatabase里的execSQL函数执行,只是被android拿来用封装了一下。
大概可以把execSQL()当成一个方法,传入表的名字CREATE_BOOK, 然后系统就会根据这个String的内容创一个表。
————————————————————————————————————————————————————————————————————————————
那么数据库的基础知识大概就了解到这,具体使用时根据做作业时的懵逼情况再来增添。不过接下来开始学习网络请求,祝自己好运。
个个
根据上述代码可以