Retrofit2.0 GET 方式請求返回字符串

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,返回的是字符串,會繼續學習這個網絡請求框架。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章