保存文件到手机内存

一 UI Code

<RelativeLayout 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"
    tools:context=".MainActivity" >

<TextView
        android:id="@+id/tv_weather"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
       />
</RelativeLayout>

二 Logical Code

<?xml version=‘1.0‘ encoding=‘utf-8‘ standalone=‘yes‘ ?>
<weather>
    <day id="1">
        <wendu>18</wendu>
        <wind>5</wind>
        <type>晴</type>
    </day>
    <day id="2">
        <wendu>16</wendu>
        <wind>3</wind>
        <type>雨</type>
    </day>
    <day id="3">
        <wendu>19</wendu>
        <wind>4</wind>
        <type>阴</type>
    </day>
</weather>

package com.itheima.weather.service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.util.Xml;

import com.itheima.weather.domain.Weather;

public class WeatherService {
    /**
     * 解析获取天气信息
     * 天气信息xml文件对应的流
     * @throws Exception
     */
    public static List<Weather> getWeather(InputStream is) throws Exception {
        // 解析 天气的xml文件.
        // 1.获取到一个xml文件的解析器.
        XmlPullParser parser = Xml.newPullParser();
        // 2.初始化解析器.
        parser.setInput(is, "utf-8");
        // 3.解析xml文件.
        // 得到当前解析条目的节点类型.
        int eventType = parser.getEventType(); // 第一次被调用的时候 定位在xml开头
        List<Weather> weatherInfos = null;
        Weather weatherInfo = null;
        while (eventType != XmlPullParser.END_DOCUMENT) {// 需要不停的让 解析器解析下一个节点
            switch (eventType) {
            case XmlPullParser.START_TAG:
                if ("weather".equals(parser.getName())) {
                    // 发现开始节点 为weather 创建集合
                    weatherInfos = new ArrayList<Weather>();
                } else if ("day".equals(parser.getName())) {
                    // 发现一个新的日期 对应的天气
                    weatherInfo = new Weather();
                    String id = parser.getAttributeValue(0);
                    weatherInfo.setId(Integer.parseInt(id));
                } else if ("wendu".equals(parser.getName())) {
                    String wendu = parser.nextText();
                    weatherInfo.setWendu(Integer.parseInt(wendu));
                } else if ("wind".equals(parser.getName())) {
                    String wind = parser.nextText();
                    weatherInfo.setWind(Integer.parseInt(wind));
                } else if ("type".equals(parser.getName())) {
                    String type = parser.nextText();
                    weatherInfo.setType(type);
                }
                break;
            case XmlPullParser.END_TAG:
                if ("day".equals(parser.getName())) {
                    weatherInfos.add(weatherInfo);
                    weatherInfo=null;
                }
                break;
            }
            eventType = parser.next();// 控制解析器 解析下一个节点
        }
        is.close();
        return weatherInfos;
    }
}

package com.itheima.weather.domain;

public class Weather {
    private int wendu;
    private int wind;
    private String type;
    private int id;
    public int getWendu() {
        return wendu;
    }
    public void setWendu(int wendu) {
        this.wendu = wendu;
    }
    public int getWind() {
        return wind;
    }
    public void setWind(int wind) {
        this.wind = wind;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "天气信息 [温度=" + wendu + ", 风力=" + wind + "级 , 天气状况=" + type
                + ", 未来第=" + id + "天]";
    }
}

package com.itheima.weather;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;

import com.itheima.weather.domain.Weather;
import com.itheima.weather.service.WeatherService;

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        TextView tv = (TextView) findViewById(R.id.tv_weather);
        try {
            StringBuilder sb = new StringBuilder();
            List<Weather> weatherinfos = WeatherService.getWeather(getClassLoader().getResourceAsStream("weather.xml"));
            for(Weather weather : weatherinfos){
                sb.append(weather.toString());
                sb.append("\n");
            }
            tv.setText(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "解析天气信息失败", 0).show();
        }
    }
}

时间: 2024-10-23 04:10:29

保存文件到手机内存的相关文章

(九)android 中数据存储与访问——保存文件到手机内存

