JSON数据的解析

JSON数据的解析

步骤:

 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;

	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值