1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 利用百度APIStoreSDK获取Json数据并解析加载到ListView上

利用百度APIStoreSDK获取Json数据并解析加载到ListView上

时间:2020-12-11 00:01:17

相关推荐

利用百度APIStoreSDK获取Json数据并解析加载到ListView上

效果图(这里只是截取了List中的一项):

一、:登录百度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{@Overridepublic 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("/txapi/mvtp/meinv",ApiStoreSDK.GET,para,new ApiCallBack() {@Overridepublic void onSuccess(int status, String responseString) {Log.i("API Store", "onSuccess");//responseString为返回的Json数据//将获取的Json数据解析并加载到自定义的ListView中,下面会有说明new HttpJson(listView, adapter, handler, responseString).start();}@Overridepublic void onComplete() {Log.i("API Store", "onComplete");}@Overridepublic 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": "-03-06 14:11","title": "巨乳杉原杏璃 Anri Sugihara 写真集 Gravure Idols & Misty C","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//06/_d458e312c6ff6ca3126749ecd922dbf6-760x500.jpg","url": "/1644"},{"ctime": "-03-06 14:11","title": "韩国性感车模制服展场靓丽图片","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//04/_8000d44d92b4ea5aba46b13bd938e0e48-760x500.jpg","url": "/892"},{"ctime": "-03-06 14:11","title": "[TGOD推女神] 性感少妇Aline艾琳私房写真","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//04/_26da7f08a6170deda90a8bcd208618f9-760x500.jpg","url": "/249"},{"ctime": "-03-06 14:11","title": "充气娃娃王依萌制服诱惑性爱美女","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//04/_b3149ecea4628efd23d2f86e5a72347218-760x500.jpg","url": "/775"},{"ctime": "-03-06 14:11","title": "咖啡馆邂逅忧伤的姑娘","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//04/_6bb61e3b7bce0931da574d19d1d82c88-690x500.jpg","url": "/123"},{"ctime": "-03-06 14:11","title": "清新美眉爱上金鱼唯美写真","description": "美女图片","picUrl": "/uploads/150725/8-150H5103439118.jpg","url": "/ent/meinvtupian//51488.html"},{"ctime": "-03-06 14:11","title": "短发美女激情劲爆性感艺术照","description": "美女图片","picUrl": "/uploads/150725/8-150H5155Rb36.jpg","url": "/ent/meinvtupian//51899.html"},{"ctime": "-03-06 14:11","title": "美女旗袍红唇恋上香烟艺术照","description": "美女图片","picUrl": "/uploads/150725/8-150H5153A5D6.jpg","url": "/ent/meinvtupian//51904.html"},{"ctime": "-03-06 14:11","title": "嫩模郭南汐变身清纯美女秘书","description": "美女图片","picUrl": "/uploads/150727/8-150HFZ92R48.jpg","url": "/ent/meinvtupian//50564.html"},{"ctime": "-03-06 14:11","title": "火辣红妆爆乳车模张雅琦魅惑壁纸","description": "美女图片","picUrl": "/wp-content/uploads/sites/3//04/_a8d2ec85eaf98407310b72eb73dda2474-760x500.jpg","url": "/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;}@Overridepublic void run() {pictureList = parseJson(jsonData);handler.post(new Runnable() {@Overridepublic void run() {//数据适配器中添加数据adapter.addData(pictureList);//ListView指定数据适配器listView.setAdapter(adapter);}});}/*** 获取Json数据中的List集合*/private List<BeautifulGirlsPicture> parseJson(String jsonData) {try {//将数据转换为JSONObjectJSONObject jsonObject = new JSONObject(jsonData);//通过JSONObject将JSONArray中的数组(newlist)解析出来JSONArray jsonArray = jsonObject.getJSONArray("newslist");for (int i = 0; i < jsonArray.length(); i++) {//再将jsonArray中每组中的数据(含有title,picUrl,url等)转换为jsonObjectJSONObject 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;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int i) {return list.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic 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 .HttpURLConnection;import .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;}@Overridepublic 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() {@Overridepublic void run() {imageView.setImageBitmap(bitmap);}});} catch (IOException e) {e.printStackTrace();}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。