{"id":434,"date":"2009-06-04T23:15:28","date_gmt":"2009-06-04T15:15:28","guid":{"rendered":"http:\/\/percy.blog.ubuntu.org.cn\/?p=434"},"modified":"2009-06-04T23:15:28","modified_gmt":"2009-06-04T15:15:28","slug":"androidgoogle-%e7%bf%bb%e8%af%91%e5%89%8d%e7%ab%af","status":"publish","type":"post","link":"https:\/\/pjq.me\/?p=434","title":{"rendered":"Android:Google \u7ffb\u8bd1\u524d\u7aef"},"content":{"rendered":"<p>Update<br \/>\n\u505a\u4e86\u4e00\u4e2aGoogle \u7ffb\u8bd1\u524d\u7aef\u3002<br \/>\n\u6d89\u53ca\u5230Android  Spinner\u7528\u6cd5\uff0c\u7f51\u7edc\u6570\u636e\u89e3\u6790\uff0c\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u4ee5\u53ca\u6587\u4ef6\u7684\u8bfb\u5199\uff08\u5305\u542b\u8bfb\u5199\u4e2d\u6587\uff08UTF\uff09\uff09<\/p>\n<p>\u6e90\u7801\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\u5230\u3002<br \/>\nhttp:\/\/github.com\/pjq\/GTranslator\/tree\/master<br \/>\n\u5982\u679c\u89c9\u5f97\u8fd9\u4e2a\u7a0b\u5e8f\u6709\u7528\uff0c\u4e5f\u8bf7\u9876\u4e00\u4e0b\u4e86\uff0c\u8c22\u8c22 \u3002<\/p>\n<p>\u53ef\u4ee5\u9009\u62e9\u8981\u7ffb\u8bd1\u7684\u8bed\u8a00\u3002<\/p>\n<p>\u4e3b\u754c\u9762\uff1a<\/p>\n<table style=\"width:auto\">\n<tr>\n<td><a href=\"http:\/\/picasaweb.google.com\/lh\/photo\/vqfUo9zzqumAzfs22NtdPQ?feat=embedwebsite\"><img decoding=\"async\" src=\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"font-family:arial,sans-serif;font-size:11px;text-align:right\">\u53d1\u4ef6\u4eba <a href=\"http:\/\/picasaweb.google.com\/pengjianqing\/Snapshoot?feat=embedwebsite\">snapshoot<\/a><\/td>\n<\/tr>\n<\/table>\n<p>\u67e5\u8be2\u5386\u53f2\uff0c\u7528\u5230\u7684\u662f\u6570\u636e\u5e93\uff1a<\/p>\n<table style=\"width:auto\">\n<tr>\n<td><a href=\"http:\/\/picasaweb.google.com\/lh\/photo\/78W9b8Vja7HS6LJCXnMIrg?feat=embedwebsite\"><img decoding=\"async\" src=\"http:\/\/lh4.ggpht.com\/_GxH7-x2-l3Y\/SifiXyltkvI\/AAAAAAAAAOE\/ZykrT5roXv8\/s800\/2009-06-04-225748_377x729_scrot.jpg\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"font-family:arial,sans-serif;font-size:11px;text-align:right\">\u53d1\u4ef6\u4eba <a href=\"http:\/\/picasaweb.google.com\/pengjianqing\/Snapshoot?feat=embedwebsite\">snapshoot<\/a><\/td>\n<\/tr>\n<\/table>\n<p>\u8fd9\u91cc\u4e5f\u662f\u67e5\u8be2\u5386\u53f2\u7528\u7684\u662f\u6587\u4ef6\u8bfb\u5199\uff1a<\/p>\n<table style=\"width:auto\">\n<tr>\n<td><a href=\"http:\/\/picasaweb.google.com\/lh\/photo\/UD99VCTYh3RZcWi9E8rw6A?feat=embedwebsite\"><img decoding=\"async\" src=\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/Sifibw0o0TI\/AAAAAAAAAOI\/5cfVbHOG1AY\/s800\/2009-06-04-225813_379x731_scrot.jpg\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"font-family:arial,sans-serif;font-size:11px;text-align:right\">\u53d1\u4ef6\u4eba <a href=\"http:\/\/picasaweb.google.com\/pengjianqing\/Snapshoot?feat=embedwebsite\">snapshoot<\/a><\/td>\n<\/tr>\n<\/table>\n<p>\u7ffb\u8bd1\u8bed\u8a00\u9009\u62e9\uff1a<\/p>\n<table style=\"width:auto\">\n<tr>\n<td><a href=\"http:\/\/picasaweb.google.com\/lh\/photo\/842sQQDwCv7Hc3RImz4hhA?feat=embedwebsite\"><img decoding=\"async\" src=\"http:\/\/lh5.ggpht.com\/_GxH7-x2-l3Y\/Sififul7ByI\/AAAAAAAAAOM\/72ErFDIlBD4\/s800\/2009-06-04-225831_376x731_scrot.jpg\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"font-family:arial,sans-serif;font-size:11px;text-align:right\">\u53d1\u4ef6\u4eba <a href=\"http:\/\/picasaweb.google.com\/pengjianqing\/Snapshoot?feat=embedwebsite\">snapshoot<\/a><\/td>\n<\/tr>\n<\/table>\n<p>\u4e3b\u8981Android \u6e90\u7801\uff1a<br \/>\n<!--more--><br \/>\nGTranslator.java<\/p>\n<pre lang=\"java\">\n\npackage com.percy.gtranslator;\n\nimport java.io.BufferedInputStream;\nimport java.io.BufferedReader;\nimport java.io.IOException;\nimport java.io.InputStream;\nimport java.io.InputStreamReader;\nimport java.net.URL;\nimport java.net.URLConnection;\nimport java.util.ArrayList;\nimport java.util.List;\n\nimport org.apache.http.impl.cookie.DateParseException;\n\nimport android.R.integer;\nimport android.app.Activity;\nimport android.database.Cursor;\nimport android.database.DatabaseUtils;\nimport android.graphics.Bitmap;\nimport android.graphics.BitmapFactory;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.ViewManager;\nimport android.view.View.OnClickListener;\nimport android.widget.ArrayAdapter;\nimport android.widget.Button;\nimport android.widget.EditText;\nimport android.widget.TextView;\nimport android.widget.Toast;\nimport android.widget.Spinner;\n\npublic class GTranslator extends Activity implements OnClickListener\n{\n\t\/** Called when the activity is first created. *\/\n\tprivate static final boolean\tbAtOffice\t\t= false;\n\n\tprivate TextView\t\t\t\ttextViewTranslate;\n\tprivate Button\t\t\t\t\tbuttonTranslate;\n\tprivate EditText\t\t\t\teditTextTranslate;\n\n\tprivate TextView\t\t\t\tpromptTextView;\n\tprivate Spinner\t\t\t\t\tusedTranslatorSpinner;\n\tprivate Spinner\t\t\t\t\tfromSpinner;\n\tprivate Spinner\t\t\t\t\ttoSpinner;\n\tprivate Button\t\t\t\t\ttranslateButton;\n\tprivate Button\t\t\t\t\tclearButton;\n\tprivate Button\t\t\t\t\treadDatabaseButton;\n\tprivate Button\t\t\t\t\treadFileButton;\n\tprivate TextView\t\t\t\ttranslatedTextView;\n\tprivate EditText\t\t\t\ttoTranslateEditText;\n\n\tprivate DBAdapter\t\t\t\tdbAdapter;\n\n\tprivate static final String[]\tmCountries\t\t=\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ \"en\", \"zh-CN\", \"it\",\n\t\t\t\"zh_TW\", \"ja\", \"de\", \"el\", \"ko\", \"ko\", \"ru\", \"th\", \"fr\", \"fr\" };\n\n\tprivate static final String[]\ttranslateWeb\t=\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ \"google\", \"yahoo\",\n\t\t\t\"baidu\"\t\t\t\t\t\t\t\t};\n\tprivate List\t\t\tallcountries;\n\n\tprivate ArrayAdapter\tfromSpinnerAdapter;\n\n\tprivate ArrayAdapter\ttranslateWebAdapter;\n\tprivate List\t\t\tallTranslateWeb;\n\n\tprivate String\t\t\t\t\tfromString;\n\tprivate String\t\t\t\t\ttoString;\n\n\t@Override\n\tpublic void onCreate(Bundle savedInstanceState)\n\t{\n\t\tsuper.onCreate(savedInstanceState);\n\t\tsetContentView(R.layout.main);\n\t\tsetTheme(android.R.style.Theme_NoTitleBar);\n\n\t\tthis.dbAdapter = new DBAdapter(this);\n\t\tthis.dbAdapter.open();\n\n\t\tpromptTextView = (TextView) findViewById(R.id.promptTextView);\n\t\tusedTranslatorSpinner = (Spinner) findViewById(R.id.usedTranslatorSpinner);\n\t\tfromSpinner = (Spinner) findViewById(R.id.fromSpinner);\n\t\ttoSpinner = (Spinner) findViewById(R.id.toSpinner);\n\t\ttranslateButton = (Button) findViewById(R.id.translateButton);\n\t\tclearButton = (Button) findViewById(R.id.clearButton);\n\t\treadDatabaseButton = (Button) findViewById(R.id.readDatabaseButton);\n\t\treadFileButton = (Button) findViewById(R.id.readFileButton);\n\t\ttranslatedTextView = (TextView) findViewById(R.id.translatedTextView);\n\t\ttoTranslateEditText = (EditText) findViewById(R.id.toTranslateEditText);\n\n\t\ttoTranslateEditText.setCursorVisible(true);\n\t\ttoTranslateEditText.setVerticalScrollBarEnabled(true);\n\n\t\ttranslateButton.setOnClickListener(this);\n\t\tclearButton.setOnClickListener(this);\n\t\treadDatabaseButton.setOnClickListener(this);\n\t\treadFileButton.setOnClickListener(this);\n\n\t\tallcountries = new ArrayList();\n\n\t\tfor (int i = 0; i &lt; mCountries.length; i++)\n\t\t{\n\t\t\tallcountries.add(mCountries[i]);\n\t\t}\n\n\t\tfromSpinnerAdapter = new ArrayAdapter(this,\n\t\t\t\tandroid.R.layout.simple_spinner_item, allcountries);\/\/ simple_spinner_item\n\t\tfromSpinnerAdapter\n\t\t\t\t.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\/\/ simple_spinner_dropdown_item\n\t\tfromSpinner.setAdapter(fromSpinnerAdapter);\n\t\tfromSpinner.setSelection(0);\n\t\ttoSpinner.setAdapter(fromSpinnerAdapter);\n\t\ttoSpinner.setSelection(1);\n\n\t\tallTranslateWeb = new ArrayList();\n\t\tfor (int i = 0; i &lt; translateWeb.length; i++)\n\t\t{\n\t\t\tallTranslateWeb.add(translateWeb[i]);\n\t\t}\n\n\t\ttranslateWebAdapter = new ArrayAdapter(this,\n\t\t\t\tandroid.R.layout.simple_spinner_item, allTranslateWeb);\n\t\ttranslateWebAdapter\n\t\t\t\t.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);\n\t\tusedTranslatorSpinner.setAdapter(translateWebAdapter);\n\n\t\tlistItemFromDatabase();\n\t}\n\n\t@Override\n\tpublic void onClick(View v)\n\t{\n\t\tint id = v.getId();\n\t\tif (id == R.id.translateButton)\n\t\t{\n\t\t\ttranslatedTextView.setText(\"Connecting...\");\n\t\t\tString toTranslateTextString = toTranslateEditText.getText()\n\t\t\t\t\t.toString();\n\t\t\tString tempString = toTranslateTextString.replace(\" \", \"%20\");\n\t\t\tfromString = mCountries[fromSpinner.getSelectedItemPosition()];\n\t\t\ttoString = mCountries[toSpinner.getSelectedItemPosition()];\n\t\t\tString queryString = tempString + \"&amp;langpair=\" + fromString + \"%7C\"\n\t\t\t\t\t+ toString;\n\t\t\t\/\/ String queryString = tempString + \"&amp;langpair=en%7Czh-CN\";\n\t\t\t\/\/ textViewTranslate.setText(\"queryString:\"+toTranslateTextString+\":\"+'\\n');\n\n\t\t\tString rawData = getRawData(queryString);\n\t\t\tif (null != rawData)\n\t\t\t{\n\t\t\t\tString parsedDataString = getData(rawData);\n\t\t\t\tif (null == parsedDataString||\"\"==parsedDataString)\n\t\t\t\t{\n\t\t\t\t\ttranslatedTextView.setText(\"Not found\");\n\t\t\t\t} else\n\t\t\t\t{\n\t\t\t\t\ttranslatedTextView.setText(parsedDataString);\n\t\t\t\t\tdbAdapter.insertItem(toTranslateTextString, parsedDataString);\n\n\t\t\t\t\tFileAccess.writeFile(this, toTranslateTextString + \":\"\n\t\t\t\t\t\t\t+ parsedDataString);\n\t\t\t\t}\n\n\n\n\t\t\t} else\n\t\t\t{\n\t\t\t\ttranslatedTextView.setText(\"Translate failed!\");\n\t\t\t}\n\t\t} else if (id == R.id.clearButton)\n\t\t{\n\t\t\ttoTranslateEditText.setText(\"\");\n\t\t\ttranslatedTextView.setText(\"\");\n\t\t} else if (id == R.id.readDatabaseButton)\n\t\t{\n\t\t\ttranslatedTextView.setText(\"Search history(Read Database):\" + '\\n');\n\t\t\tCursor mCursor = this.dbAdapter.getAllItem();\n\t\t\tif (mCursor.moveToFirst())\n\t\t\t{\n\t\t\t\tdo\n\t\t\t\t{\n\t\t\t\t\tint index = mCursor.getColumnIndex(DBAdapter.TOTRANSLATETEXT);\n\t\t\t\t\tString fromTextString = mCursor.getString(index);\n\t\t\t\t\tindex = mCursor.getColumnIndex(DBAdapter.TRANSLATEDTEXT);\n\t\t\t\t\tString toTextString = mCursor.getString(index);\n\t\t\t\t\ttranslatedTextView\n\t\t\t\t\t\t\t.append(\"**********************************\" + '\\n');\n\t\t\t\t\ttranslatedTextView.append(fromTextString + \":\" + toTextString\n\t\t\t\t\t\t\t+ '\\n');\n\n\t\t\t\t} while (mCursor.moveToNext());\n\t\t\t\ttranslatedTextView\n\t\t\t\t\t\t.append(\"**********************************\" + '\\n');\n\t\t\t}\n\n\t\t} else if (id == R.id.readFileButton)\n\t\t{\n\n\t\t\ttranslatedTextView\n\t\t\t\t\t.setText(\"Search history(Read File):\" + '\\n');\n\t\t\tString readTextString = FileAccess.readFile(this, \"test.txt\");\n\t\t\ttranslatedTextView.append(\"\" + readTextString);\n\n\t\t}\n\t}\n\n\t@Override\n\tprotected void onDestroy()\n\t{\n\t\t\/\/ TODO Auto-generated method stub\n\n\t\tsuper.onDestroy();\n\t\tdbAdapter.close();\n\t}\n\n\tpublic static String getData(String dataString)\n\t{\n\t\tint index1 = dataString.indexOf(\",\");\n\t\tString string1 = dataString.substring(1, index1);\n\t\tString string2 = string1.replace(\"\\\"\", \"\");\n\n\t\tint index2 = string2.lastIndexOf(\":\");\n\t\tString string3 = string2.substring(index2);\n\t\tString string4 = string3.replace(\"}\", \"\");\n\t\tString string5 = string4.replace(\":\", \"\");\n\t\treturn string5;\n\t}\n\n\tpublic static String getRawData(String string)\n\t{\n\n\t\tString dataString = null;\n\t\t\/\/ String queryString = \"hello%20world&amp;langpair=en%7Czh-CN\";\n\t\tString queryString = string;\n\t\ttry\n\t\t{\n\t\t\tURL url;\n\t\t\tif (bAtOffice)\n\t\t\t{\n\t\t\t\turl = new URL(\"http:\/\/10.85.40.153:8000\/a.xml\");\n\t\t\t} else\n\t\t\t{\n\t\t\t\turl = new URL(\n\t\t\t\t\t\t\"http:\/\/ajax.googleapis.com\/ajax\/services\/language\/translate?v=1.0&amp;q=\"\n\t\t\t\t\t\t\t\t+ queryString);\n\t\t\t}\n\n\t\t\tURLConnection conn = url.openConnection();\n\t\t\tconn.connect();\n\t\t\tBufferedReader reader = new BufferedReader(new InputStreamReader(\n\t\t\t\t\tconn.getInputStream()));\n\n\t\t\tbyte buffer[] = new byte[1024];\n\n\t\t\t\/\/ bis.r\n\t\t\tString readerString;\n\t\t\twhile ((readerString = reader.readLine()) != null)\n\t\t\t{\n\t\t\t\tdataString += readerString;\n\t\t\t}\n\n\t\t\treader.close();\n\t\t\t\/\/ is.close();\n\n\t\t} catch (IOException e)\n\t\t{\n\t\t\tSystem.out.print(\"Net work error\");\n\t\t}\n\t\treturn dataString;\n\n\t}\n\n\tpublic void createTable(String tableName, String[] columnNames)\n\t\t\tthrows DateParseException\n\t{\n\t\tStringBuffer sql = new StringBuffer(\"Create table if not exists\");\n\t\tsql.append(tableName);\n\t\tsql.append(\"(\");\n\t\tint length = columnNames.length - 1;\n\t\tfor (int i = 0; i &lt;= length; i++)\n\t\t{\n\t\t\tsql.append(columnNames[i]);\n\t\t\tsql.append(\"varchar\");\n\t\t}\n\t\tsql.append(\");\");\n\n\t}\n\n\tpublic void listItemFromDatabase()\n\t{\n\n\t\ttranslatedTextView.append(\"Search history:\" + '\\n');\n\t\tCursor mCursor = this.dbAdapter.getAllItem();\n\t\tif (mCursor.moveToFirst())\n\t\t{\n\t\t\tdo\n\t\t\t{\n\t\t\t\tint index = mCursor.getColumnIndex(DBAdapter.TOTRANSLATETEXT);\n\t\t\t\tString fromTextString = mCursor.getString(index);\n\t\t\t\tindex = mCursor.getColumnIndex(DBAdapter.TRANSLATEDTEXT);\n\t\t\t\tString toTextString = mCursor.getString(index);\n\t\t\t\ttranslatedTextView\n\t\t\t\t\t\t.append(\"**********************************\" + '\\n');\n\t\t\t\ttranslatedTextView.append(fromTextString + \":\" + toTextString\n\t\t\t\t\t\t+ '\\n');\n\n\t\t\t} while (mCursor.moveToNext());\n\t\t\ttranslatedTextView\n\t\t\t\t\t.append(\"**********************************\" + '\\n');\n\t\t}\n\n\t\ttranslatedTextView\n\t\t\t\t.append(\"#################Read File###################\" + '\\n');\n\t\tString readTextString = FileAccess.readFile(this, \"test.txt\");\n\t\ttranslatedTextView.append(\"\" + readTextString);\n\n\t}\n\n}\n<\/pre>\n<p>DBAdapter.java<\/p>\n<pre lang=\"java\">\npackage com.percy.gtranslator;\n\n\n\nimport android.content.ContentValues;\n\nimport android.content.Context;\n\nimport android.database.Cursor;\n\nimport android.database.SQLException;\n\nimport android.database.sqlite.SQLiteDatabase;\n\nimport android.database.sqlite.SQLiteOpenHelper;\n\nimport android.database.sqlite.SQLiteDatabase.CursorFactory;\n\nimport android.text.StaticLayout;\n\n\n\npublic class DBAdapter\n\n{\n\n\tpublic final static String\tKEYID\t\t\t= \"_id\";\n\n\tpublic final static String\tTOTRANSLATETEXT\t= \"ToTranslateText\";\n\n\tpublic final static String\tTRANSLATEDTEXT\t= \"TranslatedText\";\n\n\n\n\tpublic final static String\tTABLENAME\t\t= \"TRANSLATOR\";\n\n\tpublic final static String\tDATABASENAME\t= \"TRANSLATORDATABASE\";\n\n\tpublic final static int\t\tDATABASEVERSION\t= 1;\n\n\n\n\tprivate static final String\tCREATETABLE\t\t= \"create table \"\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ TABLENAME\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \" (\"\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ KEYID\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \" integer primary key autoincrement,\"\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ TOTRANSLATETEXT\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \" text not null, \"\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ TRANSLATEDTEXT\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t+ \" text not null);\";\n\n\n\n    private static final String DATABASE_CREATE =\n\n        \"create table titles (_id integer primary key autoincrement, \"\n\n        + \"isbn text not null, title text not null, \"\n\n        + \"publisher text not null);\";\n\n\n\n\tprivate DatabaseHelper\t\tDBHelper;\n\n\tprivate SQLiteDatabase\t\tdb;\n\n\tprivate Context\t\t\t\tcontext;\n\n\n\n\tpublic DBAdapter(Context context)\n\n\t{\n\n\t\tthis.context = context;\n\n\t\tthis.DBHelper = new DatabaseHelper(context);\n\n\t}\n\n\n\n\tpublic static class DatabaseHelper extends SQLiteOpenHelper\n\n\t{\n\n\n\n\t\t\/\/ public DatabaseHelper(Context context, String name, CursorFactory\n\n\t\t\/\/ factory, int version)\n\n\t\tpublic DatabaseHelper(Context context)\n\n\t\t{\n\n\t\t\tsuper(context, DATABASENAME, null, DATABASEVERSION);\n\n\t\t\t\/\/ TODO Auto-generated constructor stub\n\n\t\t}\n\n\n\n\t\t@Override\n\n\t\tpublic void onCreate(SQLiteDatabase db)\n\n\t\t{\n\n\t\t\t\/\/ TODO Auto-generated method stub\n\n\t\t\tdb.execSQL(CREATETABLE);\n\n\n\n\t\t}\n\n\n\n\t\t@Override\n\n\t\tpublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)\n\n\t\t{\n\n\t\t\t\/\/ TODO Auto-generated method stub\n\n\n\n\t\t}\n\n\n\n\t}\n\n\n\n\tpublic void open() throws SQLException\n\n\t{\n\n\t\tdb = this.DBHelper.getWritableDatabase();\n\n\t\t\/\/ return this;\n\n\t}\n\n\n\n\tpublic void close()\n\n\t{\n\n\t\tDBHelper.close();\n\n\t}\n\n\n\n\tpublic long insertItem(String fromText, String toText)\n\n\t{\n\n\t\tContentValues contentValues = new ContentValues();\n\n\t\tcontentValues.put(TOTRANSLATETEXT, fromText);\n\n\t\tcontentValues.put(TRANSLATEDTEXT, toText);\n\n\t\treturn db.insert(TABLENAME, null, contentValues);\n\n\t}\n\n\n\n\tpublic Cursor getItem(long id) throws SQLException\n\n\t{\n\n\t\t\/\/ db.query(TABLENAME, new String[]{}, selection, selectionArgs,\n\n\t\t\/\/ groupBy, having, orderBy);\n\n\t\tCursor mCursor = db.query(TABLENAME, new String[]\n\n\t\t{ TOTRANSLATETEXT, TRANSLATEDTEXT }, KEYID + \"=\" + id, null, null,\n\n\t\t\t\tnull, null);\n\n\n\n\t\tif (mCursor != null)\n\n\t\t{\n\n\t\t\tmCursor.moveToFirst();\n\n\t\t}\n\n\t\treturn mCursor;\n\n\t}\n\n\n\n\tpublic Cursor getAllItem() throws SQLException\n\n\t{\n\n\t\tCursor mCursor = db.query(TABLENAME, new String[]\n\n\t\t{ TOTRANSLATETEXT, TRANSLATEDTEXT }, null, null, null, null, null);\n\n\n\n\t\treturn mCursor;\n\n\t}\n\n\n\n}\n\n\n<\/pre>\n<p>FileAccess.java<\/p>\n<pre lang=\"java\">\npackage com.percy.gtranslator;\n\n\n\nimport java.io.BufferedInputStream;\n\nimport java.io.BufferedReader;\n\nimport java.io.DataInputStream;\n\nimport java.io.DataOutputStream;\n\nimport java.io.File;\n\nimport java.io.FileInputStream;\n\nimport java.io.FileNotFoundException;\n\nimport java.io.FileOutputStream;\n\nimport java.io.IOException;\n\nimport java.io.InputStream;\n\nimport java.io.InputStreamReader;\n\nimport java.io.OutputStreamWriter;\n\nimport java.nio.CharBuffer;\n\n\n\nimport android.R.integer;\n\nimport android.content.Context;\n\nimport android.content.res.Resources;\n\nimport android.widget.Toast;\n\n\n\npublic class FileAccess\n\n{\n\n\tpublic static String\tfileName\t= \"\";\n\n\n\n\tpublic static String readFile(Context context, String file)\n\n\t{\n\n\t\tfileName = file;\n\n\t\tString data = \"\";\n\n\n\n\t\tFileInputStream fi = null;\n\n\t\tDataInputStream dis = null;\n\n\t\tInputStreamReader isr = null;\n\n\n\n\t\t\/\/ if don't exist,just create the file.\n\n\t\tFileOutputStream fos;\n\n\t\ttry\n\n\t\t{\n\n\n\n\t\t\t\/\/ fos = context.openFileOutput(fileName,\n\n\t\t\t\/\/ context.MODE_WORLD_WRITEABLE);\n\n\n\n\t\t\t\/\/ fos.flush();\n\n\t\t\t\/\/ fos.close();\n\n\t\t\tfi = context.openFileInput(fileName);\n\n\t\t\tisr = new InputStreamReader(fi);\n\n\n\n\t\t\tdis = new DataInputStream(fi);\n\n\n\n\t\t\tchar[] buffer = new char[1024];\n\n\n\n\t\t\tString line;\n\n\n\n\t\t\twhile ((line = dis.readUTF()) != null)\n\n\t\t\t{\n\n\t\t\t\tdata += line;\n\n\t\t\t}\n\n\n\n\t\t\tisr.close();\n\n\t\t\tdis.close();\n\n\t\t\tfi.close();\n\n\t\t} catch (Exception e)\n\n\t\t{\n\n\t\t\t\/\/ TODO: handle exception\n\n\t\t}\n\n\n\n\t\treturn data;\n\n\n\n\t}\n\n\n\n\tpublic static void writeFile(Context context, String toWriteString)\n\n\t{\n\n\t\ttry\n\n\t\t{\n\n\t\t\tFileOutputStream fos = context.openFileOutput(fileName,\n\n\t\t\t\t\tcontext.MODE_APPEND);\n\n\t\t\t\/\/OutputStreamWriter dos = new OutputStreamWriter(fos);\n\n\t\t\t\/\/ dos.writeChars(toWriteString);\n\n\t\t\tDataOutputStream dos = new DataOutputStream(fos);\n\n\t\t\tdos.writeUTF(toWriteString+'\\n');\n\n\n\n\n\n\t\t\tdos.flush();\n\n\t\t\tfos.flush();\n\n\t\t\tdos.close();\n\n\t\t\tfos.close();\n\n\n\n\t\t} catch (FileNotFoundException e)\n\n\t\t{\n\n\t\t\t\/\/ TODO Auto-generated catch block\n\n\t\t\tToast.makeText(context, \"File not found\", 4000).show();\n\n\t\t\te.printStackTrace();\n\n\t\t} catch (IOException e)\n\n\t\t{\n\n\t\t\t\/\/ TODO Auto-generated catch block\n\n\t\t\te.printStackTrace();\n\n\t\t}\n\n\t}\n\n\n\n}\n\n\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u505a\u4e86\u4e00\u4e2aGoogle \u7ffb\u8bd1\u524d\u7aef\u3002<br \/>\n\u6d89\u53ca\u5230Android  Spinner\u7528\u6cd5\uff0c\u7f51\u7edc\u6570\u636e\u89e3\u6790\uff0c\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u4ee5\u53ca\u6587\u4ef6\u7684\u8bfb\u5199\uff08\u5305\u542b\u8bfb\u5199\u4e2d\u6587\uff08UTF\uff09\uff09<\/p>\n<p>\u6e90\u7801\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\u5230\u3002<br \/>\nhttp:\/\/github.com\/pjq\/GTranslator\/tree\/master<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[50,55,63,106,111],"class_list":["post-434","post","type-post","status-publish","format-standard","hentry","category-android","tag-android","tag-databasegoogle","tag-file","tag-spinner","tag-translator"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/pjq.me\/?p=434\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog\" \/>\n<meta property=\"og:description\" content=\"\u505a\u4e86\u4e00\u4e2aGoogle \u7ffb\u8bd1\u524d\u7aef\u3002 \u6d89\u53ca\u5230Android Spinner\u7528\u6cd5\uff0c\u7f51\u7edc\u6570\u636e\u89e3\u6790\uff0c\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u4ee5\u53ca\u6587\u4ef6\u7684\u8bfb\u5199\uff08\u5305\u542b\u8bfb\u5199\u4e2d\u6587\uff08UTF\uff09\uff09 \u6e90\u7801\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\u5230\u3002 http:\/\/github.com\/pjq\/GTranslator\/tree\/master\" \/>\n<meta property=\"og:url\" content=\"https:\/\/pjq.me\/?p=434\" \/>\n<meta property=\"og:site_name\" content=\"Jianqing&#039;s Blog\" \/>\n<meta property=\"article:published_time\" content=\"2009-06-04T15:15:28+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\" \/>\n<meta name=\"author\" content=\"pengjianqing\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"pengjianqing\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/pjq.me\/?p=434#article\",\"isPartOf\":{\"@id\":\"https:\/\/pjq.me\/?p=434\"},\"author\":{\"name\":\"pengjianqing\",\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60\"},\"headline\":\"Android:Google \u7ffb\u8bd1\u524d\u7aef\",\"datePublished\":\"2009-06-04T15:15:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/pjq.me\/?p=434\"},\"wordCount\":25,\"commentCount\":6,\"publisher\":{\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60\"},\"image\":{\"@id\":\"https:\/\/pjq.me\/?p=434#primaryimage\"},\"thumbnailUrl\":\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\",\"keywords\":[\"Android\",\"Database\uff0cGoogle\",\"File\",\"Spinner\",\"Translator\"],\"articleSection\":[\"Android\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/pjq.me\/?p=434#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/pjq.me\/?p=434\",\"url\":\"https:\/\/pjq.me\/?p=434\",\"name\":\"Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog\",\"isPartOf\":{\"@id\":\"https:\/\/pjq.me\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/pjq.me\/?p=434#primaryimage\"},\"image\":{\"@id\":\"https:\/\/pjq.me\/?p=434#primaryimage\"},\"thumbnailUrl\":\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\",\"datePublished\":\"2009-06-04T15:15:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/pjq.me\/?p=434#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/pjq.me\/?p=434\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/pjq.me\/?p=434#primaryimage\",\"url\":\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\",\"contentUrl\":\"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/pjq.me\/?p=434#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/pjq.me\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Android:Google \u7ffb\u8bd1\u524d\u7aef\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/pjq.me\/#website\",\"url\":\"https:\/\/pjq.me\/\",\"name\":\"Jianqing&#039;s Blog\",\"description\":\"Thoughts and Future\",\"publisher\":{\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/pjq.me\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60\",\"name\":\"pengjianqing\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/pjq.me\/wp-content\/uploads\/2021\/12\/Screen-Shot-2021-12-02-at-6.10.58-PM.png\",\"contentUrl\":\"https:\/\/pjq.me\/wp-content\/uploads\/2021\/12\/Screen-Shot-2021-12-02-at-6.10.58-PM.png\",\"width\":460,\"height\":752,\"caption\":\"pengjianqing\"},\"logo\":{\"@id\":\"https:\/\/pjq.me\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/pjq.me\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/pjq.me\/?p=434","og_locale":"en_US","og_type":"article","og_title":"Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog","og_description":"\u505a\u4e86\u4e00\u4e2aGoogle \u7ffb\u8bd1\u524d\u7aef\u3002 \u6d89\u53ca\u5230Android Spinner\u7528\u6cd5\uff0c\u7f51\u7edc\u6570\u636e\u89e3\u6790\uff0c\u6570\u636e\u5e93\u64cd\u4f5c\uff0c\u4ee5\u53ca\u6587\u4ef6\u7684\u8bfb\u5199\uff08\u5305\u542b\u8bfb\u5199\u4e2d\u6587\uff08UTF\uff09\uff09 \u6e90\u7801\u53ef\u4ee5\u5728\u8fd9\u91cc\u4e0b\u8f7d\u5230\u3002 http:\/\/github.com\/pjq\/GTranslator\/tree\/master","og_url":"https:\/\/pjq.me\/?p=434","og_site_name":"Jianqing&#039;s Blog","article_published_time":"2009-06-04T15:15:28+00:00","og_image":[{"url":"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg","type":"","width":"","height":""}],"author":"pengjianqing","twitter_card":"summary_large_image","twitter_misc":{"Written by":"pengjianqing","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/pjq.me\/?p=434#article","isPartOf":{"@id":"https:\/\/pjq.me\/?p=434"},"author":{"name":"pengjianqing","@id":"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60"},"headline":"Android:Google \u7ffb\u8bd1\u524d\u7aef","datePublished":"2009-06-04T15:15:28+00:00","mainEntityOfPage":{"@id":"https:\/\/pjq.me\/?p=434"},"wordCount":25,"commentCount":6,"publisher":{"@id":"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60"},"image":{"@id":"https:\/\/pjq.me\/?p=434#primaryimage"},"thumbnailUrl":"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg","keywords":["Android","Database\uff0cGoogle","File","Spinner","Translator"],"articleSection":["Android"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/pjq.me\/?p=434#respond"]}]},{"@type":"WebPage","@id":"https:\/\/pjq.me\/?p=434","url":"https:\/\/pjq.me\/?p=434","name":"Android:Google \u7ffb\u8bd1\u524d\u7aef - Jianqing&#039;s Blog","isPartOf":{"@id":"https:\/\/pjq.me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/pjq.me\/?p=434#primaryimage"},"image":{"@id":"https:\/\/pjq.me\/?p=434#primaryimage"},"thumbnailUrl":"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg","datePublished":"2009-06-04T15:15:28+00:00","breadcrumb":{"@id":"https:\/\/pjq.me\/?p=434#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/pjq.me\/?p=434"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/pjq.me\/?p=434#primaryimage","url":"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg","contentUrl":"http:\/\/lh3.ggpht.com\/_GxH7-x2-l3Y\/SifiR9dwBCI\/AAAAAAAAAOA\/wQ0ekzlhM7A\/s800\/2009-06-04-225725_384x733_scrot.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/pjq.me\/?p=434#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/pjq.me\/"},{"@type":"ListItem","position":2,"name":"Android:Google \u7ffb\u8bd1\u524d\u7aef"}]},{"@type":"WebSite","@id":"https:\/\/pjq.me\/#website","url":"https:\/\/pjq.me\/","name":"Jianqing&#039;s Blog","description":"Thoughts and Future","publisher":{"@id":"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pjq.me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/pjq.me\/#\/schema\/person\/0eb1e72d1e69fbbd9b5c0bfd8e2aae60","name":"pengjianqing","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/pjq.me\/#\/schema\/person\/image\/","url":"https:\/\/pjq.me\/wp-content\/uploads\/2021\/12\/Screen-Shot-2021-12-02-at-6.10.58-PM.png","contentUrl":"https:\/\/pjq.me\/wp-content\/uploads\/2021\/12\/Screen-Shot-2021-12-02-at-6.10.58-PM.png","width":460,"height":752,"caption":"pengjianqing"},"logo":{"@id":"https:\/\/pjq.me\/#\/schema\/person\/image\/"},"url":"https:\/\/pjq.me\/?author=1"}]}},"views":6196,"_links":{"self":[{"href":"https:\/\/pjq.me\/index.php?rest_route=\/wp\/v2\/posts\/434","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pjq.me\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pjq.me\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pjq.me\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pjq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=434"}],"version-history":[{"count":0,"href":"https:\/\/pjq.me\/index.php?rest_route=\/wp\/v2\/posts\/434\/revisions"}],"wp:attachment":[{"href":"https:\/\/pjq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=434"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pjq.me\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=434"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pjq.me\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=434"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}