Retrofit2 学习总结 (一)

今天学习了Retrofit2,完成了一个简单的RetrofitDemo

先总结一下踩到的坑或潜在的坑

1.配置网络权限

<uses-permission android:name="android.permission.INTERNET"/>

2.添加依赖

    compile 'com.squareup.retrofit2:retrofit:2.0.2'
    compile 'com.squareup.retrofit2:converter-gson:2.0.2'

3.Gson jar 包

    服务器需要一个json jar包打包成json数据

4.注意服务器端返回的json数据格式是否正确

    特别注意,要查看自己输出流,输出的数据是否正确,我今天就踩了一个大坑,创建servlet的时候

    它自动的给我写了一个这玩意,我的天,我就一直纳闷它老是走onFailure,大家一定要特别注意。

response.getWriter().append("Served at: ").append(request.getContextPath());

下面的是对象的正确的json格式

{"A":"1","B":"1"}

java 服务器端代码

model 服务器和客户端都要有

package com.example.retrofit2study.model;

/**
 * Created by 粽子 on 2018/7/9.
 */

public class User {
    private  String A;
    private  String B;

    public String getA() {
        return A;
    }

    public String getB() {
        return B;
    }

    public void setA(String a) {
        A = a;
    }

    public void setB(String b) {
        B = b;
    }
}

 servlet

package servelt;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;


/**
 * Servlet implementation class LoginServelt
 */
@WebServlet("/LoginServelt")
public class LoginServelt extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServelt() {
        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
		response.setCharacterEncoding("utf-8");
		request.setCharacterEncoding("utf-8");
		response.setContentType("application/json; charset=utf-8");
	     System.out.println("有访问");
		 PrintWriter out = response.getWriter();  
		 User user=new User(); 
		 user.setA("1");
		 user.setB("1");
		 Gson gson = new Gson();
		
		 String aa=gson.toJson(user);
		
		 
				 out.write(aa);
				 out.flush();  
			     out.close(); 
			     System.out.println(aa);
	}

	/**
	 * @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);
	}

}

客户端

接口

 
 
package com.example.retrofit2study.net;

import com.example.retrofit2study.model.User;

import java.util.List;

import retrofit2.Call;
import retrofit2.http.GET;

/**
 * Created by 粽子 on 2018/7/9.
 */

public interface GetUserService {
    @GET("LoginServelt")
    Call<User> getUser();
}
package com.example.retrofit2study;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.retrofit2study.model.User;
import com.example.retrofit2study.net.GetUserService;

import java.util.List;
import java.util.StringTokenizer;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button= (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                Retrofit retrofit=new Retrofit.Builder()
                        .baseUrl("http://地址:8080/Retrofit2Study/")//这里填你自己的地址
                        .addConverterFactory(GsonConverterFactory.create())
                        .build();
                GetUserService getUserService=retrofit.create(GetUserService.class);
                Call<User> call=getUserService.getUser();
                call.enqueue(new Callback<User>() {
                    @Override
                    public void onResponse(Call<User> call, Response<User> response) {
                        Toast.makeText(MainActivity.this,"结果"+response.body(),Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onFailure(Call<User> call, Throwable t) {
                        Toast.makeText(MainActivity.this,"结果失败",Toast.LENGTH_SHORT).show();
                    }
                });
            }
        }).start();

            }
        });
    }
}
layout就一个按钮 id为 button1

猜你喜欢

转载自blog.csdn.net/qq_40687864/article/details/80974692