`

ch023 Android ContentProvider(第二部分)

阅读更多

--------------------------------------------AndroidManifest.xml----------------------------------

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.kawa.ch23"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name" >    

        <uses-library android:name="android.test.runner"/>

        <activity

            android:label="@string/app_name"

            android:name=".MainActivity" >

            <intent-filter >

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

        <provider

            android:authorities="com.kawa.ch23.provider.myprovider"

            android:name=".provider.MyProvider" >

        </provider>   

       <activity android:name="com.kawa.ch23.ItemActivity"></activity>

    </application>

     <instrumentation android:name="android.test.InstrumentationTestRunner"

  android:targetPackage="com.kawa.ch23" android:label="Tests for My App" />

</manifest>

--------------------------------------------Layout activity_main.java----------------------------

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >

    <TableLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:stretchColumns="1" >

        <TableRow >

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="姓名" />

            <EditText

                android:id="@+id/edtname"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content" 

                android:text="fy"/>

        </TableRow>

        <TableRow >

            <TextView            

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="年龄" />

            <EditText

                android:id="@+id/edtage"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content" 

                android:text="21"/>

        </TableRow>

    </TableLayout>

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >

        <Button

            android:id="@+id/btnadd"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="新增" />

        <Button

            android:id="@+id/btnqueryall"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="查询所有" />

    </LinearLayout>

    <ListView

        android:id="@+id/lvall"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" >

    </ListView>

</LinearLayout>

--------------------------------------------Layout item.xml--------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" >

    <TableLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:stretchColumns="1" >

        <TableRow >

            <TextView

                android:layout_width="fill_parent"

                android:layout_height="wrap_content"

                android:text="ID" />

            <EditText

                android:id="@+id/edt_item_id"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content" 

                />

        </TableRow>

        <TableRow >

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="姓名" />

            <EditText

                android:id="@+id/edt_item_name"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content" />

        </TableRow>

        <TableRow >

            <TextView

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:text="年龄" />

            <EditText

                android:id="@+id/edt_item_age"

                android:layout_width="fill_parent"

                android:layout_height="wrap_content" />

        </TableRow>

    </TableLayout>

    <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:orientation="horizontal" >

        <Button

            android:id="@+id/btndel"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="删除" />

        <Button

            android:id="@+id/btnupdate"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:layout_weight="1"

            android:text="更新" />

    </LinearLayout>

</LinearLayout>

--------------------------------------------Layout list_item.xml----------------------------------

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal" >

    <TextView

        android:id="@+id/tvId"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" 

        android:layout_weight="1"

       />

    <TextView

        android:id="@+id/tvname"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" 

           android:layout_weight="1"/>

    <TextView

        android:id="@+id/tvage"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content" 

           android:layout_weight="1"/>

</LinearLayout>

--------------------------------------------MainActivity.java--------------------------------------

package com.kawa.ch23;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import com.kawa.ch23.model.Person;

import com.kawa.ch23.util.Const;

import android.app.Activity;

import android.content.ContentResolver;

import android.content.ContentUris;

import android.content.ContentValues;

import android.content.Context;

import android.content.Intent;

import android.database.Cursor;

import android.net.Uri;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

/**

 * 

 * 项目名称:com.kawa.ch23    

 * 类名称:MainActivity    

 * 类描述:  

 * 创建人:方勇   

 * 创建时间:2012-12-14 下午9:38:39   

 * Copyright (c) 方勇-版权所有

 */

public class MainActivity extends Activity {

private Button btn_addbtn_queryall;

private EditText field_namefield_age;

private ListView listview;

private List<Person> persons;

private SimpleAdapter simpleAdapter;

private Handler handler = new Handler() {//异步消息

@Override

public void handleMessage(Message msg) {

List<Map<String, Object>> data = (List<Map<String, Object>>) msg.obj;

System.out.println(data.size());

simpleAdapter = new SimpleAdapter(MainActivity.this, data,

R.layout.list_itemnew String[] { "id""name""age" }, new int[] {

R.id.tvId, R.id.tvname, R.id.tvage });

listview.setAdapter(simpleAdapter);

}

};

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

persons = new ArrayList<Person>();

findViews();

setListeners();

}

private void findViews() {

btn_queryall = (Button) this.findViewById(R.id.btnqueryall);

btn_add = (Button) this.findViewById(R.id.btnadd);

field_name = (EditText) this.findViewById(R.id.edtname);

field_age = (EditText) this.findViewById(R.id.edtage);

listview = (ListView) this.findViewById(R.id.lvall);

}

private void setListeners() {

btn_add.setOnClickListener(addOnClickListener);

// 查询所有

btn_queryall.setOnClickListener(queryOnClickListener);

listview.setOnItemClickListener(onItemClickListener);

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == 2) {

MyThread thread = new MyThread(MainActivity.this);

thread.start();

}

}

private OnClickListener addOnClickListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

ContentResolver contentResolver = MainActivity.this

.getContentResolver();

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValues values = new ContentValues();

values.put("name"field_name.getText().toString());

values.put("age"field_age.getText().toString());

Uri result = contentResolver.insert(url, values);

System.out.println(result.toString());

if (ContentUris.parseId(result) > 0) {

Toast.makeText(MainActivity.this"添加成功",

Toast.LENGTH_LONG).show();

// 添加成功后再启动线程查询

MyThread thread = new MyThread(MainActivity.this);

thread.start();

}

}

};

private OnClickListener queryOnClickListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

MyThread thread = new MyThread(MainActivity.this);

thread.start();

}

};

private OnItemClickListener onItemClickListener = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view, int position,

long id) {

System.out.println("position:" + position);

Person person = persons.get(position);

Bundle bundle = new Bundle();

bundle.putInt("id", person.getId());

bundle.putString("name", person.getName());

bundle.putInt("age", person.getAge());

Intent intent = new Intent(MainActivity.this,

ItemActivity.class);

intent.putExtra("item", bundle);

startActivityForResult(intent, 1);

}

};

class MyThread extends Thread {

Context context;

public MyThread(Context context) {

// 一定要清空。否则会 有问题,每执行一次都会把之前的全部的item加进去

persons.clear();

listview.setAdapter(null);

this.context = context;

}

@Override

public void run() {

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursor cursor = context.getContentResolver().query(url,

new String[] { "_id""name""age" }, nullnull"_id");

while (cursor.moveToNext()) {

Person person = new Person();

person.setId(cursor.getInt(cursor.getColumnIndex("_id")));

person.setName(cursor.getString(cursor.getColumnIndex("name")));

person.setAge(cursor.getInt(cursor.getColumnIndex("age")));

persons.add(person);

}

cursor.close();

List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();

Map<String, Object> map = null;

for (int i = 0; i < persons.size(); i++) {

map = new HashMap<String, Object>();

map.put("id"persons.get(i).getId());

map.put("name"persons.get(i).getName());

map.put("age"persons.get(i).getAge());

data.add(map);

}

Message msg = handler.obtainMessage();

msg.obj = data;

handler.sendMessage(msg);

}

}

}

--------------------------------------------ItemActivity.java--------------------------------------

package com.kawa.ch23;

import com.kawa.ch23.util.Const;

import android.app.Activity;

import android.content.ContentResolver;

import android.content.ContentValues;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

/**

 * 

 * 项目名称:com.kawa.ch23    

 * 类名称:ItemActivity    

 * 类描述:  

 * 创建人:方勇   

 * 创建时间:2012-12-14 下午9:45:04   

 * Copyright (c) 方勇-版权所有

 */

public class ItemActivity extends Activity {

private EditText field_name;

private EditText field_age;

private EditText field_id;

private Button btn_delbtn_update;

// 传数据

private Intent intent;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.item);

findViews();

setListeners();

intent = getIntent();

Bundle bundle = intent.getBundleExtra("item");//选中的数据

int id = bundle.getInt("id");

String name = bundle.getString("name");

int age = bundle.getInt("age");

field_id.setText(String.valueOf(id));

field_name.setText(name);

field_age.setText(String.valueOf(age));

}

private void findViews() {

field_id = (EditText) this.findViewById(R.id.edt_item_id);

field_id.setEnabled(false);// 控制不可用

field_name = (EditText) this.findViewById(R.id.edt_item_name);

field_age = (EditText) this.findViewById(R.id.edt_item_age);

// 得到传过来的数据

btn_del = (Button) this.findViewById(R.id.btndel);

btn_update = (Button) this.findViewById(R.id.btnupdate);

}

private void setListeners() {

btn_del.setOnClickListener(delOnClickListener);

btn_update.setOnClickListener(updateOnClickListener);

}

private OnClickListener updateOnClickListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

ContentResolver contentResolver = ItemActivity.this.getContentResolver();

// 构建Uri

String url = "content://"+Const.PROVIDER_URL+"/person/"

field_id.getText();

Uri uri = Uri.parse(url);

ContentValues values = new ContentValues();

values.put("name"field_name.getText().toString());

values.put("age", Integer.parseInt(field_age.getText().toString()));

int result = contentResolver.update(uri, values, nullnull);

System.out.println("update result:" + result);

if (result >= 1) {

Toast.makeText(ItemActivity.this"更新成功", Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);//设置返回结果

ItemActivity.this.finish();//销毁

}

}

};

private OnClickListener delOnClickListener = new View.OnClickListener() {

@Override

public void onClick(View v) {

ContentResolver contentResolver = ItemActivity.this.getContentResolver();

// 构建Uri

String url = "content://"+Const.PROVIDER_URL+"/person/"

field_id.getText();

Uri uri = Uri.parse(url);

int result = contentResolver.delete(uri, nullnull);

System.out.println("delete result:" + result);

if (result >= 1) {

Toast.makeText(ItemActivity.this"删除成功", Toast.LENGTH_LONG).show();

ItemActivity.this.setResult(2);

ItemActivity.this.finish();//销毁

}

}

};

}

--------------------------------------------util目录 Const.java-----------------------------------

public class Const {

public static String PROVIDER_URL = "com.kawa.ch23.provider.myprovider";

}

--------------------------------------------provider目录 MyProvider.java-----------------------

package com.kawa.ch23.provider;

import android.content.ContentProvider;

import android.content.ContentUris;

import android.content.ContentValues;

import android.content.UriMatcher;

import android.database.Cursor;

import android.net.Uri;

import com.kawa.ch23.db.DBHelper;

import com.kawa.ch23.util.Const;

/**

 * 

 * 项目名称:com.kawa.ch23    

 * 类名称:MyProvider    

 * 类描述:提供者  

 * 创建人:方勇   

 * 创建时间:2012-12-14 下午9:49:38   

 * Copyright (c) 方勇-版权所有

 */

public class MyProvider extends ContentProvider {

private DBHelper dbHelper;

// 定义一个UriMatcher类

private static final UriMatcher MATCHER = new UriMatcher(

UriMatcher.NO_MATCH);

private static final int PERSONS = 1;

private static final int PERSON = 2;

static {

MATCHER.addURI(Const.PROVIDER_URL"person"PERSONS);

MATCHER.addURI(Const.PROVIDER_URL"person/#"PERSON);

}

@Override

public boolean onCreate() {

System.out.println("---oncreate----");

dbHelper = new DBHelper(this.getContext());

dbHelper.open();

return false;

}

// 查询数据

@Override

public Cursor query(Uri uri, String[] projection, String selection,

String[] selectionArgs, String sortOrder) {

switch (MATCHER.match(uri)) {

case PERSONS:

// 查询所有的数据

return dbHelper.findList("person", projection, selection, selectionArgs,

nullnull, sortOrder);

case PERSON:

// 查询某个ID的数据

// 通过ContentUris这个工具类解释出ID

long id = ContentUris.parseId(uri);

String where = " _id=" + id;

if (!"".equals(selection) && selection != null) {

where = selection + " and " + where;

}

return dbHelper.findList("person", projection, where, selectionArgs, null,

null, sortOrder);

default:

throw new IllegalArgumentException("unknow uri" + uri.toString());

}

}

// 返回当前操作的数据的mimeType

@Override

public String getType(Uri uri) {

switch (MATCHER.match(uri)) {

case PERSONS:

return "vnd.android.cursor.dir/person";

case PERSON:

return "vnd.android.cursor.item/person";

default:

throw new IllegalArgumentException("Unkwon Uri:" + uri.toString());

}

}

// 插入数据

@Override

public Uri insert(Uri uri, ContentValues values) {

Uri insertUri = null;

switch (MATCHER.match(uri)) {

case PERSONS:

long rowid = dbHelper.insert("person", values);

insertUri = ContentUris.withAppendedId(uri, rowid);

break;

default:

throw new IllegalArgumentException("Unkwon Uri:" + uri.toString());

}

return insertUri;

}

// 删除数据

@Override

public int delete(Uri uri, String selection, String[] selectionArgs) {

int count = 0;

switch (MATCHER.match(uri)) {

case PERSONS:

count = dbHelper.delete("person", selection, selectionArgs);

return count;

case PERSON:

long id = ContentUris.parseId(uri);

String where = "_id=" + id;

if (selection != null && !"".equals(selection)) {

where = selection + " and " + where;

}

count = dbHelper.delete("person", where, selectionArgs);

return count;

default:

throw new IllegalArgumentException("Unkwon Uri:" + uri.toString());

}

}

// 更新数据

@Override

public int update(Uri uri, ContentValues values, String selection,

String[] selectionArgs) {

int count = 0;

switch (MATCHER.match(uri)) {

case PERSONS:

count = dbHelper.update("person", values, selection, selectionArgs);

break;

case PERSON:

// 通过ContentUri工具类得到ID

long id = ContentUris.parseId(uri);

String where = "_id=" + id;

if (selection != null && !"".equals(selection)) {

where = selection + " and " + where;

}

count = dbHelper.update("person", values, where, selectionArgs);

break;

default:

throw new IllegalArgumentException("Unkwon Uri:" + uri.toString());

}

return count;

}

}

--------------------------------------------provider目录 Test.java-------------------------------

package com.kawa.ch23.provider;

import com.kawa.ch23.util.Const;

import android.content.ContentResolver;

import android.content.ContentValues;

import android.database.Cursor;

import android.net.Uri;

import android.test.AndroidTestCase;

public class Test extends AndroidTestCase {

/*保存*/

public void testInsert() throws Exception {

ContentResolver contentResolver = this.getContext()

.getContentResolver();

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person");

ContentValues values = new ContentValues();

values.put("name""jiahui2");

values.put("age", 20);

contentResolver.insert(url, values);

}

/*删除*/

public void testDelete() throws Exception{

ContentResolver contentResolver = this.getContext()

.getContentResolver();

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

//ContentValues values = new ContentValues();

contentResolver.delete(url, nullnull);

}

/*更新*/

public void testUpdate() throws Exception {

ContentResolver contentResolver = this.getContext()

.getContentResolver();

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person/1");

ContentValues values = new ContentValues();

values.put("name""jiahui2");

values.put("age", 20);

contentResolver.update(url, values, null,null);

}

/*查询*/

public void testQuery() throws Exception {

ContentResolver contentResolver = this.getContext()

.getContentResolver();

Uri url = Uri.parse("content://"+Const.PROVIDER_URL+"/person");

Cursor cursor = contentResolver.query(url, new String[] { "_id",

"name""age" }, nullnull"_id");

while (cursor.moveToNext()) {

System.out.println("_id:"+cursor.getInt(cursor.getColumnIndex("_id")));

System.out.println("name:"+cursor.getString(cursor.getColumnIndex("name")));

System.out.println("age:"+cursor.getInt(cursor.getColumnIndex("age")));

}

}

}

--------------------------------------------model目录 Person.java-------------------------------

package com.kawa.ch23.model;

import java.io.Serializable;

public class Person  implements Serializable{

private int id;

private String name;

private int age;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + id;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;

}

@Override

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

Person other = (Person) obj;

if (age != other.age)

return false;

if (id != other.id)

return false;

if (name == null) {

if (other.name != null)

return false;

else if (!name.equals(other.name))

return false;

return true;

}

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";

}

}

--------------------------------------------db目录 DBHelper.java--------------------------------

package com.kawa.ch23.db;

import com.kawa.ch23.util.LogOut;

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.SQLException;

import android.database.sqlite.SQLiteDatabase;

import android.database.sqlite.SQLiteOpenHelper;

/**

 * 

 * 项目名称:com.kawa.ch21   

 *  

 * 类名称:DBHelper  

 *   

 * 类描述:Sqlite3数据库操作工具类    

 *   

 * 创建人:fy  

 *  

 * 创建时间:2012-9-7 上午9:27:24   

 * 

 * Copyright (c) 方勇-版权所有

 */

public class DBHelper {

// DDL操作

private static DatabaseHelper dbHelper;

// DML操作

private static SQLiteDatabase db;

// 数据库名

private static final String DATABASE_NAME = "kawa.db";

// 数据库版本

private static final int DATABASE_VERSION = 1;

// 上下文环境

private final Context mCtx;

/* SQliteOpenHelper是一个抽象类,来管理数据库的创建和版本的管理 */

private static class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context) {

super(context, DATABASE_NAMEnullDATABASE_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db) {

String sql = "create table IF NOT EXISTS  person (_id integer primary key autoincrement, name text,age integer)";

LogOut.out("fy""sql[" + sql + "]");

db.execSQL(sql);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

System.out.println("upgrade a database");

}

}

public DBHelper(Context ctx) {

this.mCtx = ctx;

}

public DBHelper open() throws SQLException {

dbHelper = new DatabaseHelper(mCtx);

db = dbHelper.getWritableDatabase();

return this;

}

public void closeclose() {

db.close();

dbHelper.close();

}

/**

 * 插入数据

 * 参数:tableName 表名

 * initialValues 要插入的列对应值

 *   */

public long insert(String tableName, ContentValues initialValues) {

return db.insert(tableName, null, initialValues);

}

/**

 * 删除数据

 * 参数:tableName 表名

 * deleteCondition 删除的条件

 * deleteArgs 如果deleteCondition中有“?”号,将用此数组中的值替换

 *   */

public int delete(String tableName, String deleteCondition,

String[] deleteArgs) {

return db.delete(tableName, deleteCondition, deleteArgs) ;

}

/**

 * 更新数据

 * 参数:tableName 表名

 * initialValues 要更新的列

 * selection 更新的条件

 * selectArgs 如果selection中有“?”号,将用此数组中的值替换

 *   */

public int update(String tableName, ContentValues initialValues,

String selection, String[] selectArgs) {

int returnValue = db

.update(tableName, initialValues, selection, selectArgs);

return returnValue ;

}

/**

 * 取得一个列表

 * 参数:tableName 表名

 * columns 返回的列

 * selection 查询条件

 * selectArgs 如果selection中有“?”号,将用此数组中的值替换

 *   */

public Cursor findList(String tableName, String[] columns, String selection,

String[] selectionArgs, String groupBy, String having, String orderBy) {

return db.query(tableName, columns, selection, selectionArgs, groupBy,

having, orderBy);

}

}

--------------------------------------------结果----------------------------------------------------

<!--EndFragment-->
  • 大小: 104.9 KB
  • 大小: 83.8 KB
0
0
分享到:
评论

相关推荐

    CH341 Android代码

    4. **CH341驱动**:如果CH341指的是硬件接口,那么这部分代码可能涉及到Android的硬件抽象层(HAL)或者设备驱动程序开发,用于与特定硬件交互。 5. **权限管理**:Android系统有严格的权限控制,如果代码涉及到...

    疯狂android讲义(第2版) 源码 ch04-06

    《疯狂Android讲义(第2版)》是Android开发领域一本知名的教材,它深入浅出地介绍了Android应用开发的各种技术和实践。源码ch04-06涵盖了书中的第四至第六章,这部分内容通常会涉及Android开发的基础知识,包括用户...

    AndroidSDK开发范例大全第二版(全部源码打包)

    《Android SDK开发范例大全第二版》是一本深入讲解Android应用程序开发的专业书籍,包含了丰富的实践案例,旨在帮助开发者全面理解并掌握Android SDK的使用。这个压缩包提供了书中的所有源码,便于读者在实践中学习...

    android开发课件

    1. **Android开发基础**(ch_01android开发基础.ppt):这部分内容通常会介绍Android平台的概述,包括Android系统架构、开发环境的搭建(如安装Android Studio和SDK)、以及编写第一个Hello World应用程序。...

    Android SDK开发范例大全(第二版)CH03.rar

    《Android SDK开发范例大全(第二版)CH03》是针对Android应用程序开发的一本详尽教程,由清华大学出版社出版。这本书的第三章涵盖了Android SDK中的关键知识点,旨在帮助开发者深入理解和实践Android应用的构建过程。...

    android开发权威指南(第二版)源代码

    《Android开发权威指南(第二版)》是一本深入讲解Android应用程序开发的专业书籍,其源代码提供了丰富的实践示例,帮助开发者深入理解Android平台的工作机制。这些源代码分布在不同的章节文件夹中,包括ch29、ch20...

    Android SDK开发范例大全(第二版)CH06.rar

    《Android SDK开发范例大全(第二版)CH06》是一个关于Android开发的章节资源,主要聚焦于SDK的使用和实战技巧。这个压缩包可能包含了该章节的所有代码示例、讲解文档和其他相关材料,帮助开发者深入理解Android应用...

    疯狂android讲义(第2版) ch02 1-5.zip

    《疯狂Android讲义(第2版)》是李刚老师撰写的一本深入讲解Android开发的经典教程,这本书以其详实的内容和实战导向深受开发者喜爱。在第2章中,作者主要探讨了Android的基础知识和核心概念,为后续章节的学习打下...

    Android ophone开发完全讲义源码ch02-08

    《Android Ophone开发完全讲义源码》涵盖了从基础到进阶的Android应用程序开发知识,主要涉及了第2章至第8章的内容。这个压缩包包含的子文件按章节顺序排列,分别是ch02、ch07、ch06、ch04、ch02(可能是重复或错误...

    疯狂android讲义(第2版) 源码 ch15-19

    《疯狂Android讲义(第2版)》是李刚老师撰写的一本深入讲解Android开发的经典教程,这本书的源代码涵盖了第15至19章的内容。这些章节主要讲解了Android应用开发中的高级技术和实践,包括UI设计、多线程、网络编程、...

    android ophone开发完全讲义源码ch12

    《Android Ophone开发完全讲义源码Ch12》是一份深入探讨Android Ophone平台开发的教程资料,其中包含了第十二章的完整源代码。这一章的焦点可能集中在特定的开发主题上,如应用程序框架、用户界面设计、系统服务集成...

    google.android.sdk开发范例大全.源码ch2-ch6

    源码ch2-ch6”提供了一系列从第二章到第六章的源码示例,旨在帮助开发者深入理解和实践SDK中的各种功能和API。 首先,让我们探讨一下SDK中的核心组件和概念: 1. **AndroidManifest.xml**:这是每个Android应用的...

    Android SDK开发范例大全(第二版)CH09.rar

    《Android SDK开发范例大全(第二版)CH09》是一个关于Android应用程序开发的资源压缩包,主要聚焦在SDK的第九章内容。Android SDK是Android应用开发者的重要工具集,它包含了构建、测试和调试Android应用所需的所有...

    android SDK范例开发大全 第3版 源代码 CH8

    《Android SDK范例开发大全 第3版 源代码 CH8》是一本专注于Android应用程序开发的实战指南,其中包含了丰富的示例代码,旨在帮助开发者深入理解Android SDK的各种功能和使用方法。这部分源代码对应的是书中的第八章...

    android ophone开发完全讲义源码ch02

    本讲义的第二章,"android ophone开发完全讲义源码ch02",将带你走进Android Ophone的世界,揭示其核心原理与开发技巧。 首先,Android Ophone是基于Android操作系统为中国移动定制的一个智能手机平台,它融合了...

    android ophone开发完全讲义源码ch06

    在Android Ophone开发中,Chapter 6(ch06)通常涵盖了系统架构、应用程序组件、UI设计、数据存储以及网络通信等关键知识点。这个压缩包可能包含了一系列的代码示例、教程文档或项目实例,旨在帮助开发者深入理解...

    Google Android SDK开发范例大全(第三版) 源代码

    6. **CH03**和**CH06_part1**: 这两个章节可能分别介绍了Android应用的基础架构和部分高级主题,例如广播接收器(BroadcastReceiver)、内容提供者(ContentProvider)或者Intent的使用,这些都是Android组件模型的...

    android ophone开发完全讲义源码ch04

    《Android OPhone开发完全讲义源码Ch04》是一份深入探讨Android OPhone平台开发的教程资料,其中包含了第四章的源代码。这一章节主要聚焦于Android应用程序的架构、UI设计以及与设备硬件交互的基础知识。在Android ...

    android ophone开发完全讲义源码ch24

    《Android Ophone开发完全讲义源码Ch24》是一份深入探讨Android Ophone平台开发的教程资料,其中包含了第24章的源代码。在这一章节中,开发者将了解到如何在Android Ophone环境下进行应用的构建、调试以及优化。...

    Android开发权威指南(源代码ch03)

    在本章“ch03”中,我们将探索Android应用的基础架构,包括Activity、Intent、BroadcastReceiver以及Service等核心组件。这些组件构成了Android应用的核心功能,理解和掌握它们对于任何Android开发者来说都是至关...

Global site tag (gtag.js) - Google Analytics