Android Retrofit2 网路编程
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 网路编程的更多相关文章
- Android中JNI编程的那些事儿(1)
转:Android中JNI编程的那些事儿(1)http://mobile.51cto.com/android-267538.htm Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须 ...
- Android 框架式编程 —— 起篇
一般的,在开发的时候,写过的代码在需求变更后,发现需要改动非常多的地方,那么说明之前的代码的架构肯定是存在问题的. 下面我们结合面向对象的六大基本原则谈Android 框架式编程.首先先介绍一下面向对 ...
- Android 的网络编程
android的网络编程分为2种:基于socket的,和基于http协议的. 基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ...
- Android手机摄像头编程入门
本讲内容:Android手机摄像头编程入门智能手机中的摄像头和普通手机中的摄像头最大的区别在于,智能机上的摄像头可以由程序员写程序控制, 做一些有趣的应用譬如,画中画,做一些有用的应用譬如二维码识别, ...
- 《Android传感器高级编程》
<Android传感器高级编程> 基本信息 原书名:Professional Android Sensor Programming 原出版社: Wrox 作者: (美)米内特(Greg M ...
- Java复习9网路编程
Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...
- (转载)android开发常见编程错误总结
首页 › 安卓开发 › android开发 android开发常见编程错误总结 泡在网上的日子 / 文 发表于2013-09-07 13:07 第771次阅读 android,异常 0 编辑推荐:稀 ...
- Android Studio NDK编程初探
继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了. 经过参考和一系列的摸索,记录下具体步骤. 创建C++ Support的Android St ...
- (转)android 蓝牙通信编程
转自:http://blog.csdn.net/pwei007/article/details/6015907 Android平台支持蓝牙网络协议栈,实现蓝牙设备之间数据的无线传输. 本文档描述了怎样 ...
随机推荐
- linux系统yum方式安装htop命令[转]
CentOS下为yum加入rpmForge源,使用yum安装htop 为CentOS增加rpmForge软件源 wget http://pkgs.repoforge.org/rpmforge-rele ...
- 安装Nginx+Tomcat
Centos下安装nginx rpm包 1 在nginx官方网站下载一个rpm包,下载地址是:http://nginx.org/packages/centos/ http://nginx.org/e ...
- MySQLFabric概述
Oracle在2014年5月推出了一套为各方寄予厚望的MySQL产品 -- MySQL Fabric,从字面上不太能看出它是啥,但是从名称上还是有迹可循的.fabric是“织物”的意思,这意味着它是用 ...
- 【Algorithm】二分查找
今天在学习<编程之美>的时候,看到一个二分查找的题目,发现原来我真的不懂二分查找. 二分查找时候注意的事项: 在求二分查找的中间点时没有使用 midIndex = (minIndex + ...
- Android HttpURLConnection源代码分析
Android HttpURLConnection源代码分析 之前写过HttpURLConnection与HttpClient的差别及选择.后来又分析了Volley的源代码. 近期又遇到了问题,想在V ...
- gcc cc1: all warnings being treated as errors
cc1: all warnings being treated as errors 在Makefile中找到 -Werror项,删除即可.删除后重新编译. 或设置环境变量 c工程设置 export C ...
- 项目记录25--unity-tolua框架 View02---BasePanel.lua
还在,还在. ... . 每天晚上找点时间写点点,多了也不想学到底是什么心理啊. 写完看电影去. 今天写两个算超完毕了BaseUI.lua,UIManager.lua(完好中这个) local Bas ...
- [转]IDEA 导出自己的jar包 并且在另一个工程中引用
1.导出jar包 1.1 idea导出jar包不如eclipse方便,但是熟练了也很容易操作 1.2 File -> Project Settings -> Artifacts(艺术品) ...
- Appium 设置手机连接方式
使用appium的 Connection 和driver 的setConnection方法,可以切换手机的上网方式 // 切换到wifi Connection cnn = Connection.WIF ...
- ext: gridpanel中的点击事件的参数是什么意思?
listeners: { // 当用户单击列表项时激发该函数 itemclick: function(view, record, item, index, evt) //① ...