三、データベース入門とlistviewの基本使用
1 Androidでデータベース作成
どのような状況で私たちはデータベースを使ってデータを保存しますか?大量のデータ構造が同じデータを格納する必要がある場合.mysql sqlserver 2000 sqlite埋め込みライト級
Sqlite OpenHelper
データベースを作成するステップ:(1)統合Sqlite OpenHelperを作成するには、構造方法を追加し、2つの方法のoncreateを実現する必要があります.onup grade構造方法のパラメータ紹介:
(3)Ocreateとonuplogradate方法:oncreate方法はデータベースが初めて作成された時に呼び出されます.特にテーブル構造の初期化に適しています.sql文を実行する必要があります.SQLiteDatabase dbはsql文を実行するために使用できます.
(1)ヘルプクラスのオブジェクトを作成し、get Readable Databaseメソッドを呼び出して、Sqlite Datebaseオブジェクトを返します.
(2)Sqlite Datebaseオブジェクトを使ってexecSqlを呼び出し、添削を行い、rawQuery方法を呼び出して照会する.
特徴:添削は戻り値がないので、sql文の実行が成功したかどうかは判断できません.sql文は手動で書きます.書き間違えやすいです.
(1)ヘルプクラスのオブジェクトを作成し、get Readable Databaseメソッドを呼び出して、Sqlite Datebaseオブジェクトを返します.
(2)Sqlite Datebaseオブジェクトを使ってinsertを呼び出し、udate、delete、query方法で添削を行います.
特徴:添削は戻り値があり、sql文の実行が成功したかどうかを判断できますが、検索が足りなくて、多くの表を作って調べられません.だから会社で一般人は添削して第二の方式を使うことが好きで、調査は第一の方式を使います.
事務:複数のsql文を実行するか、同時に成功するか、失敗するか、失敗するか、失敗するか、失敗するか、失敗するか
銀行振り込み
ListViewはコントロールであり、垂直スクロールのリストに項目のコントロールを表示します.これらの項目の内容はListAdapterから来ます.EditText Button TextView ImageView Checkboxの5大レイアウト.
adapperでgetviewの方法は一つのconvertViewに伝えられます.convertViewはかつて使ったviewのオブジェクトのことです.重複して使うことができますが、使う前に空かどうかを判断し、直接多重しないで、getview方法の返却対象とします.
開発手順:
(1).レイアウトはlistviewを書く
(2)listviewを見つける
(3)ニュースデータをlistセットに入れて、adapperの表示データとして、どのようにして得られたニュースデータをアドホッターに渡しますか?
(4)adapperを作成してBaseAdapterを継承し、4つの方法get countを実現する.いくつかのニュースデータがあれば、いくつかの項目がある.get View:エントリとしての複雑なレイアウトを返します.そして表示されるデータはニュースの情報です.???
(6)listviewの項目を設定したクリックイベントをパッケージ化してクリックし、ニュースの詳細を確認します.?????????
context:文脈、resource:viewオブジェクトに変換するlayoutのid、root:layoutをrootで包んでcodifyの戻り値として、一般にnullを伝えます.
どのような状況で私たちはデータベースを使ってデータを保存しますか?大量のデータ構造が同じデータを格納する必要がある場合.mysql sqlserver 2000 sqlite埋め込みライト級
Sqlite OpenHelper
データベースを作成するステップ:(1)統合Sqlite OpenHelperを作成するには、構造方法を追加し、2つの方法のoncreateを実現する必要があります.onup grade構造方法のパラメータ紹介:
//context : , name: factory: cursor , null
//version: , 1 , ,onUpgrade ,4.0
super(context, "info.db", null,1);
(2)このヘルプクラスのオブジェクトを作成し、getReadable Database()を呼び出します.データベースを開くために作成してくれます.(3)Ocreateとonuplogradate方法:oncreate方法はデータベースが初めて作成された時に呼び出されます.特にテーブル構造の初期化に適しています.sql文を実行する必要があります.SQLiteDatabase dbはsql文を実行するために使用できます.
//onUpgrade ;
getWritableDatabase getReadableDatabase SqliteDatabase.
:
getReadableDatabase:
, , 。
getWritableDatabase:
, , 。
2 Androidの下でデータベースの第1種の方式は添削して調べます.(1)ヘルプクラスのオブジェクトを作成し、get Readable Databaseメソッドを呼び出して、Sqlite Datebaseオブジェクトを返します.
(2)Sqlite Datebaseオブジェクトを使ってexecSqlを呼び出し、添削を行い、rawQuery方法を呼び出して照会する.
特徴:添削は戻り値がないので、sql文の実行が成功したかどうかは判断できません.sql文は手動で書きます.書き間違えやすいです.
private MySqliteOpenHelper mySqliteOpenHelper;
public InfoDao(Context context){
//
mySqliteOpenHelper = new MySqliteOpenHelper(context);
}
public void add(InfoBean bean){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// sql:sql , bindArgs:sql
db.execSQL("insert into info(name,phone) values(?,?);", new Object[]{bean.name,bean.phone});
//
db.close();
}
public void del(String name){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// sql:sql , bindArgs:sql
db.execSQL("delete from info where name=?;", new Object[]{name});
//
db.close();
}
public void update(InfoBean bean){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// sql:sql , bindArgs:sql
db.execSQL("update info set phone=? where name=?;", new Object[]{bean.phone,bean.name});
//
db.close();
}
public void query(String name){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// sql:sql , selectionArgs: , cursor
Cursor cursor = db.rawQuery("select _id, name,phone from info where name = ?", new String []{name});
// Cursor
if(cursor != null && cursor.getCount() >0){// cursor
// ,
while(cursor.moveToNext()){ // ,
//
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
}
cursor.close();//
}
//
db.close();
}
3 Androidの下でもう一つの添削を行います.(1)ヘルプクラスのオブジェクトを作成し、get Readable Databaseメソッドを呼び出して、Sqlite Datebaseオブジェクトを返します.
(2)Sqlite Datebaseオブジェクトを使ってinsertを呼び出し、udate、delete、query方法で添削を行います.
特徴:添削は戻り値があり、sql文の実行が成功したかどうかを判断できますが、検索が足りなくて、多くの表を作って調べられません.だから会社で一般人は添削して第二の方式を使うことが好きで、調査は第一の方式を使います.
private MySqliteOpenHelper mySqliteOpenHelper;
public InfoDao(Context context){
//
mySqliteOpenHelper = new MySqliteOpenHelper(context);
}
public boolean add(InfoBean bean){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues(); // map ,
values.put("name", bean.name);
values.put("phone", bean.phone);
// table: , nullColumnHack: , , values: , : Id ,-1
long result = db.insert("info", null, values);// sql
//
db.close();
if(result != -1){// -1
return true;
}else{
return false;
}
}
public int del(String name){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// table : , whereClause: , whereArgs: ; :
int result = db.delete("info", "name = ?", new String[]{name});
//
db.close();
return result;
}
public int update(InfoBean bean){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
ContentValues values = new ContentValues(); // map ,
values.put("phone", bean.phone);
// table: , values: , whereClause: , whereArgs: , :
int result = db.update("info", values, "name = ?", new String[]{bean.name});
//
db.close();
return result;
}
public void query(String name){
// sql sqliteDatabase
// getReadableDatabase ,
SQLiteDatabase db = mySqliteOpenHelper.getReadableDatabase();
// table: , columns: , null ; selection: , selectionArgs: ,
// groupBy: , having: , orderBy:
Cursor cursor = db.query("info", new String[]{"_id","name","phone"}, "name = ?", new String[]{name}, null, null, "_id desc");
// Cursor
if(cursor != null && cursor.getCount() >0){ // cursor
// ,
while(cursor.moveToNext()){ // ,
//
int id = cursor.getInt(0);
String name_str = cursor.getString(1);
String phone = cursor.getString(2);
System.out.println("_id:"+id+";name:"+name_str+";phone:"+phone);
}
cursor.close(); //
}
//
db.close();
}
4データベースのトランザクション事務:複数のsql文を実行するか、同時に成功するか、失敗するか、失敗するか、失敗するか、失敗するか、失敗するか
銀行振り込み
//
public void transtation(View v){
// 1.
BankOpenHelper bankOpenHelper = new BankOpenHelper(this);
// 2. getReadableDatabase , , SqliteDatabase (sql )
SQLiteDatabase db = bankOpenHelper.getReadableDatabase();
// 3. , 200, 200
db.beginTransaction(); //
try {
db.execSQL("update account set money= money-200 where name=?",new String[]{" "});
int i = 100/0; //
db.execSQL("update account set money= money+200 where name=?",new String[]{" "});
db.setTransactionSuccessful(); // sql
} finally {
db.endTransaction(); // , , sql
}
}
5 listview入門ListViewはコントロールであり、垂直スクロールのリストに項目のコントロールを表示します.これらの項目の内容はListAdapterから来ます.EditText Button TextView ImageView Checkboxの5大レイアウト.
1. Listview
2. listview
3. Adapter BaseAdapter, 4 , getcount,getview
getcount: listview
getview: listview 。
4. Adapter , listview。
listview.setAdapter(ListAdapter adapter);
6 listview最適化adapperでgetviewの方法は一つのconvertViewに伝えられます.convertViewはかつて使ったviewのオブジェクトのことです.重複して使うことができますが、使う前に空かどうかを判断し、直接多重しないで、getview方法の返却対象とします.
TextView view = null;
if(convertView != null){// converView ,
view = (TextView) convertView;
}else{
view = new TextView(mContext);// textView
}
return view;
7 listview—タイガーマシンjavaweb mvc
m....mode....javabean
v....view....jsp
c....control...servlet
listview mvc
m....mode....Bean
v....view....listview
c....control...adapter
8 listview表示原理(了解)1. listview getcount
2. listview getview
3. item ,
4. listview , , 。
9複雑なlistview画面表示、ニュース開発手順:
(1).レイアウトはlistviewを書く
(2)listviewを見つける
(3)ニュースデータをlistセットに入れて、adapperの表示データとして、どのようにして得られたニュースデータをアドホッターに渡しますか?
(4)adapperを作成してBaseAdapterを継承し、4つの方法get countを実現する.いくつかのニュースデータがあれば、いくつかの項目がある.get View:エントリとしての複雑なレイアウトを返します.そして表示されるデータはニュースの情報です.???
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
// 1. converView listview, view getview
if(convertView != null){
view = convertView;
}else {
// context: , resource: view layout id, root: layout root(ViewGroup) getview , null
view = View.inflate(context, R.layout.item_news_layout, null); // view
}
// 2. view
ImageView item_img_icon = (ImageView) view.findViewById(R.id.item_img_icon);
TextView item_tv_des = (TextView) view.findViewById(R.id.item_tv_des);
TextView item_tv_title = (TextView) view.findViewById(R.id.item_tv_title);
// 3. postion list ,Bean
NewsBean newsBean = list.get(position);
// 4.
item_img_icon.setImageDrawable(newsBean.icon);// imageView
item_tv_title.setText(newsBean.title);
item_tv_des.setText(newsBean.des);
return view;
}
(5)adapperオブジェクトを作成してlistviewに設定する(6)listviewの項目を設定したクリックイベントをパッケージ化してクリックし、ニュースの詳細を確認します.?????????
// listview
lv_news.setOnItemClickListener(this);
// listview parent: listviw view: view position: id: id
public void onItemClick(AdapterView> parent, View view, int position, long id) {
// bean url
NewsBean bean = (NewsBean) parent.getItemAtPosition(position);
String url = bean.news_url;
//
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
1. listview ok
2. listview ok
3. list , adapter 。 ok
4. Adapter BaseAdatper, list ,
a. ok
b. getCount ok
c.getView : ok
1. convertview, , , view getview 。
view = View.inflater(Context context, int resuorceId,ViewGroup root)
2. view , list bean
3. list postion Bean
4. bean
d.getItem : list postion bean
e.getItemId, postion
5. Adapter , listview ok
6. listview ok
listview.setOnItem....
7. OnItemClicklistener , bean , url, Intent ; ok
10は常にinflateの書き方を取得します.context:文脈、resource:viewオブジェクトに変換するlayoutのid、root:layoutをrootで包んでcodifyの戻り値として、一般にnullを伝えます.
view = View.inflate(context, R.layout.item_news_layout, null); // view
(2)Layout Inflaterによってレイアウトをviewオブジェクトに変換するview = LayoutInflater.from(context).inflate(R.layout.item_news_layout, null);
(3)システムサービスをcontextで取得し、Layout Inflaterを得て、Layout Inflaterを通じて一つのレイアウトをviewオブジェクトに変換する.LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.item_news_layout, null);
11 arrayadapter(見なくてもいいです.これがあると知っていればいいです.)//
ListView lv_array = (ListView) findViewById(R.id.lv_array);
ListView lv_simple = (ListView) findViewById(R.id.lv_simple);
// arrayAdapter
// context , resource: id, textViewResourceId: textview id, objects: texitview
ArrayAdapter arrayAdapter = new ArrayAdapter(this, R.layout.item_listview_layout, R.id.item_tv_class, classz);
lv_array.setAdapter(arrayAdapter);
12 simpleadapper(見なくてもいいです.これがあると知っていればいいです.)// simpleAdapter, simpleAdapter
ArrayList
13データベースのlistviewの画面表示(ニュース会です.これでいいです.)