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 学习(五)网络的更多相关文章

  1. Android JNI学习(五)——Demo演示

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  2. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  3. Android Studio 学习 - 基本控件的使用;Intent初学

    Android Studio学习第三天. 今天主要学习 1. RadioButton.CheckBox.RatingBar.SeekBar等基础控件的使用. 结合Delphi中相类似的控件,在这些基本 ...

  4. Android Studio 学习笔记(五):WebView 简单说明

    Android中一个用于网页显示的控件,实际上,也可以看做一个功能最小化的浏览器,看起来类似于在微信中打开网页链接的页面.WebView主要用于在app应用中方便地访问远程网页或本地html资源.同时 ...

  5. Android Studio学习笔记

    转:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1 背景 相信大家对Android Studio已经不陌生了,An ...

  6. Android Studio 学习 - HelloWorld

    今天是学习Android Studio的第2天,加油! 1. 首先要记录下使用Android Studio的一个代码自动完成的功能.平常基本上用Delphi,乍一换工具,各种不习惯,或者说不熟悉.按照 ...

  7. Android Studio 学习 - 程序安装

    痛定思痛,从今天开始专心学习AndriodStudio.希望以此为契机,把Java学扎实.更希望自己能坚持下去,不要半途而废. 记录一些日常的工作以及碰到的问题,权当勉励自己.荀子曰:吾尝终日而思矣, ...

  8. Android Studio 学习笔记(1)

    最近从Eclipse转到Android Studio IDE,很多东西需要学习,本文是个记录. 项目结构 在Anroid Studio 中,一个Project 包括多个Module,每个Module下 ...

  9. Android Studio 学习笔记1.1 创建自己的第一个安卓项目并且打包APK

      自从上一次安装完安卓开发工具Android Studio后抽时间看视屏尝试编写自己的第一个安卓项目约两周的时间 每天下班后会花上1~2小时的时间去学习 目前的成果如下:次元宅的我.apk 嘛 总而 ...

  10. Android Studio学习-连接真机测试教学

    Android Studio 原文链接 https://blog.csdn.net/weixin_44304387/article/details/99213012 真机测试会比AVD(Android ...

随机推荐

  1. Hadoop 单表关联

    前面的实例都是在数据上进行一些简单的处理,为进一步的操作打基础.单表关联这个实例要求从给出的数据中寻找到所关心的数据,它是对原始数据所包含信息的挖掘.下面进入这个实例. 1.实例描述 实例中给出chi ...

  2. NAT详解:基本原理、穿越技术(P2P打洞)、端口老化等

    这是一篇介绍NAT技术要点的精华文章,来自华3通信官方资料库,文中对NAT技术原理的介绍很全面也很权威,对网络应用的应用层开发人员而言有很高的参考价值. 学习交流 移动端即时通讯学习交流: 21589 ...

  3. Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化

    DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...

  4. (转载)Javascript 中的非空判断 undefined,null, NaN的区别

    原文地址:https://blog.csdn.net/oscar999/article/details/9353713 在介绍这三个之间的差别之前, 先来看一下JS  的数据类型. 在 Java ,C ...

  5. Log4J从基础到应用

    1.API中核心的三个接口(org.apache.log4j) Class Logger This is the central class in the log4j package. Most lo ...

  6. [Postman]响应(7)

    Postman响应查看器有助于确保API响应的正确性.API响应由正文,标题和状态代码组成.邮递员在不同的标签中组织正文和标题.选项卡旁边会显示API调用的状态代码和完成时间. 响应还包含HTTP规范 ...

  7. GITHUB(github)初级使用

    Github顾名思义是一个Git版本库的托管服务,是目前全球最大的软件仓库,拥有上百万的开发者用户,也是软件开发和寻找资源的最佳途径,Github不仅可以托管各种Git版本仓库,还拥有了更美观的Web ...

  8. 机器学习入门08 - 表示法 (Representation)

    原文链接:https://developers.google.com/machine-learning/crash-course/representation/ 机器学习模型不能直接看到.听到或感知输 ...

  9. StringBuffer 和 StringBuilder 的 3 个区别

    StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题.这么简单的一道题,栈长在最近的面试过程中,却经常遇到很 ...

  10. 在Mac上安装MongoDB,配置全局路径

    1.访问MongoDB官方下载地址 http://www.mongodb.org/downloads 2.点击“DOWNLOAD(tgz)”按钮: 3.将下载的文件压缩包解压后剪切到你的Mac中某个位 ...