質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

解決済

1回答

4934閲覧

Xamarin.androidでAssets配下に置いたテキストファイルを読み込めない

researcher

総合スコア87

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/05/14 02:58

現在、公式リファレンスの
https://docs.microsoft.com/ja-jp/xamarin/xamarin-forms/user-interface/webview?tabs=macos
を参考に、WebView表示に必要なテキストファイルの読み込みをandroidで実装しようとしている者です
iOS版では、NSBundle.MainBundle.BundlePathによってiOS固有のフォルダにアクセスすることができたのですが、それをandroid版で再現できない状態にあります
下記がコードになります。

BaseUrl

1[assembly: Dependency (typeof(BaseUrl))] 2namespace MyApp.Droid 3{ 4 public class BaseUrl : IBaseUrl 5 { 6 public string Get() 7 { 8 return "file:///android_asset/"; 9 } 10 } 11}
var assetURL = DependencyService.Get<IBaseUrl>().Get(); File.ReadAllText(Path.Combine(assetURL,"test.txt"));

上記の呼び出し側で、ファイルを読み込めないというような状態です
iOS側ではBaseUrlにreturn NSBundle.MainBundle.BundlePath;を書くことで、呼び出し側でファイルを読み込むことができました。しかしandroid版では読み込みに失敗してしまいます。

その原因に心当たりのある方がおられましたら、ご教授をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Fileだと読み込めないと思います。なので、パスを返すのではなくて、以下のようにファイルの内容自体を取得するようにしてはどうでしょうか?

C#

1using (var reader = new StreamReader(Application.Context.Assets.Open("test.txt"))) 2{ 3 return reader.ReadToEnd(); 4}

また、Xamarin.EssentialsのFileSystem.OpenAppPackageFileAsyncを使うのでもいいかもしれません。

Xamarin.Essentials: ファイル システム ヘルパー - Xamarin | Microsoft Docs

投稿2019/05/14 05:21

編集2019/05/14 05:22
f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

researcher

2019/05/14 06:15 編集

回答ありがとうございます! 質問なのですが、なぜFileでは読み込めないのでしょうか?
f-miyu

2019/05/14 06:19

Fileが、file:///android_asset/で、Assetsディレクトリを指してくれるようになっていないからだと思います。
researcher

2019/05/14 06:29

なるほど、ようやく理解できました。Directory.Exists()で調べてみましたが、ご指摘の通りfile:///android_asset/は存在しないのですね。 疑問なのですが、Assetsディレクトリへのパスを取得する方法はそもそも存在するのでしょうか?
f-miyu

2019/05/14 06:53

apkファイルの中にあるので、インストールされているapkファイルのパスを取得すれば可能かもしれませんが、そこまで無理して取得する必要はないと思います。
researcher

2019/05/14 07:02

そうなんですね。では、教えていただいたファイルの内容自体を取得して返す方向で進めることにします。 最後に質問なのですが、公式ページにあった"file:///android_asset/"とは何をさすものなのでしょう? ただのサンプルで、意味のないパスなのでしょうか?
f-miyu

2019/05/14 07:07

WebViewで読み込む場合には使用できるパスです。
researcher

2019/05/14 07:13

ようやく理解できました。WebViewのページに書いてあることを使い回そうとしたこと自体が誤りだったのですね。 丁寧に対応して頂いて、本当に救われました! f-miyuさん、この度も本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問