package com.google.mcommerce.sample.android.chapter07.contentProvider;
import android.app.Activity;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.UserDictionary;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
import com.google.mcommerce.sample.android.R;
/**
* @author ivan
*
*/
public class UserDictionaryActivity extends Activity implements OnClickListener {
private static final String TAG = "UserDictionaryActivity";
static final String[] mProjection = { UserDictionary.Words._ID,
UserDictionary.Words.WORD, UserDictionary.Words.LOCALE };
private EditText mSearchWord;
private String mSortOrder = UserDictionary.Words.WORD + " ASC";
private ListView mWordList;
private Button mButtonInsert;
private Button mButtonUpdate;
private Button mButtonDelete;
private Button mButtonSearch;
private Cursor mCursor;
private SimpleCursorAdapter mCursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.c07_basic_content_provider);
mSearchWord = (EditText) findViewById(R.id.search_word);
mButtonInsert = (Button) findViewById(R.id.button_insert);
mButtonInsert.setOnClickListener(this);
mButtonUpdate = (Button) findViewById(R.id.button_update);
mButtonUpdate.setOnClickListener(this);
mButtonDelete = (Button) findViewById(R.id.button_delete);
mButtonDelete.setOnClickListener(this);
mButtonSearch = (Button) findViewById(R.id.button_search);
mButtonSearch.setOnClickListener(this);
mWordList = (ListView) findViewById(R.id.listView);
mCursor = getAllUserDictionary(null);
if (null == mCursor) {
log("获取数据失败");
} else if (mCursor.getCount() < 1) {
Toast.makeText(this, "没有数据,请插入数据", Toast.LENGTH_LONG).show();
} else {
// 定义需要显示的列
String[] mWordListColumns = { UserDictionary.Words.WORD,
UserDictionary.Words.LOCALE };
// 定义显示每列的控件
int[] mWordListItems = { R.id.dictWord, R.id.locale };
// 创建一个Adapter对象
mCursorAdapter = new SimpleCursorAdapter(getApplicationContext(),
R.layout.c07_wordlistrow, mCursor, mWordListColumns,
mWordListItems, 0);
mCursorAdapter.notifyDataSetChanged();
mWordList.setAdapter(mCursorAdapter);
}
}
private Cursor getAllUserDictionary(String mSearchString) {
String mSelectionClause;
String[] mSelectionArgs = { "" };
if (TextUtils.isEmpty(mSearchString)) {
// 如果没有查询条件
mSelectionClause = null;
mSelectionArgs = null;
} else {
// 如果输入了查询条件
mSelectionClause = UserDictionary.Words.WORD + " = ?";
mSelectionArgs[0] = mSearchString;
}
// 定义一个查询,返回一个游标对象
Cursor mCursor = getContentResolver().query(
UserDictionary.Words.CONTENT_URI, mProjection,
mSelectionClause, mSelectionArgs, mSortOrder);
return mCursor;
}
private void log(String msg) {
Log.d(TAG, msg);
}
@Override
public void onClick(View v) {
String mSelectionClause;
String[] mSelectionArgs = new String[1];
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button_insert:
// 定义插入操作后的返回值
Uri mNewUri;
// 定义ContentValuse对象
ContentValues mNewValues = new ContentValues();
// 使用ContentValues的put方法为键值对赋值
mNewValues.put(UserDictionary.Words.LOCALE, "en_US");
mNewValues.put(UserDictionary.Words.WORD, "insert");
// 第一个参数是URI,第二个为ContentValue
mNewUri = getContentResolver().insert(
UserDictionary.Words.CONTENT_URI, mNewValues);
mCursor = getAllUserDictionary(null);
mCursorAdapter.changeCursor(mCursor);
Toast.makeText(this, "插入数据为" + ContentUris.parseId(mNewUri),
Toast.LENGTH_SHORT).show();
break;
case R.id.button_update:
// 定义ContentValues包含需要更新的值
ContentValues mUpdateValues = new ContentValues();
// 定义更新行的条件
mSelectionClause = UserDictionary.Words.WORD + " LIKE ?";
mSelectionArgs[0] = "in%";
// 定义更新行的数目
int mRowsUpdated;
// 为ContentValue赋值
mUpdateValues.put(UserDictionary.Words.WORD, "update");
mRowsUpdated = getContentResolver().update(
UserDictionary.Words.CONTENT_URI, mUpdateValues,
mSelectionClause, mSelectionArgs);
mCursor = getAllUserDictionary(null);
mCursorAdapter.changeCursor(mCursor);
Toast.makeText(this, "更新行数为" + mRowsUpdated, Toast.LENGTH_SHORT)
.show();
break;
case R.id.button_delete:
// 定义删除行的条件
mSelectionClause = UserDictionary.Words.WORD + " LIKE ?";
mSelectionArgs[0] = "in%";
// 定义删除的行数
int mRowsDeleted;
// 根据条件删除行
mRowsDeleted = getContentResolver().delete(
UserDictionary.Words.CONTENT_URI, // the user dictionary
// content URI
mSelectionClause, // the column to select on
mSelectionArgs // the value to compare to
);
mCursor = getAllUserDictionary(null);
mCursorAdapter.changeCursor(mCursor);
Toast.makeText(this, "删除行数为" + mRowsDeleted, Toast.LENGTH_SHORT)
.show();
break;
case R.id.button_search:
String mSearchString = mSearchWord.getText().toString();
mCursor = getAllUserDictionary(mSearchString);
mCursorAdapter.changeCursor(mCursor);
}
}
}