学习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方法来获取天气数据
Comments | NOTHING