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'
這時準備工作做完了。
先創(chuàng)建一個接口文件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數據。
輸出結構為:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- Android網絡請求框架Retrofit詳解
- Android Retrofit 2.0框架上傳圖片解決方案
- 簡略分析Android的Retrofit應用開發(fā)框架源碼
- Android app開發(fā)中Retrofit框架的初步上手使用
- Retrofit和OkHttp如何實現Android網絡緩存
- Android Retrofit2數據解析代碼解析
- Android中Retrofit的簡要介紹
- 基于Retrofit2+RxJava2實現Android App自動更新
- Android retrofit上傳文件實例(包含頭像)
- Android 封裝Okhttp+Retrofit+RxJava,外加攔截器實例
- Android Retrofit 中文亂碼問題的解決辦法
- Android使用 Retrofit 2.X 上傳多文件和多表單示例
- Android中Retrofit 2.0直接使用JSON進行數據交互
- Android Retrofit框架的使用
相關文章
Android中捕獲TTextView文本中的鏈接點擊事件方法
這篇文章主要介紹了Android中捕獲TTextView文本中的鏈接點擊事件方法,本文給出了實現代碼和使用方法以及實現自己控制的方法,需要的朋友可以參考下2015-01-01
Android?Camera+SurfaceView自動聚焦防止變形拉伸
這篇文章主要為大家介紹了Android自定義相機Camera+SurfaceView實現自動聚焦防止變形拉伸詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01
android studio 使用adb 命令傳遞文件到android 設備的方法
這篇文章主要介紹了android studio 使用adb 命令傳遞文件到android 設備的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-11-11

