利用百度词典API和Volley网络库开发的android词典应用

简介:

 关于百度词典API的说明,地址在这里:百度词典API介绍

  关于android网络库Volley的介绍说明,地址在这里:Android网络通信库Volley

  首先我们看下大体的界面布局!

  

  再帖张最终的效果图

  

  看到效果图,应该知道布局很简单了对吧:

  布局xml文件如下:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.dict.MainActivity" >

      
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        >
        
        <Button 
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Clear"
            android:onClick="clearHandler"
            android:padding="7dip"
            />
        <EditText
            android:id="@+id/etWord"
            android:singleLine="true"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:background="@android:drawable/edit_text"
             />
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Query"
            android:onClick="queryHandler"
            android:padding="7dip"
             />
    </LinearLayout>
    <TextView 
        android:id="@+id/tvResult"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:hint="result"
        />

</LinearLayout>

  然后就是几个事件的处理,

  1: Clear按钮的处理: 清理掉输入框里面的内容

  2: Query按钮的处理:

    1:利用百度词典API获取内容

    2:解析返回的json数据,处理并且显示在下面的TextView空间中,

    3:取消软键盘的显示

  代码如下:


package com.example.dict;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import android.support.v7.app.ActionBarActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends ActionBarActivity 
{
    
    private String url = "http://openapi.baidu.com/public/2.0/translate/dict/simple?client_id=5kHZHeo8MN7L6NmPTGV6POsb&q=@word&from=en&to=zh";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    
    public void clearHandler(View view)
    {
        EditText text = (EditText)findViewById(R.id.etWord);
        text.setText("");
    }
    
    public void queryHandler(View view)
    {
        EditText text = (EditText)findViewById(R.id.etWord);
        if(text.getText().length() <= 0)
        {
            return ;
        }
        
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        
        String tempUrl = this.url.replace("@word",text.getText().toString());
        
        StringRequest postRequest = new StringRequest(Request.Method.GET,tempUrl,
                new Response.Listener<String>() 
                {
                    @Override
                    public void onResponse(String response)
                    {
                        MainActivity.this.parseResult(response);
                    }
                },
                new Response.ErrorListener() 
                {
                    @Override
                    public void onErrorResponse(VolleyError error)
                    {
                        
                    }
                })
                {
                @Override
                protected Map<String,String> getParams()
                {
                    Map<String,String> params = new HashMap<String,String>();
                    return params;
                }};
        requestQueue.add(postRequest);
    }
    
    public void parseResult(String source)
    {
        try
        {
            
            final TextView display = (TextView)findViewById(R.id.tvResult);
            display.setText("");
            
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
            if (imm.isActive()) 
            {
                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
            } 
            
            JSONObject obj = new JSONObject(source);
            JSONObject data = obj.getJSONObject("data");
            JSONArray symbols = data.getJSONArray("symbols");
            
            for(int i=0;i<symbols.length();i++)
            {
                JSONObject parts = symbols.getJSONObject(i);
                
                for(int j=0;j < parts.getJSONArray("parts").length();j++)
                {
                    JSONObject item = parts.getJSONArray("parts").getJSONObject(j);
                    display.append(item.getString("part"));
                    display.append("\n");
                    JSONArray arr = item.getJSONArray("means");
                    
                    for(int k=0;k<arr.length();k++)
                    {
                        display.append("    " + arr.getString(k));
                        display.append("\n");
                    }
                }
            }
        }
        catch (Exception e)
        {
            
        }
    }
    

}

  需要改进的地方:

    1:做一个本地查询记录的存储

    2:解析内容做一个Scroll的控制


相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
2天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
2天前
|
移动开发 Java Android开发
构建高效Android应用:采用Kotlin协程优化网络请求
【4月更文挑战第24天】 在移动开发领域,尤其是对于Android平台而言,网络请求是一个不可或缺的功能。然而,随着用户对应用响应速度和稳定性要求的不断提高,传统的异步处理方式如回调地狱和RxJava已逐渐显示出局限性。本文将探讨如何利用Kotlin协程来简化异步代码,提升网络请求的效率和可读性。我们将深入分析协程的原理,并通过一个实际案例展示如何在Android应用中集成和优化网络请求。
|
2天前
|
调度 Android开发 开发者
构建高效Android应用:探究Kotlin协程的优势与实践
【4月更文挑战第24天】随着移动开发技术的不断演进,提升应用性能和用户体验已成为开发者的核心任务。在Android平台上,Kotlin语言凭借其简洁性和功能性成为主流选择之一。特别是Kotlin的协程功能,它为异步编程提供了一种轻量级的解决方案,使得处理并发任务更加高效和简洁。本文将深入探讨Kotlin协程在Android开发中的应用,通过实际案例分析协程如何优化应用性能,以及如何在项目中实现协程。
|
2天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
6 0
|
2天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
7 0
|
3天前
|
存储 缓存 安全
Android系统 应用存储路径与权限
Android系统 应用存储路径与权限
6 0
Android系统 应用存储路径与权限
|
3天前
|
存储 安全 Android开发
Android系统 自定义系统和应用权限
Android系统 自定义系统和应用权限
18 0
|
8天前
|
缓存 移动开发 Android开发
构建高效Android应用:从优化用户体验到提升性能表现
【4月更文挑战第18天】 在移动开发的世界中,打造一个既快速又流畅的Android应用并非易事。本文深入探讨了如何通过一系列创新的技术策略来提升应用性能和用户体验。我们将从用户界面(UI)设计的简约性原则出发,探索响应式布局和Material Design的实践,再深入剖析后台任务处理、内存管理和电池寿命优化的技巧。此外,文中还将讨论最新的Android Jetpack组件如何帮助开发者更高效地构建高质量的应用。此内容不仅适合经验丰富的开发者深化理解,也适合初学者构建起对Android高效开发的基础认识。
8 0
|
8天前
|
移动开发 Android开发 开发者
构建高效Android应用:采用Kotlin进行内存优化的策略
【4月更文挑战第18天】 在移动开发领域,性能优化一直是开发者关注的焦点。特别是对于Android应用而言,由于设备和版本的多样性,确保应用流畅运行且占用资源少是一大挑战。本文将探讨使用Kotlin语言开发Android应用时,如何通过内存优化来提升应用性能。我们将从减少不必要的对象创建、合理使用数据结构、避免内存泄漏等方面入手,提供实用的代码示例和最佳实践,帮助开发者构建更加高效的Android应用。
13 0