Android get/post方法传递网络数据-简单的翻译功能实现(GET)


学习android不久,最近学习了android的Get 和Post方法传递数据,相对与罗列书上的知识不如来动手写个小demo乐趣更多,来和我一起动手来实现简单的翻译功能的小demo吧!超简单!:

  • 注册有道翻译API(百度翻译、金山词霸等都可)
  • 创建android项目
  • 创建布局界面
  • 创建get/post请求
  • 获取返回的数据
  • 显示获取到的数据

GET方法小解:

1.Get方式在通过URL提交数据,数据在URL中可以看到。
2.GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
3.使用 Get 的时候,参数会显示在地址栏上,如果这些数据是中文数据而且是非敏感数据的使用 get。

我们在百度搜索CSDN 时可以看到地址栏 www.baidu.com/s?wd=CSDN 即是向www.baidu.com/s使用get方法传入wd的为CSDN,来请求搜索''CSDN''
图片名称
下面来学习如何在安卓中使用Get请求

编写activity_main.xml

图片名称


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入要翻译的内容" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="翻译" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

布局 很简单 edittext 来获取输入的文本 button 来触发网络请求 textview来显示返回的内容。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考[Github][2].

##编辑MainActivity.java

MainActivity.java

package com.qqnum.getdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    Button button;
    TextView textView;
    String ApiUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.edit);
        button = (Button) findViewById(R.id.button);
        textView = (TextView) findViewById(R.id.text);
        //有道翻译的api
        ApiUrl = "http://fanyi.youdao.com/openapi.do?keyfrom=MyFristBlog&key=1985316716&type=data&doctype=json&version=1.1&q=";
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //开启线程来发起网络请求
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            //创建get 请求
                            URL url = new URL(ApiUrl + editText.getText().toString());
                            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
                            connection.setRequestMethod("GET");
                            //接收返回的内容
                            InputStream inputStream = connection.getInputStream();
                            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                            String textline; //用来记录每一行内容
                            StringBuilder gettext = new StringBuilder();//储存每一行内容
                            while ((textline = bufferedReader.readLine()) != null) {
                                gettext.append(textline);
                            }
                            //关闭读写
                            bufferedReader.close();
                            inputStreamReader.close();
                            inputStream.close();
                            setText(gettext);//设置文本的方法
                        } catch (MalformedURLException e) {
                            e.printStackTrace();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }).start();
            }
        });
    }
        //设置文本的方法
    public void setText(final StringBuilder text) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //一定要在UI线程(主线程)中更新界面
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        textView.setText(text);
                    }
                });
            }
        }).start();
    }
}

发送请求

首先在监听事件中开启一个线程,创建URL对象,这里设置为我们在有道翻译申请的 api地址。然后使用HttpURLConnection 发送http请求,请求的目标就是传入的有道翻译api地址,setRequestMethod("GET")方法来设置请求方式(不设置是默认为 Get方式)。

接收返回的数据

使用InputStreamReader 来对返回的数据进行读取,然后用while ((textline = bufferedReader.readLine()) != null) { gettext.append(textline); }来将每一行添加到gettext中并传给setText()方法来更新textview中的内容。

将返回的数据显示到textview

创建一个线程,一定要在UI线程(主线程)中更新界面,用setText()方法设置显示的文本。
最后别忘了加入网络权限,在AndroidManifest.xml 加入
<uses-permission android:name="android.permission.INTERNET"/>
图片名称
看到这么多字符串是不是有点乱呢?之后的文章会来写如何解析json

注册有道翻译api

  • 1 进入有道翻译 api申请网站http://fanyi.youdao.com/openapi?path=data-mode
  • 图片名称
  • 2 获取自己的api 接口 也就是注册完下方给的地址
  • 图片名称

###源码地址
http://oiskisse7.bkt.clouddn.com/app/GETdemo.zip
第一次写文章,知识尚浅,还请大神斧正
下一片 文章将写如何用post方法来获取天气数据


每一行代码都有它的故事