有能力的同学可以直接去看 Retrofit官方Demo:
https://github.com/square/retrofit
我这边简单使用一下,以百度首页解析作为开篇:
导入jar包:
有网络和无网络的效果图:
Service.java:
package com.iwanghang.retrofitdemo;
import retrofit2.Call;
import retrofit2.http.GET;
public interface Service {
@GET("/") // 因为我们是解析首页,也就是根目录,所以这边写"/"
Call<String> getBaidu();
}
MainActivity.java:
package com.iwanghang.retrofitdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Converter;
import retrofit2.Response;
import retrofit2.Retrofit;
/**
* Retrofit官方Demo
* https://github.com/square/retrofit
*/
public class MainActivity extends AppCompatActivity implements Callback<String> {
TextView main_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 实例化Retrofit
* Converter 转换器 可以转换任意数据类型
*/
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://www.baidu.com")
.addConverterFactory(
new Converter.Factory() {
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations, Retrofit retrofit) {
//return super.responseBodyConverter(type, annotations, retrofit);
return new Converter<ResponseBody, String>() {
@Override
public String convert(ResponseBody value) throws IOException {
//return null;
return value.string();
}
};
}
}
).build();
Service service = retrofit.create(Service.class); // 实例化服务
Call<String> call = service.getBaidu(); // 创建请求
call.enqueue(this); // 异步请求
main_text = (TextView) findViewById(R.id.main_text);
}
// 异步请求 成功
@Override
public void onResponse(Call<String> call, Response<String> response) {
Toast.makeText(this, "请求成功", Toast.LENGTH_SHORT).show();
main_text.setText(response.body());
}
// 异步请求 失败
@Override
public void onFailure(Call<String> call, Throwable t) {
Toast.makeText(this, "请求失败"+call.request().url(), Toast.LENGTH_SHORT).show();
t.printStackTrace();
}
}
另外不用忘记在AndroidManifest.xml加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
给默认activity_main.xml的textView加id。