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添加权限     因为后期有可能用到   就提前写了

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


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<gson> getgson(@QueryMap ArrayMap<String,String> 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<String, String> arr = new ArrayMap<>();
        arr.put("platform","2");
        arr.put("appVersion","1.7.0");
        arr.put("osType","2");
        Call<gson> get = jiekou.getgson(arr);
        get.enqueue(new Callback<gson>() {
            @Override
            public void onResponse(Response<gson> 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.布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="comqq.example.hasee.myapplication.MainActivity">

    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>




7.如果你想上传文件并且上传数据可以看一看下面的的写法            主要改一改接口和主代码内容就可以了     

在接口里面接着写代码      

http://cache.video.iqiyi.com/MyUploadServer/servlet/MyUploadServlet 这是服务器地址

//上传文件并携带参数

     @POST("MyUploadServer/servlet/MyUploadServlet")
     Call<ResponseBody> 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<ResponseBody>() {
                            @Override
                            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                                try {
                                    Toast.makeText(MainActivity.this,response.body().string()+"11", Toast.LENGTH_SHORT).show();
                                } catch (IOException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onFailure(Call<ResponseBody> call, Throwable t) {
                                Toast.makeText(MainActivity.this,t.getMessage(), Toast.LENGTH_SHORT).show();

                            }
                        });




8.当然Retrofit的功能有很多  比如文件下载(支持大文件支持变下变存放)    这一步要用到线程   因为这是耗时操作

接口定义

@Streaming
    @GET
    Call<ResponseBody> 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<ResponseBody> 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<stl> 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<stl>() {});




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值