Android实战--英文词典(API+GSON+Volley)

本文介绍如何利用GSON库解析JSON数据,并通过Volley库调用API实现英文词典应用的功能。从创建必要的Bean类到实现API请求,详细展示了从数据解析到展示单词及音标的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处,喜欢我的可以关注我!

上一节我们介绍了GSON和Volley,用GSON对返回的数据进行了初步解析,这一节我们更进一步,讨论一下如何实现英文词典。首先把JSON数据的样式再看一下:

 

下面创建bean,这些都和上一节一样:

 

第一个bean:

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Status1 {  
  6.     private int errNum;  
  7.     private String errMsg;  
  8.     RetData2 retData;//保证变量名与返回JSON的标签名一致,注意!!!!!!!!  
  9.     @Override  
  10.     public String toString() {  
  11.         return "Status [errNum=" + errNum + ", errMsg=" + errMsg + ", retData="  
  12.                 + retData + "]";  
  13.     }  
  14.     public int getErrNum() {  
  15.         return errNum;  
  16.     }  
  17.     public void setErrNum(int errNum) {  
  18.         this.errNum = errNum;  
  19.     }  
  20.     public String getErrMsg() {  
  21.         return errMsg;  
  22.     }  
  23.     public void setErrMsg(String errMsg) {  
  24.         this.errMsg = errMsg;  
  25.     }  
  26.     public RetData2 getRetData() {  
  27.         return retData;  
  28.     }  
  29.     public void setRetData(RetData2 retData) {  
  30.         this.retData = retData;  
  31.     }  
  32.       
  33.   
  34.       
  35.       
  36.   
  37.   
  38. }  

第二个bean:

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class RetData2 {  
  6.     private String from;  
  7.     private String to;  
  8.     DictResult3 dict_result;  
  9.     public String getFrom() {  
  10.         return from;  
  11.     }  
  12.     public void setFrom(String from) {  
  13.         this.from = from;  
  14.     }  
  15.     public String getTo() {  
  16.         return to;  
  17.     }  
  18.     public void setTo(String to) {  
  19.         this.to = to;  
  20.     }  
  21.     public DictResult3 getDictResult() {  
  22.         return dict_result;  
  23.     }  
  24.     public void setDictResult(DictResult3 dictResult) {  
  25.         this.dict_result = dictResult;  
  26.     }  
  27.     @Override  
  28.     public String toString() {  
  29.         return "RetData [from=" + from + ", to=" + to + ", dictResult="  
  30.                 + dict_result + "]";  
  31.     }  
  32.       
  33.   
  34.       
  35. }  


第3个bean:

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class DictResult3 {  
  6.     private String word_name;  
  7.   
  8.     private List<Symbols> symbols;  
  9.   
  10.     public String getWord_name() {  
  11.         return word_name;  
  12.     }  
  13.   
  14.     public void setWord_name(String word_name) {  
  15.         this.word_name = word_name;  
  16.     }  
  17.   
  18.     public List<Symbols> getSymbols() {  
  19.         return symbols;  
  20.     }  
  21.   
  22.     public void setSymbols(List<Symbols> symbols) {  
  23.         this.symbols = symbols;  
  24.     }  
  25.   
  26.     @Override  
  27.     public String toString() {  
  28.         return "DictResult [word_name=" + word_name + ", symbols=" + symbols  
  29.                 + "]";  
  30.     }  
  31.   
  32. }  


第4个bean:


 

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class Symbols {  
  6.     private String ph_am;  
  7.     private String ph_en;  
  8.     private List<Parts> parts;  
  9.       
  10.     public String getPh_am() {  
  11.         return ph_am;  
  12.     }  
  13.     public void setPh_am(String ph_am) {  
  14.         this.ph_am = ph_am;  
  15.     }  
  16.     public String getPh_en() {  
  17.         return ph_en;  
  18.     }  
  19.     public void setPh_en(String ph_en) {  
  20.         this.ph_en = ph_en;  
  21.     }  
  22.     public List<Parts> getParts() {  
  23.         return parts;  
  24.     }  
  25.     public void setParts(List<Parts> parts) {  
  26.         this.parts = parts;  
  27.     }  
  28.     @Override  
  29.     public String toString() {  
  30.         return "Symbols [ph_am=" + ph_am + ", ph_en=" + ph_en + ", parts="  
  31.                 + parts + "]";  
  32.     }  
  33.       
  34.   
  35. }  


第5个:

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.util.Arrays;  
  4. import java.util.List;  
  5.   
  6. public class Parts {  
  7.     private String part;  
  8.     public String getParts() {  
  9.         return part;  
  10.     }  
  11.     public void setParts(String parts) {  
  12.         this.part = parts;  
  13.     }  
  14.     public String[] getMeans() {  
  15.         return means;  
  16.     }  
  17.     public void setMeans(String[] means) {  
  18.         this.means = means;  
  19.     }  
  20.     @Override  
  21.     public String toString() {  
  22.         return "Parts [parts=" + part + ", means=" + Arrays.toString(means)  
  23.                 + "]";  
  24.     }  
  25.     String[] means;  
  26.       
  27.       
  28.       
  29.   
  30. }  


所需要的jar包也和上一节一样,可以参考上一节,我们主要讨论一下MainActivity.java程序:

[java]  view plain copy
  1. package org.lxh.demo;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4. import java.net.URLEncoder;  
  5. import java.util.List;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.util.Log;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.Button;  
  13. import android.widget.EditText;  
  14. import android.widget.TextView;  
  15.   
  16. import com.android.volley.RequestQueue;  
  17. import com.android.volley.Response;  
  18. import com.android.volley.VolleyError;  
  19. import com.android.volley.toolbox.StringRequest;  
  20. import com.android.volley.toolbox.Volley;  
  21. import com.google.gson.Gson;  
  22.   
  23. public class MainActivity extends Activity {  
  24.     private Button tojson;  
  25.     RequestQueue mQueue;  
  26.     StringRequest stringRequest;  
  27.     Gson gson;  
  28.     String str;  
  29.     private TextView textView;  
  30.     private EditText editText;  
  31.     String string = null;  
  32.   
  33.     @Override  
  34.     protected void onCreate(Bundle savedInstanceState) {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.main);  
  37.   
  38.         textView = (TextView) findViewById(R.id.text);  
  39.         editText = (EditText) findViewById(R.id.edit);  
  40.         tojson = (Button) findViewById(R.id.btn);  
  41.         gson = new Gson();  
  42.         mQueue = Volley.newRequestQueue(MainActivity.this);  
  43.         tojson.setOnClickListener(new OnClickListener() {  
  44.             public void onClick(View v) {  
  45.   
  46.                 string = editText.getText().toString();  
  47.                 String requestUrl = getRequestUrl(string);  
  48.                 stringRequest = new StringRequest(requestUrl,  
  49.                         new Response.Listener<String>() {  
  50.                             public void onResponse(String response) {  
  51.   
  52.                                 Log.d("TAG", response);  
  53.                                 System.out.println("response=" + response);  
  54.                                 Status1 status = gson.fromJson(response,  
  55.                                         Status1.class);  
  56.                                 StringBuffer buffer = new StringBuffer();// 保存所用字符串  
  57.   
  58.                                 RetData2 retData2 = status.getRetData();// 第二个对象的获取  
  59.   
  60.                                 System.out.println("from=" + retData2.getFrom());  
  61.                                 DictResult3 dictResult3;  
  62.                                 dictResult3 = retData2.getDictResult();// 第三个对象的获取  
  63.                                 buffer.append("单词:"  
  64.                                         + dictResult3.getWord_name() + "\n");  
  65.                                 System.out.println("word_name="  
  66.                                         + dictResult3.getWord_name());  
  67.                                 List<Symbols4> symbols4s = dictResult3  
  68.                                         .getSymbols();// 第四个是对象数组哦,获取对象数组  
  69.                                 buffer.append("音标"  
  70.                                         + symbols4s.get(0).getPh_en() + "\n");// symbols4s.get(0)用于获取第一个对象  
  71.                                 List<Parts> parts = symbols4s.get(0).getParts();// 同理,最后一个也是对象数组  
  72.                                 for (int i = 0; i < parts.size(); i++) {  
  73.                                     buffer.append("part:"  
  74.                                             + parts.get(i).getParts()// parts.get(i)获取对象List中的各个对象  
  75.                                             + "\n");  
  76.                                     buffer.append("词义:");  
  77.                                     for (int j = 0; j < parts.get(i).getMeans().length; j++) {  
  78.                                         String[] aStrings = parts.get(i)  
  79.                                                 .getMeans();  
  80.                                         buffer.append(aStrings[j]);  
  81.                                     }  
  82.                                     buffer.append("\n");  
  83.                                 }  
  84.   
  85.                                 textView.setText(buffer);  
  86.   
  87.                             }  
  88.                         }, new Response.ErrorListener() {  
  89.                             public void onErrorResponse(VolleyError error) {  
  90.                                 Log.e("TAG", error.getMessage(), error);  
  91.                             }  
  92.   
  93.                         });  
  94.                 mQueue.add(stringRequest);  
  95.             }  
  96.         });  
  97.   
  98.     }  
  99.   
  100.     private String getRequestUrl(String word) {  
  101.         String url = null;  
  102.         if (word != null) {  
  103.             url = "http://apistore.baidu.com/microservice/dictionary?query="  
  104.                     + word + "&from=en&to=zh";  
  105.         }  
  106.         return url;  
  107.     }  
  108.   
  109. }  

 

运行实例:

 

以上实例只是展示如何使用,有很多Bug有待完善,大家可以自行改善,也可以发挥你的能力,做成一部真正的字典app。


转载请保存连接:http://blog.youkuaiyun.com/chenyanpeng2003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值