【分享】每日自动从网上获取各种妹纸福利图APP(安卓源码开源的可以学习和改进)
本帖最后由 wushaominkk 于 2018-7-6 11:19 编辑1.实现思路:通过Retrofit模块抓取各大网站妹子福利图,gank,豆瓣,花瓣,煎蛋,淘女郎,妹子图
使用Rxjava系列类库 + Realm数据库 + Glide进行图片加载实现,并遵循Google的material设计。
2.添加依赖:
[*]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"/>
3.准备数据
图片数据来源:易源数据(https://www.showapi.com/)300次每天
请求地址分为几部分:
https://www.showapi.com/ //接口基地址
819-1 //接口地址
showapi_appid //易源应用ID
showapi_sign//身份验证
num//每页返回的数据条数
page //页数(非必须)
访问上述网址,获得Json数据,使用Gson的GsonFormat插件将Json数据转换为GirlBean对象
4.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请求
5. 自定义请求接口
/**
* 来自易源接口的数据
*/
@GET("819-1")
Observable<ResponseBody> getHuaBanMeizi(@Query("num") String num,
@Query("page") String page,
@Query("showapi_appid") String appId,
@Query("type") String type,
@Query("showapi_sign") String sign);
}
6. 显示数据
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.hotbitmapgg.moequest.R;
import com.hotbitmapgg.moequest.adapter.helper.AbsRecyclerViewAdapter;
import com.hotbitmapgg.moequest.entity.huaban.HuaBanMeiziInfo;
import com.hotbitmapgg.moequest.widget.RatioImageView;
import java.util.ArrayList;
import java.util.List;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class HuaBanMeiziAdapter extends AbsRecyclerViewAdapter {
private List<HuaBanMeiziInfo> meiziList = new ArrayList<>();
public HuaBanMeiziAdapter(RecyclerView recyclerView, List<HuaBanMeiziInfo> meiziList) {
super(recyclerView);
this.meiziList = meiziList;
}
@Override
public ClickableViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
bindContext(parent.getContext());
return new ItemViewHolder(
LayoutInflater.from(getContext()).inflate(R.layout.item_huaban_meizi, parent, false));
}
@Override
public void onBindViewHolder(ClickableViewHolder holder, int position) {
if (holder instanceof ItemViewHolder) {
final ItemViewHolder itemViewHolder = (ItemViewHolder) holder;
itemViewHolder.mTextView.setText(meiziList.get(position).getTitle());
Glide.with(getContext())
.load(meiziList.get(position).getThumb())
.centerCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.placeholder_image)
.into(itemViewHolder.ratioImageView)
.getSize((width, height) -> {
if (!itemViewHolder.item.isShown()) {
itemViewHolder.item.setVisibility(View.VISIBLE);
}
});
}
super.onBindViewHolder(holder, position);
}
@Override
public int getItemCount() {
return meiziList.size();
}
public class ItemViewHolder extends AbsRecyclerViewAdapter.ClickableViewHolder {
public RatioImageView ratioImageView;
public TextView mTextView;
public View item;
public ItemViewHolder(View itemView) {
super(itemView);
item = itemView;
ratioImageView = $(R.id.item_img);
mTextView = $(R.id.item_title);
ratioImageView.setOriginalSize(50, 50);
}
}
}
7.界面布局
/** <p/>
* 花瓣妹子接口对应type:
* 大胸妹=34
* 小清新=35
* 文艺范=36
* 性感妹=37
* 大长腿=38
* 黑丝袜=39
* 小翘臀=40
*/
public class HuaBanMeiziFragment extends RxBaseFragment {
@Bind(R.id.sliding_tabs)
SlidingTabLayout mSlidingTabLayout;
@Bind(R.id.view_pager)
ViewPager mViewPager;
private List<String> titles = Arrays.asList("大胸妹", "小清新", "文艺范", "性感妹", "大长腿", "黑丝袜", "小翘臀");
private List<Integer> cids = Arrays.asList(34, 35, 36, 37, 38, 39, 40);
public static HuaBanMeiziFragment newInstance() {
return new HuaBanMeiziFragment();
}
@Override
public int getLayoutId() {
return R.layout.fragment_huaban_meizi;
}
@Override
public void initViews() {
mViewPager.setAdapter(new HuaBanMeiziPageAdapter(getChildFragmentManager()));
mSlidingTabLayout.setViewPager(mViewPager);
}
private class HuaBanMeiziPageAdapter extends FragmentStatePagerAdapter {
public HuaBanMeiziPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return HuaBanMeiziSimpleFragment
.newInstance(cids.get(position), position);
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
@Override
public int getCount() {
return titles.size();
}
}
}
8. 成品图片:
成品APK下载链接: https://pan.baidu.com/s/1hb7M3u3ryaHIDexqq6tRyQ 密码: jdq7
成品源代码下载链接,觉得不错请免费给个评论吧,新人需要升级,不升级很多东西看不了啊:rggrg
源码链接失效了,大家不要再下了! 大神支持下 学习学习 谢谢!楼主分享,妹子看多了,会眼晕啊。 谢谢分享!!! 好厉害,妹子真多看得鼻子止不住血! 这种好东西不知道会不会被删,赶紧收藏 下载下来饱饱眼福吧 学习了! 学习, 这个蛮好玩的