JSON数据的解析
2015-09-15 20:35
591 查看
JSON数据的解析
步骤:
1 设置网络权限
2 搭建布局文件,显示解析后的数据
3 声明控件,加载布局,找到id,创建进度框
4 创建异步加载类,模拟下载
5 获取网络权限
6 开始解析
源代码:
1 添加网络权限
3 声明控件,加载布局,找到id,创建进度框
4 创建异步加载类,模拟下载
5 获取网络权限
6 开始解析
步骤:
1 设置网络权限
2 搭建布局文件,显示解析后的数据
3 声明控件,加载布局,找到id,创建进度框
4 创建异步加载类,模拟下载
5 获取网络权限
6 开始解析
源代码:
1 添加网络权限
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android_parserjson" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <!-- 添加网络权限 --> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.android_parserjson.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>2 搭建布局文件,显示解析后的数据
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Spinner android:id="@+id/Spinner" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
3 声明控件,加载布局,找到id,创建进度框
package com.example.android_parserjson; import android.os.Bundle; import android.app.Activity; import android.app.ProgressDialog; import android.view.Menu; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends Activity { /* * 解析JSON数据 步骤:1 获取网络权限 2 搭建布局文件 3 声明控件,找到id 4 进度提示框 5 创建异步任务,模拟下载 */ private Spinner spinner;// 声明显示json数据的控件 private ProgressDialog dialog;// 声明进度提示框控件 // 解析数据的地址 private static final String jsonPath = "http://sns.maimaicha.com/api?apikey=b4f4ee31a8b9acc866ef2afb754c33e6&format=json&method=news.getHeadlines&page=0&rows=15"; private MyAsyncTask myAsyncTask;// 声明异步任务对象 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);// 加载布局文件到逻辑代码中 spinner = (Spinner) findViewById(R.id.Spinner);// 找到控件id dialog = new ProgressDialog(MainActivity.this);// 实例化进度对话框 new MyAsyncTask(dialog, MainActivity.this, spinner).execute(jsonPath); } }
4 创建异步加载类,模拟下载
package com.example.android_parserjson; import java.util.List; import android.R.integer; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; /** * 异步加载步骤 1 创建一个类继承AsyncTask 2 * 实现AsyncTask的onPreExecute,doInBackground,onPostExecute方法 * */ // 参数Params:下载的数据的地址的类型 // 参数Progress:进度,无进度显示就下Void // 参数Result:得到解析后的数据的类型 public class MyAsyncTask extends AsyncTask<String, Void, List<String>> { private ProgressDialog dialog; private Context context; private Spinner spinner; public MyAsyncTask(ProgressDialog dialog, Context context, Spinner spinner) { super(); this.dialog = dialog; this.context = context; this.spinner = spinner; } // 首次调用的方法,工作在主线程,完成一些基本操作 @Override protected void onPreExecute() { dialog = new ProgressDialog(context);// 初始化dialog dialog.setTitle("下载JSON数据");// 标题 dialog.setMessage("正在下载.....");// 内容 dialog.setIcon(R.drawable.ic_launcher);// 图标 dialog.show();// 显示进度框 super.onPreExecute(); } // 在后台进行耗时下载等耗时操作,工作在子线程 @Override protected List<String> doInBackground(String... arg0) { String jsonPath = arg0[0];// JSON数据的地址 String jsonString = HttpInternet.httpInternet(jsonPath);// 获取网络请求 List<String> list = ParserJson.parserIson(jsonString);//开始解析数据 return list; } // 接收doInBackground返回的数据 @Override protected void onPostExecute(List<String> result) { super.onPostExecute(result); ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, result); spinner.setAdapter(adapter); dialog.dismiss(); } }
5 获取网络权限
package com.example.android_parserjson; import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import org.apache.http.HttpConnection; /** * 获取网络请求 * 首先传入JSON数据的地址 */ public class HttpInternet { public static String httpInternet(String jsonPath){ ByteArrayOutputStream out=new ByteArrayOutputStream();//输出流,接收数据 String path=""; URL url; try { url=new URL(jsonPath); HttpURLConnection connection = (HttpURLConnection) url.openConnection();//打开连接 connection.setConnectTimeout(5000); connection.setDoInput(true); connection.connect(); InputStream in = connection.getInputStream(); byte[] buffer=new byte[1024]; int temp=0; while((temp=in.read(buffer))!=-1){ out.write(buffer, 0, temp); out.flush(); } return out.toString(); } catch (Exception e) { e.printStackTrace(); } return jsonPath; } }
6 开始解析
package com.example.android_parserjson; import java.util.ArrayList; import java.util.List; import org.json.JSONArray; import org.json.JSONObject; /* * 开始解析数据 */ public class ParserJson { public static List<String> parserIson(String jsonString) { List<String> list = new ArrayList<String>();// 存放解析后的数据 try { JSONObject object1 = new JSONObject(jsonString);// {}表示对象 JSONArray array1 = object1.getJSONArray("data");// []表示数组 for (int i = 0; i < array1.length(); i++) {// 循环解析数组里多个对象 JSONObject object2 = array1.getJSONObject(i); String name = object2.getString("title");// 得到内容 list.add(name); } } catch (Exception e) { } return list; } }
相关文章推荐
- servlet&jsp的设计模式
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
- 浅谈JS闭包
- jsp中session的生命周期
- jsp的4个作用域
- javascript中的function
- jsp的九大内置对象
- javascript判断非空
- JSP之Session生命周期
- Js按键调到文本框
- JSP的四大作用域
- 自己的JS框架--Amy框架。
- js中的各种“位置”——“top、clientTop、scrollTop、offsetTop……”,你知道多少
- JS身份证验证
- javascript函数科里化
- JS模块加载
- 页面Loading js插件
- 火星坐标和百度地图坐标相互转换(js实现)
- 绑定事件、阻止默认事件、阻止冒泡
- JavaScript 之arguments、caller 和 callee 介绍