Android里面本身有OKHttp,不过不是很好用,这里就用Retrofit2,简单好用。

首先,需要加入网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在build.gradle文件里加入引用包: Gson不用的话,就不需要添加

    implementation 'com.squareup.okhttp3:okhttp:3.0.1'
implementation 'com.squareup.retrofit2:retrofit:2.0.2'
implementation 'com.squareup.retrofit2:converter-gson:2.0.2'

这时准备工作做完了。

先创建一个接口文件TestService

package controller.hzl.com.testclient;

import java.util.List;

import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.HTTP;
import retrofit2.http.POST;
import retrofit2.http.Path; public interface TestService { @FormUrlEncoded
@POST("getmacaddress")
Call<ResponseBody> TestCall2(@Field("mobile") String mobile); @FormUrlEncoded
@POST("getmacaddress")
Call<MacAdress> TestCall3(@Field("mobile") String mobile);
}

这里的@POST("getmacaddress") 的getmacaddress 是URL除IP外的最后一个路径,可以理解为 IP+getmacaddress

这里用的是POST请求方式,@Field("mobile")为请求接口的参数。

写一个实体类模型,用来匹配接收的数据MacAdress

package controller.hzl.com.testclient;

public class MacAdress {
private String resultMsg; public String getResultMsg() {
return resultMsg;
} public void setResultMsg(String resultMsg) {
this.resultMsg = resultMsg;
} public String getResultState() {
return resultState;
} public void setResultState(String resultState) {
this.resultState = resultState;
} public String getResultObj() {
return resultObj;
} public void setResultObj(String resultObj) {
this.resultObj = resultObj;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public String getDelta() {
return delta;
} public void setDelta(String delta) {
this.delta = delta;
} private String resultState; private String resultObj; private String message; private String delta; }

最后主MainActivity

package controller.hzl.com.testclient;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView; import okhttp3.MediaType;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory; public class MainActivity extends Activity {
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private Button button5;
private Button button6;
private Button button7;
private Button button8;
private ImageView image; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
button2 = (Button) findViewById(R.id.button2);
button3 = (Button) findViewById(R.id.button3);
button4 = (Button) findViewById(R.id.button4);
button5 = (Button) findViewById(R.id.button5);
button6 = (Button) findViewById(R.id.button6);
button7 = (Button) findViewById(R.id.button7);
button8 = (Button) findViewById(R.id.button8);
image = (ImageView) findViewById(R.id.image); button1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
GitHubServiceTest();
}
}); button2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
IWeatherGetTest();
}
});
} private void GitHubServiceTest() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://115.29.190.99/api/meta/")
.addConverterFactory(GsonConverterFactory.create())
.build(); TestService service = retrofit.create(TestService.class); //https://api.github.com/users/octocat/repos
Call<ResponseBody> call = service.TestCall2("13296540788");
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
// Get result bean from response.body()
// List<Repo> repos = response.body();
System.out.println(response.code());
try {
System.out.println(response.body().string());
String jsonstr = new String(response.body().bytes());
System.out.println("jsonstr="+jsonstr);
}catch (Exception e){ } // Get header item from response
String links = response.headers().get("Link");
showlog("links="+links);
/**
* 不同于retrofit1 可以同时操作序列化数据javabean和header
*/
} @Override
public void onFailure(Call<ResponseBody> call, Throwable throwable) {
throwable.printStackTrace();
//showlog(throwable.getCause().toString());
}
});
} private void IWeatherGetTest() {
{
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://115.29.190.99/api/meta/")
.addConverterFactory(GsonConverterFactory.create())
.build(); TestService service = retrofit.create(TestService.class); //https://api.github.com/users/octocat/repos
Call<MacAdress> call = service.TestCall3("13296540788");
call.enqueue(new Callback<MacAdress>() {
@Override
public void onResponse(Call<MacAdress> call, Response<MacAdress> response) {
// Get result bean from response.body()
// List<Repo> repos = response.body();
System.out.println(response.code());
try {
System.out.println(response.body().getResultObj());
System.out.println(response.body().getResultState());
}catch (Exception e){ } // Get header item from response
String links = response.headers().get("Link");
showlog("links="+links);
/**
* 不同于retrofit1 可以同时操作序列化数据javabean和header
*/
} @Override
public void onFailure(Call<MacAdress> call, Throwable throwable) {
throwable.printStackTrace();
//showlog(throwable.getCause().toString());
}
});
}
} public static void showlog(String info) {
System.out.print("Retrofit " + info + "\n");
} }

