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

来源:互联网 发布:永硕网盘源码 编辑:程序博客网 时间:2024/06/05 16:57

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

一、《第一行Android代码》P230 (之后如未说明则全为此书)

<strong><span style="font-size:14px;">@Overrideprotected void onCreate(Bundle savedInstanceState) {   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);   savaData =(Button) findViewById(R.id.save_data);   savaData.setOnClickListener(new OnClickListener){@overridepublic 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 0