9.1手机的存储区域 手机的存储区域通常有两个地方:一:手机内部存储空间,理解成一块微硬盘/data/data/:二:外部存储空间SD卡 9.2方法捕获异常的原则 如果方法有返回值,则用try catch捕获,如果方法的返回值是Void类型,则使用throws抛出异常 9.3 上下文Context Context:是一个类,提供一些方便的api 可以得到应用程序的环境,例如:环境的包名,安装路径,资源路径,资产的路径 9.4 保存文件到手机内存——登陆界面例子程序 9.4.1 项目需求 用户登陆

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

[android] 保存文件到手机内存

1. 界面的准备工作,普通登录界面,采用线性布局和相对布局. <Checkbox/>有个属性 android:checked=”true”,默认选中状态,相对布局里面<Button/>位于右边android:layout_alignParentRight=”true”,位于父控件的右面.密码框星号显示android:inputType=”textPassword” 2. 遇到device not found等错误可以直接忽略掉,布局文件属性里面绑定点击方法,传入的参数View对象代

下载保存文件到手机本地前, 优先选择位置的一个取巧方法

现在的手机内存动辄内置了8G, 16G, 甚至32G的存储空间, 其实已经够用了. 当然如果手机支持插外置内存卡, 比如手机再插入个32G的内存卡. 那手机容量就大大增加了. 应用在下载保存文件时, 比如像UC浏览器那种, 它会询问诱导用户设置一个默认的保存路径. 一般我们会优先将文件保存在外置内存卡中(如果有的话) , 若没有外置存储的内存卡, 才把这些文件图片什么的 放到内置存储的空间去, 这样才能最大限度的不浪费手机内置的存储空间. 于是, 我就有了以下的一个取巧方法, 思路大概是这样的

Android手机内存,SD卡读写

在手机上有两个存储位置 1 手机内部存储 2 SD卡 文件操作模式: 是否允许外部访问? 文件以覆盖/追加方式写? 手机内存读写 //保存文件到手机内存 public void save(String fileName,String content) throws IOException{ FileOutputStream fos = context.openFileOutput("a.txt", Context.MODE_PRIVATE); fos.write(content.get

Android学习笔记-获取手机内存,SD卡存储空间。

前面介绍到如何保存数据到手机内存或者SD卡,但是问题是,在保存以前,我们还需要对他们的空间(可用空间),进行判断,才可以进行后续操作,所以,本节我们就介绍如何获取手机内存以及Sd卡的空间. //这时获取手机内存的 // File path = Environment.getDataDirectory(); //这时获取SD卡的空间 File path = Environment.getExternalStorageDirectory(); StatFs stat = new StatFs(pat

刷新手机的内存,即重新读取手机内存,以便识别内存文件

最近遇到一个问题:把图片push到手机内存之后,galley app不能实时读取手机的内存,所以刚push的文件显示不出来,只能adb reboot手机才能重新读取手机内存,这样就能在app里边看到. 总会重启手机不是很好,而且影响测试速度,所以找了个刷新手机内存的办法,即push完图片之后,就执行 adb shell am broadcast -a android.intent.action.MEDIA_MOUNTED -d file:///mnt/shell/emulated/0 即可,就能

写数据到手机内存

当然是以文件形式写到手机内存,不过在模拟器上面运行会很慢 布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="ma

ICMAX教你如何延长手机内存寿命

手机内存的寿命是什么?通电时长?不!是擦写寿命,那擦写寿命换个概念就是频繁操作,如果手机某个软件要频繁读写,这时就要注意了,频繁读写很容易让内存损坏,从而产生坏道.首先问大家一个问题:你们平常使用最多的软件是什么?相信不少人的答案都是微信,毕竟微信是一款集社交.支付.娱乐为一体的软件,但一个微信所占手机内存有多少,请看下图,没个5G也该有个6G内存了,可以在[我]-[设置]-[通用]-[微信存储空间]查看.但你知道吗,微信被大家称为是"内存杀手",群里成千上万的消息.朋友圈的照片视频等