Retrofit获取网络数据

来源:互联网 发布:多啦衣梦新式网络传销 编辑:程序博客网 时间:2024/06/01 07:28
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'


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=2public 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();







原创粉丝点击