这里的baseUrl("http://115.29.190.99/api/meta/")  就是URL的前面路径,加上@POST("getmacaddress") 的getmacaddress 其实就是 : http://115.29.190.99/api/meta/getmacaddress   请求的全路径。

两种方式:

TestCall2 是直接接收接收返回json的数据。

TestCall3 是用模型接收返回的json数据。

输出结构为:

代码:https://pan.baidu.com/s/1Fpp4AyzRapV9FLST5fbJKg

Android Retrofit2 网路编程的更多相关文章

  1. Android中JNI编程的那些事儿(1)

    转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...

  2. Android 框架式编程 —— 起篇

    一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...

  3. Android 的网络编程

    android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ...

  4. Android手机摄像头编程入门

    本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...

  5. 《Android传感器高级编程》

    <Android传感器高级编程> 基本信息 原书名:Professional Android Sensor Programming 原出版社: Wrox 作者: (美)米内特(Greg M ...

  6. Java复习9网路编程

    Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...

  7. (转载)android开发常见编程错误总结

    首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07  第771次阅读 android,异常 0 编辑推荐:稀 ...

  8. Android Studio NDK编程初探

    继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了. 经过参考和一系列的摸索,记录下具体步骤. 创建C++ Support的Android St ...

  9. (转)android 蓝牙通信编程

    转自:http://blog.csdn.net/pwei007/article/details/6015907 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样 ...

随机推荐

  1. Spring Cloud启动应用时指定IP或忽略某张网卡配置

    说明:分布式应用部署到服务上,由于服务器可能存在多张网卡,造成IP地址不准的问题. 解决方法: 1.直接添加忽略某张网卡的配置: spring.cloud.inetutils.ignored-inte ...

  2. SharePoint 2013 Troubleshooting——启用 Developer Dashboard

    SharePoint 2010的管理员和开发者可能对SharePoint Developer Dashboard(开发人员仪表盘)很熟悉.在SharePoint 2013这个工具已经被大范围的改写了, ...

  3. asp.net 浏览器下载文件的四种方式

    // 方法一:TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { Response.ContentT ...

  4. IE6-IE9兼容性问题列表及解决办法:锁表头的JQuery方案和非JQuery方案(不支持IE6,7,8)

    鉴于从IE8开始,IE不再支持css的expression了,所以以前依靠它完成锁表头的代码就全部失效了,面对新的浏览器,一切又要重新来过了. 现在所能找到的对于锁表头的方案主要有两种路子:一种是使用 ...

  5. ldd命令

    ldd命令用于判断某个可执行的 binary 档案含有什么动态函式库. 参数说明: --version 打印ldd的版本号 -v --verbose 打印所有信息,例如包括符号的版本信息 -d --d ...

  6. Latex中如何设置字体颜色(3种方式)

    Latex中如何设置字体颜色(三种方式)   1.直接使用定义好的颜色 \usepackage{color} \textcolor{red/blue/green/black/white/cyan/ma ...

  7. Java:集合,Arrays工具类用法

    1. 描述 Arrays工具类提供了针对数组(Array)的一些操作,比如排序.搜索.将数组(Array)转换列表(List)等等,都为静态(static)方法: binarySearch - 使用二 ...

  8. C++/C课程设计(2)工资管理系统功能说明

    原文取自个人博客:www.jycoder.com欢迎訪问 百度网盘下载源码:Demo.zip 百度网盘下载软件文档:软件文档.zip 工资管理系统 一,     基本功能要求: 1)以password ...

  9. nginx 前端调度 对后端的app的生存状态的检测

    # cat hosts.conf #app调试 upstream gl-appsrv_pools { server 10.1x0.2xx.1x0:8040; server 10.x9x.20.208: ...

  10. centos 7 min 编译安装php5.6+nginx1.7.5 笔记

    1.安装mysql请参照 centos 7 min 编译安装mysql5.6.20 笔记 2.编译安装php5.6+nginx1.7.5 2.1.安装php5.6.0 首先添加依赖应用yum inst ...