2016.4.23 低空贴近零基础开发Android遇到的问题(一)

为了完成实验室作业——天气预报软件,故从数据库开始,缺啥补啥,不会就查。(答案基本来自网络)

一、《第一行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

数据类型:

NULL: 这个值为空值

VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。

CHAR(n):长度固定为n的字串,n不能超过 254。

INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.

REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改  变格式。

DATA :包含了 年份、月份、日期。

TIME: 包含了 小时、分钟、秒。

(不知对错)

"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的内容创一个表。


————————————————————————————————————————————————————————————————————————————

那么数据库的基础知识大概就了解到这,具体使用时根据做作业时的懵逼情况再来增添。不过接下来开始学习网络请求,祝自己好运。




个个

根据上述代码可以







评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值