Android Retrofit2網(wǎng)路編程實現(xiàn)方法詳解
Android里面本身有OKHttp,不過不是很好用,這里就用Retrofit2,簡單好用。
首先,需要加入網(wǎng)絡(luò)權(quán)限:
<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")為請求接口的參數(shù)。
寫一個實體類模型,用來匹配接收的數(shù)據(jù)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 可以同時操作序列化數(shù)據(jù)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 可以同時操作序列化數(shù)據(jù)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的數(shù)據(jù)。
TestCall3 是用模型接收返回的json數(shù)據(jù)。
輸出結(jié)構(gòu)為:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android網(wǎng)絡(luò)請求框架Retrofit詳解
- Android Retrofit 2.0框架上傳圖片解決方案
- 簡略分析Android的Retrofit應(yīng)用開發(fā)框架源碼
- Android app開發(fā)中Retrofit框架的初步上手使用
- Retrofit和OkHttp如何實現(xiàn)Android網(wǎng)絡(luò)緩存
- Android Retrofit2數(shù)據(jù)解析代碼解析
- Android中Retrofit的簡要介紹
- 基于Retrofit2+RxJava2實現(xiàn)Android App自動更新
- Android retrofit上傳文件實例(包含頭像)
- Android 封裝Okhttp+Retrofit+RxJava,外加攔截器實例
- Android Retrofit 中文亂碼問題的解決辦法
- Android使用 Retrofit 2.X 上傳多文件和多表單示例
- Android中Retrofit 2.0直接使用JSON進行數(shù)據(jù)交互
- Android Retrofit框架的使用
相關(guān)文章
Android編程設(shè)計模式之狀態(tài)模式詳解
這篇文章主要介紹了Android編程設(shè)計模式之狀態(tài)模式,結(jié)合實例形式詳細分析了Android狀態(tài)模式的概念、功能、使用方法及相關(guān)注意事項,需要的朋友可以參考下2017-12-12Android之RecyclerView實現(xiàn)時光軸效果示例
本篇文章主要介紹了Android之RecyclerView實現(xiàn)時光軸效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02詳解Flutter 調(diào)用 Android Native 的方法
這篇文章主要介紹了詳解Flutter 調(diào)用 Android Native 的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01設(shè)置Android系統(tǒng)永不鎖屏永不休眠的方法
在進行Android系統(tǒng)開發(fā)的時候,有些特定的情況需要設(shè)置系統(tǒng)永不鎖屏,永不休眠。本篇文章給大家介紹Android 永不鎖屏,開機不鎖屏,刪除設(shè)置中休眠時間選項,需要的朋友一起學(xué)習(xí)吧2016-03-03Android自定義ViewGroup實現(xiàn)彈性滑動效果
這篇文章主要為大家詳細介紹了Android自定義ViewGroup實現(xiàn)彈性滑動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android開發(fā)實現(xiàn)TextView顯示豐富的文本
這篇文章主要介紹了Android開發(fā)實現(xiàn)TextView顯示豐富的文本,涉及Android中TextView的使用技巧,需要的朋友可以參考下2015-12-12