妹子图APP(一)—— Retrofit+Glide+Gson加载网络图片

网络请求:Retrofit    地址: https://github.com/square/retrofit
图片加载:Glide       地址: https://github.com/bumptech/glide
数据解析:Gson
1.添加依赖:
Retrofit
    compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包
    compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依赖包
    compile 'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依赖包
Glide 
//工程的build.gradle文件中
repositories {
    mavenCentral() 
}
//Module的build.gradle文件中
dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:19.1.0'
}
网络请求需要权限
    <uses-permission android:name="android.permission.INTERNET"/>
2.准备数据
图片数据来源:易源数据( https://www.showapi.com/)300次每天
http://route.showapi.com/197-1?showapi_appid=34276&showapi_sign=731d68d6d56b4d789d6571f530ee28ef&num=10
请求地址分为几部分:
    https://www.showapi.com/ //接口基地址
    197-1 //接口地址
    showapi_appid //易源应用ID
    showapi_sign  //身份验证
    num  //每页返回的数据条数
    page //页数(非必须)
访问上述网址,获得Json数据,使用Gson的GsonFormat插件将Json数据转换为GirlBean对象
3.Retrofit的使用
@Query、@QueryMap://用于Http Get请求传递参数
@Field://用于Post方式传递参数,需要在请求接口方法上添加@FormUrlEncoded,即以表单的方式传递参数
@Body: //用于Post,根据转换方式将实例对象转化为对应字符串传递参数.
        //比如Retrofit添加GsonConverterFactory则是将body转化为gson字符串进行传递
@Path: //用于URL上占位符
@Part: //配合@Multipart使用,一般用于文件上传
@Header://添加http header
@Headers://跟@Header作用一样,只是使用方式不一样,@Header是作为请求方法的参数传入,@Headers是以固定方式直接添加到请求方法上POST请求
3.1自定义请求接口
public interface ApiService {

    @POST("197-1")
    @FormUrlEncoded
    Call<GirlBean> getGirls(@Field("showapi_appid") String showapi_appid,
                               @Field("showapi_sign") String showapi_sign,
                               @Field("num") int num ,
                               @Field("page") int page);
//    //GET请求
//    @GET("197-1")
//    Call<GirlBean> getGirls(@Query("showapi_appid") String showapi_appid,
//                            @Query("showapi_sign") String showapi_sign,
//                            @Query("num") int num ,
//                            @Query("page") int page);

}
3.2请求数据
定义一个类,用于Retrofit请求数据
public class GirlsRequest {
    public static final String baseurl = "http://route.showapi.com/";
    public static final String showapi_appid = "34276";
    public static final String showapi_sign = "731d68d6d56b4d789d6571f530ee28ef";
    public static final int num = 10;

    //创建Retrofit对象
    Retrofit mRetrofit = new Retrofit.Builder()
            .baseUrl(baseurl)//请求基地址
            //添加转换器,直接将内容转换成String或者json
            //.addConverterFactory(ScalarsConverterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    public void getGirlList(final RequsetCallback requsetCallback, int page) {
        //创建请求的接口
        ApiService mApiService = mRetrofit.create(ApiService.class);
        Call<GirlsBean> mCall = mApiService.getGirls(showapi_appid,showapi_sign,num,page);
        //利用Call对象,发起网络请求
        mCall.enqueue(new Callback<GirlsBean>() {
            //请求成功
            @Override
            public void onResponse(Call<GirlsBean> call, Response<GirlsBean> response) {
                //成功获得正确数据
                if (response.body().getShowapi_res_code() == 200) {
                    requsetCallback.onFinish(response.body());
                } else {
                    //错误数控
                    requsetCallback.onError(response.body().getShowapi_res_error());
                }
            }
            //失败
            @Override
            public void onFailure(Call<GirlsBean> call, Throwable t) {
                requsetCallback.onError("网络请求失败");
            }
        });
    }
    //自定义回调接口
    public interface RequsetCallback<T>{
        void onFinish(T data);

        void onError(String msg);
    }
}
4.显示数据
         a).网络加载图片到ImageView中
Glide.with(context).load(imageUrl).into(imageView);
         b). 当加载网络图片时,由于加载过程中图片未能及时显示,此时可能需要设置等待时的图片
