在线汇率转换,用json解析数据,支持偏好设置。
来源:互联网 发布:数字矩阵切换器包含 编辑:程序博客网 时间:2024/06/05 14:35
默认启动Activity背景是一张图片,启动时后台加载汇率数据,加载成功后进入另一个与用户交互Activity
首先分析JsonParser代码
package com.example.zhaorunze.currencies;import android.util.Log;import org.json.JSONException;import org.json.JSONObject;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;/** * Created by zhaorunze on 2017/4/3. */public class JSONParser { // static InputStream sInputStream=null; private static JSONObject sReturnJsonObject=null; private static String sRwaJsonString=null; public JSONObject getsReturnJsonObject(String url) { StringBuilder sb = new StringBuilder(); try { URL urlObject = new URL(url); URLConnection uc = urlObject.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(uc.getInputStream(),"iso-8859-1")); String inputLine = null; while ((inputLine = in.readLine()) != null) { sb.append(inputLine); } in.close(); sRwaJsonString=sb.toString(); } //catch (MalformedURLException e) { // e.printStackTrace(); // } catch (IOException e) { e.printStackTrace(); } //read stream into string-builder try { sReturnJsonObject=new JSONObject(sRwaJsonString); }catch (JSONException e){ Log.e("Parser","Error when parsing data"+e.toString()); } return sReturnJsonObject; }}
1.从url中读取数据流存到BufferedReader。
2.从BufferedReader 中按行读取添加(每次从字符末尾开始添加)到StringBuilder 中 。
3.再把StringBuilder 转换成字符串sRwaJsonString。
4.最后用字符串作为参数,实例化JSONObject。
设置偏好,重启时自动打开上次保存的一组转换对象。
package com.example.zhaorunze.currencies;import android.content.Context;import android.content.SharedPreferences;import android.preference.PreferenceManager;/** * Created by zhaorunze on 2017/4/6. */public class PrefsMgr { private static SharedPreferences sShredPreferences; public static void setString(Context context,String locale,String code){ sShredPreferences= PreferenceManager.getDefaultSharedPreferences(context); SharedPreferences.Editor editor=sShredPreferences.edit(); editor.putString(locale,code); editor.commit(); } public static String getString(Context context,String locale){ sShredPreferences=PreferenceManager.getDefaultSharedPreferences(context); return sShredPreferences.getString(locale,null); }}
SharedPreferences是Android平台上一个轻量级的存储类,简单的说就是可以存储一些我们需要的变量信息。
2个activity 之间的数据传递除了可以他通过intent来传递,还可以使用SharedPreferences来共享数据的方式
SharedPreferences负责根据key读取数据,而SharedPreferences.Editor则用写入数据。
这个是默认启动Activity,后台异步线程加载数据。
package com.example.zhaorunze.currencies;import android.app.Activity;import android.content.Intent;import android.os.AsyncTask;import android.os.Bundle;import android.view.Window;import android.widget.Toast;import org.json.JSONException;import org.json.JSONObject;import java.util.ArrayList;import java.util.Iterator;public class SplashActivity extends Activity { public static final String URL_CODES = "http://openexchangerates.org/api/currencies.json"; public static final String KEY_ARRAYLIST = "key_arraylist"; private ArrayList<String> mCurrencies; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_splash); new FetchCodesTask().execute(URL_CODES); } private class FetchCodesTask extends AsyncTask<String, Void, JSONObject> { @Override protected JSONObject doInBackground(String... params) { return new JSONParser().getsReturnJsonObject(params[0]); } @Override protected void onPostExecute(JSONObject jsonObject) { //super.onPostExecute(jsonObject); try { if (jsonObject == null) { throw new JSONException("no data available."); } Iterator iterator=jsonObject.keys(); String key=""; mCurrencies=new ArrayList<String>(); while(iterator.hasNext()){ key=(String)iterator.next(); mCurrencies.add(key+"|"+jsonObject.getString(key)); } Intent mainIntent=new Intent(SplashActivity.this,MainActivity.class); mainIntent.putExtra(KEY_ARRAYLIST,mCurrencies); startActivity(mainIntent); finish(); }catch (JSONException e){ Toast.makeText( SplashActivity.this, "There is been a JSON exception:"+e.getMessage(), Toast.LENGTH_LONG ).show(); e.printStackTrace(); finish(); } } }}
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result) 相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回
SplashActivity执行异步任务,从URL_CODES中,用JsonParser解析数据,用Iterator遍历jsonObject.keys中的key(存储方式类似map),通过key获取value。把获取到的值按key|value形式存到Arraylist中,用intent传到UIActivity。
最后UIActivity中给calculate按钮设置监听,按钮被点击时,执行AsyncTask任务,获取那一时刻的数据,然后执行转换。
- 在线汇率转换,用json解析数据,支持偏好设置。
- 偏好设置保存数据
- iOS 数据存储-偏好设置
- 数据存储之偏好设置
- 一款在线的JSON数据解析器
- Java解析Excel表格(支持xls和xlsx格式),并转换为Json数据
- 汇率转换
- 自己写的一个在线汇率转换工具-MoneyDroid sources
- android_ SharedPreferences(偏好设置)保存数据
- 28.数据存储 plist 偏好设置 归档
- ios数据存储之偏好设置
- ios应用数据存储方式(偏好设置)
- Android中数据存储----偏好设置
- iOS数据持久化之偏好设置
- iOS数据持久化 偏好设置
- ios应用数据存储方式(偏好设置)
- iOS 数据存储方式(偏好设置)
- 数据序列化以及偏好设置
- iOS Cocoapods 第一次使用
- 动态代理解决表单提交的中文乱码问题
- 异常:java.lang.IllegalArgumentException
- 基于Java语言的安卓编程之二十六通信录读取(下)
- 无法安装Matlab
- 在线汇率转换,用json解析数据,支持偏好设置。
- C#面试题170420
- ubuntu 键盘布局修改
- C#修饰符
- 【IMWeb训练营作业】Select组件
- css中的四种定位以及top和margin-top的区别
- Java sdut ACM 2787 加密术
- CSV读取类,C++ STL实现
- 轮播图的打包