compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.squareup.okhttp3:logging-interceptor:3.3.0' compile 'com.squareup.retrofit2:converter-gson:2.1.0' compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
1.2添加权限 因为后期有可能用到 就提前写了
2.自己创建个类 按Alt+S 然后把网址里面的内容放进去
3.写一个接口
4.接口代码
//http://www.moviebase.cn/uread/app/splash/splashList?platform=2&appVersion=1.7.0&osType=2
public interface jiekou {
@GET("splash/splashList")
Call getgson(@QueryMap ArrayMap pa);
}
5.主函数
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Retrofit.Builder re=new Retrofit.Builder();
re.baseUrl("http://www.moviebase.cn/uread/app/");
re.addConverterFactory(GsonConverterFactory.create());
Retrofit bu = re.build();
jiekou jiekou = bu.create(jiekou.class);
ArrayMap arr = new ArrayMap<>();
arr.put("platform","2");
arr.put("appVersion","1.7.0");
arr.put("osType","2");
Call get = jiekou.getgson(arr);
get.enqueue(new Callback() {
@Override
public void onResponse(Response response, Retrofit retrofit) {
gson body = response.body();
String imgurl = body.getSplash().getImgurl();
Log.d("aaa", imgurl);
}
@Override
public void onFailure(Throwable t) {
Log.d("aaa", "onFailure: "+t.toString());
}
});
}
}
6.布局
7.如果你想上传文件并且上传数据可以看一看下面的的写法 主要改一改接口和主代码内容就可以了
在接口里面接着写代码
http://cache.video.iqiyi.com/MyUploadServer/servlet/MyUploadServlet 这是服务器地址
//上传文件并携带参数
@POST("MyUploadServer/servlet/MyUploadServlet")
Call up(@Body MultipartBody multipartBody);
然后在代码中写以下代码
//这个就你在手机当中的文件 也就是想要上传的文件 Environment.getExternalStorageDirectory()这是获取安卓文件地址
//当然这个文件你的手机上是要有的 文件直接放在文件(默认)管理器打开的目录就行了
File file1 = new File(Environment.getExternalStorageDirectory(), "a.txt");
File file2 = new File(Environment.getExternalStorageDirectory(), "b.txt");
MultipartBody.Builder builder = new MultipartBody.Builder();//这是得到实例化
RequestBody requestBody1 = MultipartBody.create(MultipartBody.FORM, file1);//将文件打包
RequestBody requestBody2 = MultipartBody.create(MultipartBody.FORM, file2);//将文件打包
MultipartBody bu = builder
.addFormDataPart("file", file1.getName(), requestBody1)//得到文件的名字
.addFormDataPart("file", file2.getName(), requestBody2)//得到文件的名字
.addFormDataPart("username", "1111111111111111111111111111111111")//这个就是携带参数上传 只有服务器能看见
.setType(MultipartBody.FORM)//这是这是样式
.build();
new Retrofit.Builder()//下面的步骤就没有什么差别了
.baseUrl("http://169.254.38.24/")
.client(new OkHttpClient.Builder().build())
.build()
.create(getgson.class)
.up(bu)//这个up就是在接口定义的名字
.enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
try {
Toast.makeText(MainActivity.this,response.body().string()+"11", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call call, Throwable t) {
Toast.makeText(MainActivity.this,t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
8.当然Retrofit的功能有很多 比如文件下载(支持大文件支持变下变存放) 这一步要用到线程 因为这是耗时操作
接口定义
@Streaming
@GET
Call download(@Url String fileUrl);
主代码
final String baseUrl = "http://1251603248.vod2.myqcloud.com/";
final String downUrl = "http://1251603248.vod2.myqcloud.com/4c9adaa7vodtransgzp1251603248/30e0819d9031868223192061218/v.f40.mp4";
new Thread(new Runnable() {
@Override
public void run() {
try {
Response response = new Retrofit.Builder()
.baseUrl(baseUrl)
.client(okHttpClient)
.build()
.create(NetService.class)
.download(downUrl)
.execute();
if (response.isSuccessful()) {
deliveryHandler.post(new Runnable() {
@Override
public void run() {
showResult("服务器连接成功!");
}
});
boolean ok = writeDisk(response.body());
Log.i(TAG, STR_TAG + "run: 下载:" + ok);
if (ok) {
deliveryHandler.post(new Runnable() {
@Override
public void run() {
tv_content.setText("下载完成!!");
}
});
}
} else {
deliveryHandler.post(new Runnable() {
@Override
public void run() {
showResult("下载失败!");
}
});
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
9.网络请求想直接输入网址 接口里面这么写就可以
public interface jiekou {
@GET()
Call getstl(@Url String url);
}
这是你需要请求数据时的代码
new Retrofit.Builder()
.baseUrl("https://raw.githubusercontent.com/zhang721788/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(jiekou.class)
.getstl("https://raw.githubusercontent.com/zhang721788/testmaterial/master/cookclassify.json")
.enqueue(new Callback() {});