利用百度APIStoreSDK获取Json数据并解析加载到ListView上
2016-04-16 10:28
591 查看
[align=left]
效果图(这里只是截取了List中的一项):
[/align]
一、:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中
Android Studio请在放入libs目录后,在project structure-> Dependencies-> File Dependency中添加jar包依赖。
在AndroidManifest.xml中,加入所需权限,这些权限将帮助sdk判断网络状态:
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
在调用APIStoreSDK的接口前需要进行初始化, 这一步必须在Application中完成。
你需要在项目中建立一个继承自Application的类,并在项目配置文件AndroidManifest.xml中application标签下android:name中指定该类:
MyApplication中添加的代码如下:
APIStoreSDK封装了完整的异步网络请求和回调逻辑,回调要继承ApiCallBack类并改写其中的onSuccess()、onError()、onComplete()方法(如不需要,可不用都写)。onSuccess会在请求成功时调用,onError会在请求失败时调用,onComplete总是会调用。responseString是api接口返回的响应字符串,或者空(请求失败时)。(以上内容来自为百度ApiStoreSdk说明文档)
在MainActivity中调用的如下:
以上就完成了Json数据的获取,接下来需要解析Json数据,解析Json数据就是确定Json数据的格式,并从中获取需要的数据,可以在onSuccess方法中通过打印Log来查看Json数据,将其复制到网上在线格式化确定其格式,每种格式解析方式都大同小异,下面只针对本例返回值讲解,贴出responString中数据格式化后的结果(由于默认返回值为10,这里只截取3个用作演示):
接下来就要解析出需要的数据,下面另起了HttpJson线程,在构造方法中传入了四个参数,并将parseJson方法返回的带有10个对象的pictureList添加到adapter中。
通过Url加载图片
效果图(这里只是截取了List中的一项):
[/align]
一、:登录百度ApiStore,获取移动sdk Android版(同时有使用文档和示例),将jar包导入到项目中
Android Studio请在放入libs目录后,在project structure-> Dependencies-> File Dependency中添加jar包依赖。
在AndroidManifest.xml中,加入所需权限,这些权限将帮助sdk判断网络状态:
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<uses-permissionandroid:name="android.permission.INTERNET"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
在调用APIStoreSDK的接口前需要进行初始化, 这一步必须在Application中完成。
你需要在项目中建立一个继承自Application的类,并在项目配置文件AndroidManifest.xml中application标签下android:name中指定该类:
android:name=".MyApplication"
MyApplication中添加的代码如下:
import android.app.Application; import com.baidu.apistore.sdk.ApiStoreSDK; public class MyApplication extends Application{ @Override public void onCreate() { super.onCreate(); ApiStoreSDK.init(this, "这里填写在百度ApiStore获取的apikey"); } }
APIStoreSDK封装了完整的异步网络请求和回调逻辑,回调要继承ApiCallBack类并改写其中的onSuccess()、onError()、onComplete()方法(如不需要,可不用都写)。onSuccess会在请求成功时调用,onError会在请求失败时调用,onComplete总是会调用。responseString是api接口返回的响应字符串,或者空(请求失败时)。(以上内容来自为百度ApiStoreSdk说明文档)
在MainActivity中调用的如下:
private void apiTest() { Parameters para = new Parameters(); //接口请求参数 para.put("num",10); //这里访问的是美女图片的接口地址 ApiStoreSDK.execute("http://apis.baidu.com/txapi/mvtp/meinv", ApiStoreSDK.GET, para, new ApiCallBack() { @Override public void onSuccess(int status, String responseString) { Log.i("API Store", "onSuccess"); //responseString为返回的Json数据 //将获取的Json数据解析并加载到自定义的ListView中,下面会有说明 new HttpJson(listView, adapter, handler, responseString).start(); } @Override public void onComplete() { Log.i("API Store", "onComplete"); } @Override public void onError(int status, String responseString, Exception e) { Log.i("API Store", "onError, status: " + status); Log.i("API Store", "errMsg: " + (e == null ? "" : e.getMessage())); Log.i("API Store",getStackTrace(e)); } }); } String getStackTrace(Throwable e) { if (e == null) { return ""; } StringBuilder str = new StringBuilder(); str.append(e.getMessage()).append("\n"); for (int i = 0; i < e.getStackTrace().length; i++) { str.append(e.getStackTrace()[i]).append("\n"); } return str.toString(); }
以上就完成了Json数据的获取,接下来需要解析Json数据,解析Json数据就是确定Json数据的格式,并从中获取需要的数据,可以在onSuccess方法中通过打印Log来查看Json数据,将其复制到网上在线格式化确定其格式,每种格式解析方式都大同小异,下面只针对本例返回值讲解,贴出responString中数据格式化后的结果(由于默认返回值为10,这里只截取3个用作演示):
{ "code": 200, "msg": "success", "newslist": [ { "ctime": "2016-03-06 14:11", "title": "巨乳杉原杏璃 Anri Sugihara 写真集 Gravure Idols & Misty C", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/06/m.xxxiao.com_d458e312c6ff6ca3126749ecd922dbf6-760x500.jpg", "url": "http://m.xxxiao.com/1644" }, { "ctime": "2016-03-06 14:11", "title": "韩国性感车模制服展场靓丽图片", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_8000d44d92b4ea5aba46b13bd938e0e48-760x500.jpg", "url": "http://m.xxxiao.com/892" }, { "ctime": "2016-03-06 14:11", "title": "[TGOD推女神] 性感少妇Aline艾琳私房写真", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_26da7f08a6170deda90a8bcd208618f9-760x500.jpg", "url": "http://m.xxxiao.com/249" }, { "ctime": "2016-03-06 14:11", "title": "充气娃娃王依萌制服诱惑性爱美女", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_b3149ecea4628efd23d2f86e5a72347218-760x500.jpg", 4000 "url": "http://m.xxxiao.com/775" }, { "ctime": "2016-03-06 14:11", "title": "咖啡馆邂逅忧伤的姑娘", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_6bb61e3b7bce0931da574d19d1d82c88-690x500.jpg", "url": "http://m.xxxiao.com/123" }, { "ctime": "2016-03-06 14:11", "title": "清新美眉爱上金鱼唯美写真", "description": "美女图片", "picUrl": "http://t1.27270.com/uploads/150725/8-150H5103439118.jpg", "url": "http://www.27270.com/ent/meinvtupian/2015/51488.html" }, { "ctime": "2016-03-06 14:11", "title": "短发美女激情劲爆性感艺术照", "description": "美女图片", "picUrl": "http://t1.27270.com/uploads/150725/8-150H5155Rb36.jpg", "url": "http://www.27270.com/ent/meinvtupian/2015/51899.html" }, { "ctime": "2016-03-06 14:11", "title": "美女旗袍红唇恋上香烟艺术照", "description": "美女图片", "picUrl": "http://t1.27270.com/uploads/150725/8-150H5153A5D6.jpg", "url": "http://www.27270.com/ent/meinvtupian/2015/51904.html" }, { "ctime": "2016-03-06 14:11", "title": "嫩模郭南汐变身清纯美女秘书", "description": "美女图片", "picUrl": "http://t1.27270.com/uploads/150727/8-150HFZ92R48.jpg", "url": "http://www.27270.com/ent/meinvtupian/2015/50564.html" }, { "ctime": "2016-03-06 14:11", "title": "火辣红妆爆乳车模张雅琦魅惑壁纸", "description": "美女图片", "picUrl": "http://m.xxxiao.com/wp-content/uploads/sites/3/2015/04/m.xxxiao.com_a8d2ec85eaf98407310b72eb73dda2474-760x500.jpg", "url": "http://m.xxxiao.com/419" } ] }
接下来就要解析出需要的数据,下面另起了HttpJson线程,在构造方法中传入了四个参数,并将parseJson方法返回的带有10个对象的pictureList添加到adapter中。
import android.os.Handler; import android.widget.ListView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; public class HttpJson extends Thread { private List<BeautifulGirlsPicture> pictureList = new ArrayList<>(); private ListView listView; private MyJsonAdapter adapter; private Handler handler; private String jsonData; /** * @param listView 用于显示数据的list * @param adapter 为listview自定义的适配器 * @param handler 更新UI * @param jsonData Json数据 */ public HttpJson(ListView listView, MyJsonAdapter adapter, Handler handler, String jsonData) { this.listView = listView; this.adapter = adapter; this.handler = handler; this.jsonData = jsonData; } @Override public void run() { pictureList = parseJson(jsonData); handler.post(new Runnable() { @Override public void run() { //数据适配器中添加数据 adapter.addData(pictureList); //ListView指定数据适配器 listView.setAdapter(adapter); } }); } /** * 获取Json数据中的List集合 */ private List<BeautifulGirlsPicture> parseJson(String jsonData) { try { //将数据转换为JSONObject JSONObject jsonObject = new JSONObject(jsonData); //通过JSONObject将JSONArray中的数组(newlist)解析出来 JSONArray jsonArray = jsonObject.getJSONArray("newslist"); for (int i = 0; i < jsonArray.length(); i++) { //再将jsonArray中每组中的数据(含有title,picUrl,url等)转换为jsonObject JSONObject jsonObject1 = jsonArray.getJSONObject(i); //实例化BeautifulGirlsPicture并利用jsonObject为其各变量赋值 BeautifulGirlsPicture bgPicture = new BeautifulGirlsPicture(); bgPicture.setTitle(jsonObject1.getString("title")); bgPicture.setDescription(jsonObject1.getString("description")); bgPicture.setPicUrl(jsonObject1.getString("picUrl")); bgPicture.setUrl(jsonObject1.getString("url")); pictureList.add(bgPicture); } return pictureList; } catch (JSONException e) { e.printStackTrace(); } return null; } }自定义Adapter
import android.content.Context; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import java.util.List; public class MyJsonAdapter extends BaseAdapter { private List<BeautifulGirlsPicture> list; private LayoutInflater inflator; private Handler handler = new Handler(); private Context context; public MyJsonAdapter(Context context) { this.context = context; inflator = LayoutInflater.from(context); } public void addData(List<BeautifulGirlsPicture> data) { this.list = data; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View convertView, ViewGroup viewGroup) { ViewHolder viewHolder; if (convertView == null) { convertView = inflator.inflate(R.layout.list_item, null); viewHolder = new ViewHolder(convertView); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } BeautifulGirlsPicture beautifulGirlsPicture = list.get(i); viewHolder.title.setText(beautifulGirlsPicture.getTitle()); viewHolder.description.setText(beautifulGirlsPicture.getDescription()); viewHolder.url.setText(beautifulGirlsPicture.getUrl()); new HttpImage(beautifulGirlsPicture.getPicUrl(), handler, viewHolder.imageView).start(); return convertView; } class ViewHolder { private ImageView imageView; private TextView title; private TextView description; private TextView url; public ViewHolder(View view) { title = (TextView) view.findViewById(R.id.id_tv_title); description = (TextView) view.findViewById(R.id.id_tv_des); imageView = (ImageView) view.findViewById(R.id.id_iv); url= (TextView) view.findViewById(R.id.id_tv_time); } } }
通过Url加载图片
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.widget.ImageView; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class LoadImage extends Thread { private ImageView imageView; private Handler handler; private String url; public LoadImage(String url, Handler handler, ImageView imageView) { this.url = url; this.handler = handler; this.imageView = imageView; } @Override public void run() { try { URL httpUrl = new URL(url); HttpURLConnection connection = (HttpURLConnection) httpUrl.openConnection(); connection.setReadTimeout(5000); connection.setRequestMethod("GET"); InputStream inputStream = connection.getInputStream(); final Bitmap bitmap = BitmapFactory.decodeStream(inputStream); handler.post(new Runnable() { @Override public void run() { imageView.setImageBitmap(bitmap); } }); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories