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

来源:互联网 发布:手机显示yy网络不给力 编辑:程序博客网 时间:2024/05/01 09:11

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

图片名称

<?xml version="1.0" encoding="utf-8"?><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方法来获取天气数据

0 0
原创粉丝点击