我正在嘗試將資料本地保存到我的設備應用程式檔案夾中。
當我嘗試將收集的資料保存在實際的 Android 智能手機上時,它不起作用。它受名稱和檔案型別的限制,因為我無法更改它,test.txt并且字串長度受到限制,因為最多可以保存十二個字符。
我已獲得以下權限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
這是我的代碼:
MainPage.xaml.cs
private async void ExportData(object sender, EventArgs e)
{
var items = await App.Database.GetDataAsync();
DependencyService.Get<IFileService>().CreateFile(items);
}
界面
using System;
using System.Collections.Generic;
using System.Text;
namespace LocationApp.Interface
{
public interface IFileService
{
void CreateFile(List<LocationData> items);
}
}
服務
using Android.App;
using LocationApp.Droid;
using LocationApp.Interface;
using System.Collections.Generic;
using System.IO;
[assembly:Xamarin.Forms.Dependency(typeof(FileService))]
namespace LocationApp.Droid
{
public class FileService : IFileService
{
public string GetRootPath()
{
return Application.Context.GetExternalFilesDir(null).ToString();
}
public void CreateFile(List<LocationData> items)
{
var fileName = "test-file.txt";
var destination = Path.Combine(GetRootPath(), fileName);
string[] text = new string[items.Count];
for (int i = 0; i < text.Length; i )
{
text[i] = $"{items[i].Latitude},{items[i].Longitude},{items[i].Day},{items[i].Time}";
}
File.WriteAllLines(destination, text);
}
}
}
我還試圖看看模擬器會發生什么,我使用了帶有 Android 9.0、API 28 的 Pixel 2,但出現以下錯誤:
[ContextImpl] Failed to ensure /storage/120E-0B1B/Android/data/com.companyname.locationapp/files: java.lang.IllegalStateException: Failed to prepare /storage/120E-0B1B/Android/data/com.companyname.locationapp/files/: android.os.ServiceSpecificException: (code -13)
最后,我只關心將所有資料放在一個檔案中。我提供的模擬器上的檔案名或錯誤,以防錯誤基于此。如果不是,我不在乎它們是否固定/可修復。
uj5u.com熱心網友回復:
根據您的代碼,我創建了一個簡單的演示,它適用于我的 android emulator(android 11) 。
你可以在你身邊測驗。
代碼是:
public void CreateFile(List<LocationData> items)
{
var fileName = "test-file.txt";
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var destination = Path.Combine(documentsPath, fileName);
string[] text = new string[items.Count];
for (int i = 0; i < text.Length; i )
{
text[i] = $"{items[i].Latitude},{items[i].Longitude}";
}
File.WriteAllLines(destination, text);
}
在我保存資料后,我可以通過以下代碼獲取保存的資料(檔案名是test-file.txt):
public string ReadData(string filename)
{
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var filePath = Path.Combine(documentsPath, filename);
return File.ReadAllText(filePath);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446348.html
標籤:C# 安卓 文件 xamarin xamarin.forms
上一篇:滾動上的移動影像
下一篇:影像未顯示在php上
