前一阵利用一些免费的api接口做了一个新闻类的app,挺简陋的,但是自己用着还是可以的。
后来看到个干货集中营的api,里面的内容是一些大神们分享在github上的开源项目,非常值得学习。既然提供给了我们api,那么我们就得好好利用一下了。于是我就做了一个手机app来看学习一下。
最近修改了一下,弄了弄福利中的妹子图片,以前不知道福利中的是妹子图片。同时支持图片下载,也修复了以前网络不好,程序崩溃的问题。自己做的效果比较糙,可以去干货集中营看看大神们做的,UI以及使用效果都非常好。
代码地址https://github.com/SZJing/GanHuoTest
其实制作的流程和制作一个简单的新闻app一样,首先我们先要通过API接口获取数据。代码如下
private void RequestInfo() {
final Request request = new Request.Builder()
.url("http://gank.io/api/data/" + categroy + count + page)
.build();
OkHttpClient client = new OkHttpClient();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(MainActivity.this,"获取数据失败",Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
String result = response.body().string();
Log.i("获取的信息",result);
Gson gson = new Gson();
infoGson = gson.fromJson(result,InfoGson.class);
handler.sendEmptyMessage(UPDATE);
}
}
});
}
这里是利用okhttp访问的url,同时这个url也没有写死,因为我们还要通过改变分类、获取数据的数量和页数来获得不同的数据。获得数据之后我们就要解析数据,通过打印的信息,可以看出返回的是json数据。这里我是用的Gson来解析数据,这里注意okhttp和Gson都是需要导入第三方库的,具体请看github中的build.gradle文件。最后通过handler通知更新UI将解析出来的数据展示到界面上。
private Handler handler = new Handler(){
public void handleMessage(Message msg){
super.handleMessage(msg);
switch (msg.what){
case UPDATE:
initRecycler();
break;
}
}
};
通过initRecycler()方法将数据放到Adapter中,进而将每个数据展示出来。
在Adapter中需要注意返回的数据中的图片可能是空,这里需要自己判断一下。我是把图片为空的替换成我放在drawable中的图片,并且加了个随机选择图片,这样效果更好些。
if (List.get(position).getImages() == null){
Random random = new Random();
int index = random.nextInt(image.length);
Glide.with(context).load(image[index]).into(holder.image);
}else {
String[] ImageUrl = List.get(position).getImages();
Glide.with(context).load(ImageUrl[0]+"?imageView2/0/w/150").into(holder.image);
}
接下来我们还要选择分类,这里我直接就是利用菜单来选择分类的,这样比较简单。但是中间也遇到了一个问题,就是我在Android6.0的虚拟机上测试时总是显示找不到menu文件,最后换成Android7.0的虚拟机就没问题,在真机上也没问题。也不知道为什么,反正是浪费了许多时间。创建菜单的代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case R.id.title_0:
categroy = "all/";
RequestInfo();
break;
case R.id.title_1:
categroy = "福利/";
RequestInfo();
break;
case R.id.title_2:
categroy = "Android/";
RequestInfo();
break;
case R.id.title_3:
categroy = "iOS/";
RequestInfo();
break;
case R.id.title_4:
categroy = "休息视频/";
RequestInfo();
break;
case R.id.title_5:
categroy = "拓展资源/";
RequestInfo();
break;
case R.id.title_6:
categroy = "前端/";
RequestInfo();
break;
default:
break;
}
return true;
}
创建菜单的方法网上有很多,我这只是最简单的一种使用。这里我们通过点击菜单中的项目来更换分类,并且再重新获取数据。
最后是刷新获取跟过内容,这里我只是用了个点击图片更新的效果,其实还可以用悬浮按钮FloatActionBar、下拉刷新等方法,我只是简单起见,没有过多的考虑很好的操作效果和UI界面。
Load.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int p = Integer.valueOf(page);
page = String.valueOf(p+1);
RequestInfo();
}
});
点击图片,更换页数,再次获取数据就完成了加载更多。
最后就是这么多了,是不是很简单。
代码githubhttps://github.com/SZJing/GanHuoTest