1.開發工具
服務端編寫:eclipse
客戶端:Android studio 3.0.1
2.客戶端
(1)AS新建一個項目,然後要使用Retrofit2.0 添加依賴和權限
//retrofit2 依賴庫
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
//Gson 數據解析器依賴庫
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
//網絡權限
<uses-permission android:name="android.permission.INTERNET"/>
(2)寫一個請求接口
package com.example.nn.retrofitexample2;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* Created by nn on 2019/7/17.
*/
//完整的請求URL爲:http://192.168.94.1:8080/retrofit/retrofitservice?retrofit=xx
public interface RetrofitRequest {
@GET("retrofit/retrofitservice")
//使用GET的方式請求返回字符串
Call<ResponseBody> getData(@Query("retrofit") String retrofit);
}
(3)編寫MainActivity中的代碼
package com.example.nn.retrofitexample2;
import android.os.*;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class MainActivity extends AppCompatActivity {
private TextView mshow;
private Button mrequest;
public static final String API_SERVICE = "http://192.168.94.1:8080/";
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bundle data = msg.getData();
String result = data.getString("result");
mshow.setText(result);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
init();
mrequest.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(runnable).start(); //不能在UI線程中進行網絡請求,要開子線程
}
});
}
private void init(){
mshow = (TextView)findViewById(R.id.show);
mrequest = (Button)findViewById(R.id.request);
}
//發送網絡請求
private String request() throws IOException {
//創建Retrofit對象,baseUrl中的字符串最後要有 /
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_SERVICE)
.addConverterFactory(GsonConverterFactory.create())
.build();
//創建網絡接口實例
RetrofitRequest retrofitRequest = retrofit.create(RetrofitRequest.class);
//對發送請求進行封裝
Call<ResponseBody> call = retrofitRequest.getData("REQUEST");
//發送請求,獲取請求的數據
return call.execute().body().string();
}
//網絡請求線程
Runnable runnable = new Runnable() {
@Override
public void run() {
try {
String result = request();
Message msg = new Message();
Bundle data = new Bundle();//使用Bunlde傳輸數據
data.putString("result", result);
msg.setData(data);
handler.sendMessage(msg);
} catch (IOException e) {
Log.e("request_erro", e.toString());
}
}
};
}
(4)activity_main.xml 的代碼
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
tools:context="com.example.nn.retrofitexample2.MainActivity">
<TextView
android:id="@+id/show"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="請求"/>
</LinearLayout>
3.服務端
打開eclipse建立一個動態的web項目,在src下面建立 一個 retrofit的包,在這個包裏面建立一個servlet,名字爲:retrofitservice
代碼如下:
package com.example.service;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class retrofitservice
*/
@WebServlet("/retrofitservice")
public class retrofitservice extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public retrofitservice() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//獲得請求的數據
String message = request.getParameter("retrofit");
System.out.println(message);
if (message.equals("REQUEST"))
message ="這個是自己的第一個Retrofit請求的例子!";
//返回數據
response.getWriter().append(message);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
第一次使用retrofit,返回的是字符串,會繼續學習這個網絡請求框架。