Glide.with(context).load(imageUrl).placeholder(R.mipmap.ic_launcher).into(imageView);
         c). 当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示
Glide.with(context).load(imageUrl).error(R.mipmap.ic_launcher).into(imageView);
图片列表使用RecyclerView 实现
在适配器中的onBindViewHolder方法中使用Glide设置图片
    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        //Glide设置图片(未加载则用粉色替代)
        Glide.with(mContext)
                .load(mList.get(position).getPicUrl())
                .centerCrop()
                .placeholder(R.color.colorAccent)
                .into(holder.mImageView);
    }
5.完成加载图片的功能
public class MainActivity extends AppCompatActivity implements 
        GirlsRequest.RequsetCallback<GirlsBean>{

    private  RecyclerView mRecyclerView;
    private MyAdapter mAdapter;
    private GridLayoutManager mGridLayoutManager;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mRecyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        //RecyclerView 设置行列
        mGridLayoutManager = new GridLayoutManager(this,2);
        //VERTICAL代表有多少列,HORIZONTAL就代表有多少行,
        mRecyclerView.setLayoutManager(mGridLayoutManager);

        GirlsRequest request = new GirlsRequest();
        //调用getGirlList方法请求数据
        request.getGirlList(this,1);
    }

    @Override
    public void onFinish(GirlsBean data) {
        //得到适配器
        mAdapter = new MyAdapter(this,data.getShowapi_res_body().getNewslist());
        //设置适配器
        mRecyclerView.setAdapter(mAdapter);
    }

    @Override
    public void onError(String msg) {
        //吐司错误信息
        Toast.makeText(this,msg,Toast.LENGTH_SHORT).show();
    }
}
暂时的效果

