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
数据类型:
(不知对错)
"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的内容创一个表。
————————————————————————————————————————————————————————————————————————————
那么数据库的基础知识大概就了解到这,具体使用时根据做作业时的懵逼情况再来增添。不过接下来开始学习网络请求,祝自己好运。
个个
根据上述代码可以
- 2016.4.23 低空贴近零基础开发Android遇到的问题(一)
- Android开发遇到的细节问题(一)
- android开发中遇到的问题【一】
- Android开发遇到的细节问题(一)
- android蓝牙开发过程中遇到的问题(一)
- android roboguice 开发遇到的问题(一)
- android app开发遇到的一些问题(一)
- 周易 坤(卦二) 一贴近大地的胸怀
- Android零基础开发专题一:Android 4.0环境搭建
- Android零基础开发专题一:Android 4.0环境搭建
- android 开发中会遇到的问题(一)
- Android开发中遇到的问题集合(一)
- Android开发从零单排(一)
- Android 移动开发--遇到问题及解决(一)
- 【视频】零基础学Android开发:蓝牙聊天室APP(一)
- 零基础开发OpenGL ES 2.0学习笔记-Android篇(一)
- Android遇到的各种问题(一)——开发中Theme.AppCompat.Light的解决方法
- android开发 遇到的问题
- 函数指针数组的例子
- mysql 做增量备份
- Git - config
- 内存这个大话题
- 生活感悟2016-4-23
- 2016.4.23 低空贴近零基础开发Android遇到的问题(一)
- HDU - 2955 Robberies
- Edison PuTTY启动报警
- 多线程面试题
- 指针函数与函数指针
- HDU - 2126 Buy the souvenirs
- 找最长等差数列的长度
- Leetcode #53. Maximum Subarray 最大区间和 解题报告
- Edison编译时显示No such file or directory