Android开发——手把手写APP(三)调用有道词典翻译API实现的翻译APP(详细备注解读)

运行效果图

有道翻译的API

http://fanyi.youdao.com/openapi.do?keyfrom=lewe518&key=70654389&type=data&doctype=json&version=1.1&q=

“?”里填单词或者汉语

设计思路

1.界面设计

2.实现功能:在输入框输入后,点击查询,连接有道翻译API查询,在文本框输出查询结果

网络请求的操作图:

准备工作

①OkHttp3包 OkHttp3包的导入

②GSON包 GSON包的导入

③网络权限 网络授权方法

实现代码

界面xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.administrator.queryword.MainActivity">

    <EditText
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="请输入查询内容"
        android:id="@+id/et"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@+id/et"
        android:id="@+id/tv"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:text="查询"
        android:layout_below="@+id/tv"
        android:onClick="query"/>
</RelativeLayout>

MainActivity

package com.example.administrator.queryword;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.example.administrator.queryword.model.Basic;
import com.example.administrator.queryword.model.Word;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import util.JsonUitl;

/**
 * 实现单词查询
 * @author thinkdoor
 *
 * 1.界面初始化
 * 2.创建handler
 * 3.实现上网查词
 *      1.创建OkClient和Request对象
 *      2.创建Call对象
 *      3.重写Call对象的enCall方法
 *          1.获取响应数据
 *          2.封装成json对象
 *          3.转为java对象
 *          4.创建message对象包裹信息
 *          5.发送给handler
 *  4.handler获取消息进行处理
 *      1.获取对象
 *      2.获取数据
 *      3.在界面显示
 */
public class MainActivity extends AppCompatActivity {

    //日志打印
    private String TAG = "MainActivity";

    //1.界面初始化
    EditText editText;
    TextView textView;

    //2.创建handler
    private Handler handler = new Handler(){
        //4.handler获取消息进行处理
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            //1.获取对象
            Word word = (Word) msg.obj;
            //2.获取数据
            Basic basic = word.getBasic();
            String explains = null;
            explains = basic.getStrings(basic.getExplains());
            //3.在界面显示
            textView.setText(explains);
        }
    };

    /**
     * 界面创建
     * @param savedInstanceState
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.et);
        textView = (TextView) findViewById(R.id.tv);
    }

    /**
     * 查询按钮的监听方法
     * @param view
     */
    public void query(View view){
        String word = editText.getText().toString();
        //调用上网查词方法
        queryWord(word);
    }

    /**
     * 3.实现上网查词
         1.创建OkClient和Request对象
         2.创建Call对象
         3.重写Call对象的enCall方法
             1.获取响应数据
             2.封装成json对象
             3.转为java对象
             4.发送message给handler
     * @param s 要查询的单词
     */
    public void queryWord(String s){
        String url = "http://fanyi.youdao.com/openapi.do?keyfrom=lewe518&key=70654389&type=data&doctype=json&version=1.1&q="+s;
        //1.创建OkClient和Request对象
        OkHttpClient okHttpClient = new OkHttpClient();
        final Request request = new Request.Builder()
                .url(url)
                .get()
                .build();

        //2.创建Call对象
        Call call = okHttpClient.newCall(request);
        //3.重写Call对象的enqueue方法
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                //1.获取响应数据
                String str = response.body().string();
                Log.d(TAG, "onResponse: " + str);
                try {
                    //2.封装成json对象
                    JSONObject jsonObject = new JSONObject(str);
                    //3.转为java对象
                    Word word = (Word) JsonUitl.stringToObject(jsonObject.toString(),Word.class);
                    //4.创建message,包裹信息
                    Message message = new Message();
                    message.obj = word;
                    //5.发送message给handler
                    handler.sendMessage(message);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        });

    }
}

源码链接:

链接:https://pan.baidu.com/s/1a9URY6u-jaovrm5it8xZKQ 
提取码:qxog 

要是觉得还可以,点个再走吧!求求了~

  • 62
    点赞
  • 144
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 101
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 101
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子座的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值