Welcome to my daughter's photo album: xuyichun.yupoo.com
Here is a piece of her photos
星期四, 六月 26, 2008
星期二, 十二月 25, 2007
DictDroid (English<->Chinese)
What will it look like:
What will it support:
English to Chinese, or Chinese to English (current Android is unable to input Chinese)
The Full Source:
/res/layout/main.xml
/res/values/string.xml
/src/your_package_structure/DictDroid.java
![]() |
| DictDroid |
What will it support:
English to Chinese, or Chinese to English (current Android is unable to input Chinese)
The Full Source:
/res/layout/main.xml
1
<?xml version="1.0" encoding="utf-8"?>
2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3
android:orientation="vertical"
4
android:layout_width="fill_parent"
5
android:layout_height="fill_parent"
6
>
7
<TextView
8
android:layout_width="fill_parent"
9
android:layout_height="wrap_content"
10
android:text="Input a word:"
11
/>
12
13
<EditText id="@+id/edit1"
14
android:layout_width="fill_parent"
15
android:layout_height="wrap_content"
16
android:hint="English or Chinese word"
17
android:singleLine="true"
18
android:numeric="false"
19
/>
20
<Button id="@+id/button1"
21
android:layout_width="fill_parent"
22
android:layout_height="wrap_content"
23
android:text="Consult"
24
/>
25
<TextView
26
android:layout_width="fill_parent"
27
android:layout_height="wrap_content"
28
android:text="Result:"
29
/>
30
31
<EditText id="@+id/edit2"
32
android:layout_width="fill_parent"
33
android:layout_height="fill_parent"
34
android:layout_weight="1"
35
/>
36
37
</LinearLayout>
38
<?xml version="1.0" encoding="utf-8"?>2
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"3
android:orientation="vertical"4
android:layout_width="fill_parent"5
android:layout_height="fill_parent"6
>7
<TextView8
android:layout_width="fill_parent"9
android:layout_height="wrap_content"10
android:text="Input a word:"11
/>12
13
<EditText id="@+id/edit1"14
android:layout_width="fill_parent"15
android:layout_height="wrap_content"16
android:hint="English or Chinese word"17
android:singleLine="true"18
android:numeric="false"19
/>20
<Button id="@+id/button1"21
android:layout_width="fill_parent"22
android:layout_height="wrap_content"23
android:text="Consult"24
/>25
<TextView26
android:layout_width="fill_parent"27
android:layout_height="wrap_content"28
android:text="Result:"29
/>30
31
<EditText id="@+id/edit2"32
android:layout_width="fill_parent"33
android:layout_height="fill_parent"34
android:layout_weight="1"35
/>36
37
</LinearLayout>38

/res/values/string.xml
1
<?xml version="1.0" encoding="utf-8"?>
2
<resources>
3
<string name="app_name">Dictionary</string>
4
<string name="api_url">http://dict.cn/ws.php?q=</string>
5
<string name="consult">Consult</string>
6
<string name="sentences">例句与用法:</string>
7
</resources>
8
<?xml version="1.0" encoding="utf-8"?>2
<resources>3
<string name="app_name">Dictionary</string>4
<string name="api_url">http://dict.cn/ws.php?q=</string>5
<string name="consult">Consult</string>6
<string name="sentences">例句与用法:</string>7
</resources>8

