[Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)
最近在開發App,會使用到必須要處理一些App所使用的資料,上網路查一下Android 得作法,包含我自己也實作了一下,可能是因為對Java || Android 不是很孰悉,常常錯在 java.lang.illegalargumentexception 這上面,查一下Xamarin 論壇:http://forums.xamarin.com/discussion/333/how-to-save-a-string-on-internal-isolated-storage-with-mono-for-android 在建立檔案夾的時候也會出現,所以我看了一下,乾脆就依照Xamarin 的特性使用System.IO 下的方法來處理.. 介紹一下今天案例:
![]()
就是我將資料寫入至 internal storage 預設路徑下根的 note.txt 並且讀取出來,之後我也嘗試建立一個play檔案夾,並且寫檔note.txt之後讀取出來
// Internal Storage Methods.
/// <summary>
/// 將String寫入至Internal Storage
/// </summary>
/// <param name="filename"></param>
/// <param name="content"></param>
public void WriteAllText(string filename, string content)
{
//如果前面沒有 / 則補上
if (filename[0] != '/')
{
filename = "/" + filename;
}
//預設讀取 data/data/[package name]/files
if (filename.Contains("/"))
{
Directory.CreateDirectory(GetFileStreamPath("") + filename.Substring(0, filename.LastIndexOf('/')));
}
System.IO.File.WriteAllText(GetFileStreamPath("") + filename, content);
}
/// <summary>
/// 將文字讀取出來
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
public string ReadAllText(string filename)
{
try
{
if (filename[0] != '/')
{
filename = "/" + filename;
}
return System.IO.File.ReadAllText(GetFileStreamPath("") + filename);
}
catch (Exception ex)
{
throw;
}
}
這兩隻function,如果你傳入的路徑,是沒有檔案夾的,會自動幫忙建立 寫入/讀取 根 /data/data/[packagename]/files/ 的部分:
var btnSave = FindViewById<Button>(Resource.Id.btnSave);
btnSave.Click += delegate
{
WriteAllText("note.txt", "大家好我是當麻許!!" + DateTime.Now.ToString());
};
var btnRead = FindViewById<Button>(Resource.Id.btnRead);
btnRead.Click += delegate
{
try
{
var message = ReadAllText("note.txt");
Toast.MakeText(this, message, ToastLength.Short).Show();
}
catch (Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
};
結果 :![]()
用文件管理器檢視:
![]()
寫入至檔案夾中的:
var btnDirWrite = FindViewById<Button>(Resource.Id.btnDirWrite);
btnDirWrite.Click += delegate
{
try
{
WriteAllText(@"play/note.txt", "大家好我是檔案夾中的當麻許!!" + DateTime.Now.ToString());
}
catch (Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
};
var btnDirRead = FindViewById<Button>(Resource.Id.btnDirRead);
btnDirRead.Click += delegate
{
try
{
var res = ReadAllText(@"play/note.txt");
Toast.MakeText(this, res, ToastLength.Short).Show();
}
catch (Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Short).Show();
}
};
![]()
![]()
ps.請注意瞜,因為基本上只有APP 本身可以存取Internal Storage 的部分,所以我手機是因為root 過才能看到,至於傳統android 寫法中可以讓其他app存取的屬性MODE_WORLD_WRITEABLE , MODE_WORLD_READABLE 接下來android 官方建議 也是 Android provides a way for you to expose even your private data to other applications — with a content provider. A content provider is an optional component that exposes read/write access to your application data, subject to whatever restrictions you want to impose. For more information about using content providers, see the Content Providers documentation. 所以不建議用這種方式跟其他APP 開放資料溝通瞜..
參考資料: http://developer.android.com/guide/topics/data/data-storage.html http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_WRITEABLE
[Xamarin] 關於Internal Storage ,存取App內部使用資料 (转帖)的更多相关文章
- [Xamarin] 開啟另外一個Activity 並且帶資料 (转帖)
每隻App是透過許多畫面所組成的,當然可能主畫面之外,都會有許多其他的頁面 再Android 設計中畫面會有配合的Activity 當然在這之前,最好事先了解一下,Android 關於生命週期的規劃 ...
- [Xamarin] 關於發出Notification 的大小事 (转帖)
關於Anroid 的使用者來說,Notification 是一個非常會看到且用到的功能 他可以提醒使用者甚麼東西需要待處理,像是郵件或是會議的提醒等.. 甚至有些APP ,直接使用Notificati ...
- [Xamarin] 關於SQLite 的操作 (转帖)
我們聊一下常用的東西,SQLite,這東西很常用到,當再寫手機APP的時候,有時候會在Client 做 cache或是做一些資料的管理都很必須會用到,我們來看看今天的範例 建立SQL Lite 資料庫 ...
- [Xamarin] 透過WebClient跟網路取得資料 (转帖)
之前寫過一篇文章,關於在Android上面取得資料 透過GET方式傳資料給Server(含解決中文編碼問題) 我們來回顧一下 Android 端的Code: 有沒有超多,如果是在Xaramin下面,真 ...
- 開博客了, 因為搞Delphi 開發的關於Delphi學習
開博客了, 因為搞Delphi 開發的關於Delphi學習,之前都是用本地TXT文件保存,發現在本地電腦保存非常不方面,而且只能在一台電腦上保存,不容易查看和修改內容.便於以後的記錄只用,以及經驗交流 ...
- 關於Validform 控件 值得注意的地方
Validform控件其實用起來挺方便的,直接百度就能找到官網,有直接的demo做參考.這些我就不提了,我所要說的是關於Validform控件的ajax的提交. Validform中有個參數ajaxP ...
- 在laravel下關於blade模板的嘗試
Blade模板 關於模板繼承和分區段 @section和@yield的實驗 ①關於@section...@show嘗試 測試1 {{--appV2test.blade.php--}} <html ...
- Android 中 Internal Storage 和 External Storage 的区别
Android 存储:Internal Storage的用法以及与External storage 的区别 - 庄宏基的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net ...
- 用Xamarin和Visual Studio编写iOS App
一说开发 iOS app,你立马就会想到苹果的开发语言 Objective C/Swift 和 Xcode.但是,这并不是唯一的选择,我们完全可以使用别的语言和框架. 一种主流的替换方案是 Xamar ...
随机推荐
- 学习java第7天
关于继承还需要留意的是,子类中的所有构造方法都默认访问父类的无参构造,注意是无参,而且是必须的,如果父类没有无参子类就会报错.如果你不想给父类无参构造,那么在子类中加上super(),显式的调用有参构 ...
- SQL递归
递归一般出现在树形结构中 1:根据孩子节点查找所有父节点 With T As ( Select * From U_Companies TB Where CompanyID=80047 Union Al ...
- HTTP的GET/POST细节
HTTP的GET/POST方式有何区别?这是一个老生常谈的问题,但老生常谈的问题往往有一些让人误解的结论.本文将带您浅尝HTTP协议,在了 解HTTP协议的同时将会展示许多被人们忽视的内容.在掌握了H ...
- CADisplayLink以及和NSTimer的区别
什么是CADisplayLink CADisplayLink是一个能让我们以和屏幕刷新率相同的频率将内容画到屏幕上的定时器.我们在应用中创建一个新的 CADisplayLink 对象,把它添加到一个r ...
- python面向对象个人总结
基础概念:面向对象其实就是类与对象的使用. 类是模板,对象是实例.模板创建实例,实例去类里面去执行类的方法.类的例子: class Foo: def Bar(self): ...
- 信息安全系统设计基础课程实践:简单TUI游戏设计
简单TUI游戏设计 目 录 一 Curses库简介与基本开发方法 ...
- 构建ASP.NET网站十大必备工具(1)
最近使用ASP.NET为公司构建了一个简单的公共网站(该网站的地址:http://superexpert.com/).在这个过程中,我们使用了数量很多的免费工具,如果把构建ASP.NET网站的必备工具 ...
- [2015hdu多校联赛补题]hdu5297 Y sequence
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5297 题意:给你一个所有正整数的序列,然后去掉满足x^(2~r)的所有数(x为所有正整数,r>= ...
- Spring 通过FactoryBean配置Bean
1.实现FactoryBean接口 import org.springframework.beans.factory.FactoryBean; public class CarFactoryBean ...
- golang使用interface来mock进行测试(来自dotGO2014)
源自于dotGO 2014的视频,讲述如何使用 interface 来mock 进行测试.. 可以FQ的同学自己观看,这里把重要的一些代码给截图搬到国内了 https://www.youtube.co ...