Android Studio 学习(五)网络
HttpURLConnection
OkHttp
- 添加依赖
- 编辑 app/build.gradle 在dependencies闭包中添加
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
GET
- OkHttpClient client = new OkHttpClient();//创建Client对象
- Request request = new Request.Builder().url("https://www.baidu.com").build();
- Response response = client.newCall(request).execute();//获取返回数据
- String respnseData=response.body().string();//将返回的数据变成string\、
POST
- OkHttpClient client = new OkHttpClient();//创建Client对象
- RequestBody rb= new FormBody.Builder().add("username","admin").build();
- Request request = new Request.Builder().url("https://www.baidu.com").post(rb).build();
- Response response = client.newCall(request).execute();//获取返回数据
使用okhttp发送请求
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
responseText = (TextView) findViewById(R.id.textView);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId()==R.id.button)
{
sendRequestWithOKHttp();
}
}
private void sendRequestWithOKHttp()
{
new Thread(new Runnable() {
@Override
public void run() {
try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url("https://www.baidu.com").build();
Response response = client.newCall(request).execute();
String respnseData=response.body().string();
showResponse(respnseData);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}
private void showResponse(final String response)
{
runOnUiThread(new Runnable() {
@Override
public void run() {
responseText.setText(response);
}
});
}
}
解析XML
Pull解析
private void parseXMLWITHPull (String xmlData)
{
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();//获取实例
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));//将数据设置进去
int eventType=xmlPullParser.getEventType();//当前解析的事件
String id="";
String name="";
while (eventType!=XmlPullParser.END_DOCUMENT)
{
String nodeName = xmlPullParser.getName();
switch (eventType){
case XmlPullParser.START_TAG:{
if("id".equals(nodeName))
id=xmlPullParser.nextText();
else if ("name".equals(nodeName))
name=xmlPullParser.nextText();
}
break;
case XmlPullParser.END_TAG:
{
if("app".equals(nodeName))
{
Log.d("Main","id is "+id);
Log.d("Main","name is "+name);
}
break;
}
}
eventType=xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
解析JSON
JSONObject
private void parseJSONWithJSONObject (String jsonData)
{
try{
JSONArray jsonArray = new JSONArray(jsonData);
for(int i =0 ;i<jsonArray.length();i++)
{
JSONObject jsonObject =jsonArray.getJSONObject(i);
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
String version = jsonObject.getString("version");
Log.d("Main","id"+id);
Log.d("Main","name"+name);
Log.d("Main","version"+version);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
GSON
private void parseJSONWithGSON (String jsonData)
{
try{
Gson gson = new Gson();
List appList = gson.fromJson(jsonData,new TypeToken<List>(){}.getType());
for(App app:appList)
{
Log.d("Main","id is"+app.getId());
Log.d("Main","name is"+ app.getName());
Log.d("Main","version is "+ app.getVersion());
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
优化
public class HttpUtil {
public static void sendOkHttpRequest(String address,okhttp3.Callback callback)
{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
}
}
创建这个类
使用时
HttpUtil.sendOkHttpRequest("http://545454/get_data.json",new okhttp3.Callback(){
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseData= response.body().string();
parseJSONWithGSON (responseData);
}
@Override
public void onFailure(Call call, IOException e) {
}
});
Android Studio 学习(五)网络的更多相关文章
- Android JNI学习(五)——Demo演示
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- Android Studio 学习笔记(一)环境搭建、文件目录等相关说明
Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...
- Android Studio 学习 - 基本控件的使用;Intent初学
Android Studio学习第三天. 今天主要学习 1. RadioButton.CheckBox.RatingBar.SeekBar等基础控件的使用. 结合Delphi中相类似的控件,在这些基本 ...
- Android Studio 学习笔记(五):WebView 简单说明
Android中一个用于网页显示的控件,实际上,也可以看做一个功能最小化的浏览器,看起来类似于在微信中打开网页链接的页面.WebView主要用于在app应用中方便地访问远程网页或本地html资源.同时 ...
- Android Studio学习笔记
转:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1 背景 相信大家对Android Studio已经不陌生了,An ...
- Android Studio 学习 - HelloWorld
今天是学习Android Studio的第2天,加油! 1. 首先要记录下使用Android Studio的一个代码自动完成的功能.平常基本上用Delphi,乍一换工具,各种不习惯,或者说不熟悉.按照 ...
- Android Studio 学习 - 程序安装
痛定思痛,从今天开始专心学习AndriodStudio.希望以此为契机,把Java学扎实.更希望自己能坚持下去,不要半途而废. 记录一些日常的工作以及碰到的问题,权当勉励自己.荀子曰:吾尝终日而思矣, ...
- Android Studio 学习笔记(1)
最近从Eclipse转到Android Studio IDE,很多东西需要学习,本文是个记录. 项目结构 在Anroid Studio 中,一个Project 包括多个Module,每个Module下 ...
- Android Studio 学习笔记1.1 创建自己的第一个安卓项目并且打包APK
自从上一次安装完安卓开发工具Android Studio后抽时间看视屏尝试编写自己的第一个安卓项目约两周的时间 每天下班后会花上1~2小时的时间去学习 目前的成果如下:次元宅的我.apk 嘛 总而 ...
- Android Studio学习-连接真机测试教学
Android Studio 原文链接 https://blog.csdn.net/weixin_44304387/article/details/99213012 真机测试会比AVD(Android ...
随机推荐
- 本周对于java中lamdba表达式与内部进行了学习 ,以下是我在学习就中遇到的问题
在java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.我觉得其实就是类的嵌套,在一个类中再定义一个类,这里已成员内部类为讲,内部类可以自由地运用外部类定义的方法,但外部类想 ...
- PMP学习总结(1) -- 引论
3月18日考试,1个月后出的成绩,当我拿到Pass的结果的时候还是蛮开心的,因为在备考期间,公司项目十分紧急,经常加班到晚上9,10点,而且宝贝女儿也在这个期间出生,所以备考是十分辛苦的,经常晚上11 ...
- Jenkins的初级应用(2)-Invoke Phing targets
Invoke Phing targets这个插件主要是读取xml形式包括自动化测试打包部署的配置文件,然后根据流程走下来.用phing命令读取并执行xml配置文件,然后执行定义的步骤.比如check. ...
- Android NDK学习(五):Java调用Native代码流程总结
编写一个Java类,并且在某个方法签名的修饰符中加上native修饰符. 使用Javac命令编译第一步中的Java类,使之成为一个class文件. 使用Javah -jni 包名.类名 生成Jni接口 ...
- CCS3怎么实现border边框渐变效果
下图注册按钮的边框有渐变效果,如果让你来实现,你会怎么做呢 个人觉得,省事的做法,直接让UI给背景图片就可以了,如下图 不过这种做法感觉不太灵活,如果要修改border的渐变颜色,就需要UI重新做图. ...
- 从github上克隆hibernate项目
开发的项目用到了hibernate进行对象的持久化,最近项目上不忙,打算通过官方文档和源码来进行深度学习.第一步将hibernate部署到本地就折腾了好久,打算记录一下. 关于github的注册说一句 ...
- NIO/BIO
NIO/BIO BIO网络通信 概述 网络编程的基本模型是Client/Server模型,也就是两个进程之间进行相互通信,其中服务端提供位置信息(绑定的IP地 ...
- 使用JDOM解析xml文档
一.使用JDOOM解析xml文档 准备工作 1.下载JDOM.jar 包 解析代码如下 import org.jdom2.Attribute; import org.jdom2.Document; i ...
- ubuntu设置IP地址&修改vi模式键盘上下键错位
解决ubuntu上面使用vi 出现方向键错乱的情况 编辑/etc/vim/vimrc.tiny 使用root权限操作:将“set compatible”改成“set nocompatible” 新增一 ...
- [转]MySQL 清空慢查询文件
概述 本章主要写当慢查询文件很大的时候怎样在线生成一个新的慢查询文件. 测试环境:mysql 5.6.21 步骤 配置慢查询 默认的my.cnf文件在/etc/目录下 vim /etc/my.cnf ...