/src/your_package_structure/DictDroid.java
1
package com.anthony.DictDroid;
2
3
import java.io.IOException;
4
import java.io.InputStream;
5
import java.io.InputStreamReader;
6
import java.io.Reader;
7
import java.io.UnsupportedEncodingException;
8
import java.net.HttpURLConnection;
9
import java.net.URL;
10
import javax.xml.parsers.DocumentBuilder;
11
import javax.xml.parsers.DocumentBuilderFactory;
12
13
import org.w3c.dom.Document;
14
import org.w3c.dom.Element;
15
import org.w3c.dom.NodeList;
16
import org.xml.sax.InputSource;
17
18
import android.app.Activity;
19
import android.os.Bundle;
20
import android.util.Log;
21
import android.view.View;
22
import android.view.View.OnClickListener;
23
import android.widget.Button;
24
import android.widget.EditText;
25
26
public class DictDroid extends Activity ...{
27
/** *//** Called when the activity is first created. */
28
private final String TAG = "DictDroid";
29
30
@Override
31
public void onCreate(Bundle icicle) ...{
32
super.onCreate(icicle);
33
setContentView(R.layout.main);
34
35
((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() ...{
36
37
@Override
38
public void onClick(View v) ...{
39
EditText queryWord = (EditText)findViewById(R.id.edit1);
40
String query = queryWord.getText().toString().trim();
41
if (query.equals("")) ...{
42
queryWord.setText("");
43
queryWord.requestFocus();
44
return;
45
}
46
47
((Button)v).setText(getText(R.string.consult)+"...");
48
49
EditText responseContent = (EditText)findViewById(R.id.edit2);
50
responseContent.setText("");
51
52
try ...{
53
String queryStr;
54
55
if (isEnglish(query)) ...{
56
queryStr = query.replace(" ", "%20");
57
} else ...{
58
queryStr = encode2Gbk(query);
59
}
60
61
Log.i(TAG, getText(R.string.api_url)+queryStr);
62
URL url = new URL(getText(R.string.api_url)+queryStr);
63
HttpURLConnection http = (HttpURLConnection)url.openConnection();
64
http.setRequestMethod("GET");
65
http.connect();
66
67
InputStream inputstream = null;
68
69
try ...{
70
inputstream = http.getInputStream();
71
} catch (IOException e) ...{
72
Log.e(TAG, "getInputStream error");
73
}
74
75
Reader reader = null;
76
InputSource inputsource = null;
77
try ...{
78
reader = new InputStreamReader(inputstream, "gb2312");
79
} catch (UnsupportedEncodingException e) ...{
80
Log.e(TAG, "new InputStreamReader UnsupportedEncodingException");
81
} catch (Exception e) ...{
82
Log.e(TAG, "new InputStreamReader error");
83
}
84
85
try ...{
86
inputsource = new InputSource(reader);
87
} catch (Exception e) ...{
88
Log.e(TAG, "new InputSource error");
89
}
90
91
try...{
92
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
93
DocumentBuilder db = dbf.newDocumentBuilder();
94
Document doc = db.parse(inputsource);
95
96
// pron
97
NodeList pronList = doc.getElementsByTagName("pron");
98
Log.i(TAG, "pron count: "+pronList.getLength());
99
100
String prons = query+":";
101
for (int i=0; i<pronList.getLength(); i++) ...{
102
Element pronEl = (Element)doc.getElementsByTagName("pron").item(i);
103
String aPron = pronEl.getChildNodes().item(0).getNodeValue();
104
Log.i(TAG, "pron["+i+"]: "+aPron);
105
prons += " ["+aPron+"]";
106
}
107
108
// def
109
NodeList defList = doc.getElementsByTagName("def");
110
Log.i(TAG, "def count: "+defList.getLength());
111
112
String defs = "";
113
for (int i=0; i<defList.getLength(); i++) ...{
114
Element defEl = (Element)doc.getElementsByTagName("def").item(i);
115
String aDef = defEl.getChildNodes().item(0).getNodeValue();
116
Log.i(TAG, "def["+i+"]: "+aDef);
117
defs += aDef;
118
}
119
120
// sent
121
NodeList sentList = doc.getElementsByTagName("sent");
122
Log.i(TAG, "sent count: "+sentList.getLength());
123
124
String sents = getText(R.string.sentences).toString();
125
for (int i=0; i<sentList.getLength(); i++) ...{
126
Element sentEl = (Element)doc.getElementsByTagName("sent").item(i);
127
String orig =
128
sentEl.getElementsByTagName("orig").item(0).getChildNodes().item(0).getNodeValue().replace("\n", " ").trim();
129
String trans =
130
sentEl.getElementsByTagName("trans").item(0).getChildNodes().item(0).getNodeValue().replace("\n", " ").trim();
131
Log.i(TAG, "orig["+i+"]: "+orig);
132
Log.i(TAG, "trans["+i+"]: "+trans);
133
int j = i+1;
134
String aSent = "\n"+j+". "+orig+"\n "+trans;
135
sents += aSent;
136
}
137
138
String atall = prons + "\n\n" + defs + "\n\n" + sents.toString();
139
responseContent.setText(atall);
140
((Button)v).setText(getText(R.string.consult));
141
} catch (Exception e)...{
142
Log.e(TAG, "Exception 1: "+e.toString());
143
}
144
} catch (Exception e)...{
145
Log.e(TAG, "Exception 2: "+e.toString());
146
}
147
}
148
});
149
}
150
151
public boolean isEnglish(String source) ...{
152
int unicode = source.codePointAt(0);
153
if ((unicode>='A' && unicode<='Z') || (unicode>='a' && unicode<='z') || unicode==' ') ...{
154
return true;
155
} else ...{
156
return false;
157
}
158
}
159
160
public String encode2Gbk(String source) throws Exception ...{
161
for (int i=0; i<source.length(); i++) ...{
162
int unicode = source.codePointAt(i);
163
if ((unicode>='A' && unicode<='Z') || (unicode>='a' && unicode<='z')) ...{
164
throw new Exception("The string needn't do encoding");
165
}
166
}
167
168
byte[] queryBytes = source.getBytes("gb2312");
169
String destination = "";
170
for (int i=0; i<queryBytes.length; i++) ...{
171
String temp = Integer.toHexString(queryBytes[i]);
172
destination += "%"+temp.substring(temp.length()-2);
173
}
174
175
return destination;
176
}
177
}
package com.anthony.DictDroid;2

3
import java.io.IOException;4
import java.io.InputStream;5
import java.io.InputStreamReader;6
import java.io.Reader;7
import java.io.UnsupportedEncodingException;8
import java.net.HttpURLConnection;9
import java.net.URL;10
import javax.xml.parsers.DocumentBuilder;11
import javax.xml.parsers.DocumentBuilderFactory;12

13
import org.w3c.dom.Document;14
import org.w3c.dom.Element;15
import org.w3c.dom.NodeList;16
import org.xml.sax.InputSource;17

18
import android.app.Activity;19
import android.os.Bundle;20
import android.util.Log;21
import android.view.View;22
import android.view.View.OnClickListener;23
import android.widget.Button;24
import android.widget.EditText;25

26

public class DictDroid extends Activity ...{27

/** *//** Called when the activity is first created. */28
private final String TAG = "DictDroid";29
30
@Override31

public void onCreate(Bundle icicle) ...{32
super.onCreate(icicle);33
setContentView(R.layout.main);34
35

((Button)findViewById(R.id.button1)).setOnClickListener(new OnClickListener() ...{36

37
@Override38

public void onClick(View v) ...{39
EditText queryWord = (EditText)findViewById(R.id.edit1);40
String query = queryWord.getText().toString().trim();41

if (query.equals("")) ...{42
queryWord.setText("");43
queryWord.requestFocus();44
return;45
}46

47
((Button)v).setText(getText(R.string.consult)+"...");48
49
EditText responseContent = (EditText)findViewById(R.id.edit2);50
responseContent.setText("");51
52

try ...{53
String queryStr;54
55

if (isEnglish(query)) ...{56
queryStr = query.replace(" ", "%20");57

} else ...{58
queryStr = encode2Gbk(query);59
}60
61
Log.i(TAG, getText(R.string.api_url)+queryStr);62
URL url = new URL(getText(R.string.api_url)+queryStr);63
HttpURLConnection http = (HttpURLConnection)url.openConnection();64
http.setRequestMethod("GET");65
http.connect();66
67
InputStream inputstream = null;68
69

try ...{70
inputstream = http.getInputStream();71

} catch (IOException e) ...{72
Log.e(TAG, "getInputStream error");73
}74

75
Reader reader = null;76
InputSource inputsource = null;77

try ...{78
reader = new InputStreamReader(inputstream, "gb2312");79

} catch (UnsupportedEncodingException e) ...{80
Log.e(TAG, "new InputStreamReader UnsupportedEncodingException");81

} catch (Exception e) ...{82
Log.e(TAG, "new InputStreamReader error");83
}84
85

try ...{86
inputsource = new InputSource(reader);87

} catch (Exception e) ...{88
Log.e(TAG, "new InputSource error");89
}90
91

try...{92
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();93
DocumentBuilder db = dbf.newDocumentBuilder();94
Document doc = db.parse(inputsource);95
96
// pron97
NodeList pronList = doc.getElementsByTagName("pron");98
Log.i(TAG, "pron count: "+pronList.getLength());99
100
String prons = query+":";101

for (int i=0; i<pronList.getLength(); i++) ...{102
Element pronEl = (Element)doc.getElementsByTagName("pron").item(i);103
String aPron = pronEl.getChildNodes().item(0).getNodeValue();104
Log.i(TAG, "pron["+i+"]: "+aPron);105
prons += " ["+aPron+"]";106
}107
108
// def109
NodeList defList = doc.getElementsByTagName("def");110
Log.i(TAG, "def count: "+defList.getLength());111
112
String defs = "";113

for (int i=0; i<defList.getLength(); i++) ...{114
Element defEl = (Element)doc.getElementsByTagName("def").item(i);115
String aDef = defEl.getChildNodes().item(0).getNodeValue();116
Log.i(TAG, "def["+i+"]: "+aDef);117
defs += aDef;118
}119
120
// sent121
NodeList sentList = doc.getElementsByTagName("sent");122
Log.i(TAG, "sent count: "+sentList.getLength());123
124
String sents = getText(R.string.sentences).toString();125

for (int i=0; i<sentList.getLength(); i++) ...{126
Element sentEl = (Element)doc.getElementsByTagName("sent").item(i);127
String orig =128
sentEl.getElementsByTagName("orig").item(0).getChildNodes().item(0).getNodeValue().replace("\n", " ").trim();129
String trans =130
sentEl.getElementsByTagName("trans").item(0).getChildNodes().item(0).getNodeValue().replace("\n", " ").trim();131
Log.i(TAG, "orig["+i+"]: "+orig);132
Log.i(TAG, "trans["+i+"]: "+trans);133
int j = i+1;134
String aSent = "\n"+j+". "+orig+"\n "+trans;135
sents += aSent;136
}137

138
String atall = prons + "\n\n" + defs + "\n\n" + sents.toString();139
responseContent.setText(atall);140
((Button)v).setText(getText(R.string.consult));141

} catch (Exception e)...{142
Log.e(TAG, "Exception 1: "+e.toString());143
}144

} catch (Exception e)...{145
Log.e(TAG, "Exception 2: "+e.toString());146
}147
}148
});149
}150
151

public boolean isEnglish(String source) ...{152
int unicode = source.codePointAt(0);153

if ((unicode>='A' && unicode<='Z') || (unicode>='a' && unicode<='z') || unicode==' ') ...{154
return true;155

} else ...{156
return false;157
}158
}159
160

public String encode2Gbk(String source) throws Exception ...{161

for (int i=0; i<source.length(); i++) ...{162
int unicode = source.codePointAt(i);163

if ((unicode>='A' && unicode<='Z') || (unicode>='a' && unicode<='z')) ...{164
throw new Exception("The string needn't do encoding");165
}166
}167

168
byte[] queryBytes = source.getBytes("gb2312");169
String destination = "";170

for (int i=0; i<queryBytes.length; i++) ...{171
String temp = Integer.toHexString(queryBytes[i]);172
destination += "%"+temp.substring(temp.length()-2);173
}174
175
return destination;176
}177
}
订阅:
评论 (Atom)
