Retrofit获取网络数据

1.1导包:
   
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   然后把网址里面的内容放进去

Retrofit获取网络数据_第1张图片





3.写一个接口

Retrofit获取网络数据_第2张图片





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() {});




你可能感兴趣的:(Retrofit获取网络数据)