<think>嗯,用户想在Windows系统的腾讯云服务器上搭建frp,存放路径是C:\FrpHelp1.0\FrpHelp。我需要详细说明配置步骤。首先,frp需要服务端和客户端,用户可能用的是腾讯云作为服务端?或者客户端?可能用户是想让腾讯云服务器作为服务端,但通常内网穿透是让云服务器作为服务端,内网机器作为客户端。不过用户提到的是在Windows腾讯云服务器上搭建,可能用户是想让这台服务器作为客户端,连接另一个服务端?或者反过来? 需要先确认用户的具体场景。不过根据常见的frp使用情况,比如用户可能有一个内网的Windows机器,想通过腾讯云服务器暴露到公网。这时候腾讯云服务器运行frps(服务端),内网机器运行frpc(客户端)。但用户的问题提到的是在Windows系统的腾讯云服务器配置,所以可能用户的情况不同。或者用户可能误解了,因为通常云服务器已经有公网IP,可能不需要内网穿透,除非用户想通过云服务器访问另一个内部网络。 可能用户是想在云服务器配置frp服务端,然后让其他内网机器连接到这里。或者相反,用户可能想用云服务器作为客户端连接到另一个frp服务端。需要仔细分析。 根据引用中的内容,引用的是腾讯云服务器centos7搭建frp内网穿透访问内网windows远程桌面。原引用中的情况可能是在CentOS上搭建frps,然后内网Windows运行frpc。现在用户的问题是针对Windows系统的腾讯云服务器,所以可能用户想在Windows服务器上安装frps或frpc? 假设用户需要的是在Windows服务器配置frp,存放路径为C:\FrpHelp1.0\FrpHelp。可能的两种情况: 1. 用户将云服务器作为frps服务端,允许其他客户端连接。 2. 用户将云服务器作为frpc客户端,连接到另一台frps服务器,以暴露某些服务。 需要进一步明确,但用户的问题可能更倾向于作为服务端,因为通常云服务器有公网IP,适合作为服务端。但根据用户提供的存放路径,可能用户已经有特定的目录结构,需要指导如何配置frps或frpc的配置文件。 接下来,步骤应包括下载frp,解压到指定目录,配置frps.ini或frpc.ini,设置防火墙规则,启动服务,并设置开机启动。可能需要区分服务端和客户端的配置。 比如,用户可能需要在腾讯云服务器运行frps,所以需要配置frps.ini,设置bind_port等。然后配置Windows防火墙放行端口,并设置服务端开机启动。另外,如果用户是要让云服务器作为客户端,则配置frpc.ini,连接到远程的frps服务器,并转发远程桌面端口。 但用户的问题提到的是“在 Windows 腾讯云服务器配置 frp”,所以需要明确是作为服务端还是客户端。可能用户的需求是作为服务端,所以需要配置frps。但需要进一步确认。 在回答时,可能需要分两种情况说明,或者根据常见的用法,假设用户需要配置服务端,并指导如何设置。同时,根据用户提供的路径,确保解压到该目录,并正确配置ini文件。 此外,用户可能还需要配置安全组规则,在腾讯云控制台开放所需的端口,比如7000、3389等。这部分也需要提及。 总结步骤: 1. 下载frp并解压到指定目录。 2. 配置frps.ini(假设作为服务端)或frpc.ini(作为客户端)。 3. 配置Windows防火墙,开放端口。 4. 配置腾讯云安全组,允许端口访问。 5. 启动frp服务,并设置开机启动。 需要根据用户的具体需求,但可能用户的情况是将云服务器作为服务端,所以重点放在frps的配置。例如,引用中的例子是CentOS作为服务端,所以现在用户可能需要在Windows服务器配置frps,然后内网的其他Windows机器运行frpc连接到此,实现远程桌面访问。 因此,回答应详细说明服务端的配置步骤,包括编辑frps.ini,设置bind_port,配置安全组和防火墙,启动frps等。同时,可能还需要说明客户端的配置方法,以便用户知道如何连接。 另外,用户提供的存放路径是C:\FrpHelp1.0\FrpHelp,需要确保解压后的文件在此目录下,或者将文件移动到此目录。可能用户已经解压了文件,所以需要指导如何编辑配置文件,并运行。 最后,设置开机启动可以通过创建计划任务或服务来实现,比如使用nssm工具将frp注册为服务,或者使用批处理脚本添加到启动文件夹。</think>### 在Windows腾讯云服务器配置frp的详细步骤 #### 1. 下载并部署frp文件 1. 从[frp GitHub Release页面](https://github.com/fatedier/frp/releases)下载Windows版本(如`frp_0.25.0_windows_amd64.zip`) 2. 解压到指定目录`C:\FrpHelp1.0\FrpHelp`,确保包含以下文件: - `frps.exe`(服务端程序) - `frpc.exe`(客户端程序) - `frps.ini`(服务端配置模板) - `frpc.ini`(客户端配置模板) #### 2. 服务端配置(frps) **适用场景**:将腾讯云服务器作为中转节点,代理内网其他机器的服务(如远程桌面)[^1]。 1. 编辑`C:\FrpHelp1.0\FrpHelp\frps.ini`: ```ini [common] bind_port = 7000 # 服务端监听端口 token = your_secure_token # 建议设置鉴权令牌 ``` 2. 开放防火墙端口: ```powershell New-NetFirewallRule -DisplayName "FRP Server" -Direction Inbound -LocalPort 7000 -Protocol TCP -Action Allow ``` 3. 启动服务端: ```cmd cd C:\FrpHelp1.0\FrpHelp frps.exe -c frps.ini ``` #### 3. 客户端配置(frpc) **适用场景**:内网机器通过腾讯云服务器暴露服务。 1. 编辑`C:\FrpHelp1.0\FrpHelp\frpc.ini`: ```ini [common] server_addr = 云服务器公网IP server_port = 7000 token = your_secure_token [rdp] type = tcp local_ip = 127.0.0.1 local_port = 3389 remote_port = 6000 # 通过云服务器6000端口访问远程桌面 ``` 2. 启动客户端: ```cmd cd C:\FrpHelp1.0\FrpHelp frpc.exe -c frpc.ini ``` #### 4. 腾讯云安全组配置 1. 登录[腾讯云控制台](https://console.cloud.tencent.com/cvm/securitygroup) 2. 在安全组中开放端口:`7000`(服务端通信)、`6000`(远程桌面代理) #### 5. 设置开机自启 通过任务计划程序实现: 1. 创建新任务: - 操作:`启动程序` → 选择`frps.exe`或`frpc.exe` - 参数:`-c C:\FrpHelp1.0\FrpHelp\frps.ini` 2. 设置触发器:`登录时`或`系统启动时`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值