简易Go api服务器和Adnroid应用实现通信

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dhd040805/article/details/80283389

服务器端代码

package main

import (
	"net/http"
	"github.com/pquerna/ffjson/ffjson"
	"github.com/gorilla/mux"
	"encoding/json"
	"log"
)

type Person struct {
	Id        string   `json:"id,omitemty"`
	Firstname string   `json:"firstname,omitemty"`
	Lastname  string   `json:"lastname,omitemty"`
	Address   *Address `json:"address,omitemty"`
}
type Address struct {
	City     string `json:"city,omitemty"`
	Province string `json:"province,omitemty"`
}

var people []Person
//获取所有person
func GetPeople(w http.ResponseWriter, req *http.Request) {
	ffjson.NewEncoder(w).Encode(people)
}

//根据id获取person
func GetPerson(w http.ResponseWriter, r *http.Request) {
	params := mux.Vars(r)
	for _, item := range people {
		if item.Id == params["id"] {
			json.NewEncoder(w).Encode(item)
			return
		}
	}
	json.NewEncoder(w).Encode(people)
}

//通过post向服务器添加数据
func PostPerson(w http.ResponseWriter, r *http.Request) {
	params := mux.Vars(r)
	var person Person
	_ = json.NewDecoder(r.Body).Decode(&people)
	person.Id = params["id"]
	people = append(people, person)
	json.NewEncoder(w).Encode(people)
}

//根据id删除用户
func DeletePerson(w http.ResponseWriter, r *http.Request) {
	params := mux.Vars(r)
	for index, item := range people {
		if item.Id == params["id"] {
			people = append(people[:index], people[index+1:] ...)
			break
		}
	}
	json.NewEncoder(w).Encode(people)
}
func main() {
	people = append(people, Person{Id: "1", Firstname: "xi", Lastname: "paopao", Address: &Address{City: "wuhan", Province: "hubei"}})
	people = append(people, Person{Id: "2", Firstname: "yiran", Lastname: "zhuangzhi", Address: &Address{City: "wuhan", Province: "hubei"}})
	router := mux.NewRouter()
	router.HandleFunc("/people", GetPeople).Methods("GET")
	router.HandleFunc("/people/{id}", GetPerson).Methods("GET")
	router.HandleFunc("/people/{id}", PostPerson).Methods("POST")
	router.HandleFunc("/people/{id}", PostPerson).Methods("DELETE")
	log.Fatal(http.ListenAndServe(":12345", router))

}

Android端代码

首先gradle添加依赖

  compile 'com.lzy.net:okgo:3.0.4'

然后application或者mainactivity里面初始化okgo,由于是简单测试所以不加其他的

  OkGo.getInstance().init(this)
                .setOkHttpClient(new OkHttpClient.Builder().build());

然后是请求代码

OkGo.<String>get("http://XXXX:8080/people")//XXXX你的局域网ipv4地址加端口
                        .params("id", 1)
                        .execute(new StringCallback() {
                            @Override
                            public void onSuccess(Response<String> response) {
                                String data = response.body();//这个就是返回来的结果
                                Log.e("DHD", "onSuccess: " + data);
                            }

                            @Override
                            public void onError(Response<String> response) {
                                super.onError(response);
                                Log.e("DHD", "onError: " + response.message());
                            }
                        });

请求结果如图


也可以在浏览器测试,也可以在postman测试,postman的如图



猜你喜欢

转载自blog.csdn.net/dhd040805/article/details/80283389
今日推荐