Каков контекст в этом вопросе? - PullRequest
0 голосов
/ 15 января 2019

Я изо всех сил пытаюсь найти значение "Context" при вызове этой функции, как

SetFile("Name", ???, 1, "Some text here")

Я посмотрел здесь https://developer.android.com/reference/android/content/Context, но, похоже, есть много возможностей, и мне не ясно, какую и как мне следует использовать. Понятия не имею, что заполнять в "???" место, кто-нибудь может мне помочь в этом?

public void SetFile(string BroadCastName, Context Context, long? DirectoryId, string BaseContent)
    {
        if (!BroadCastName.Contains(".enc"))
            BroadCastName = BroadCastName + ".enc";
        if (DirectoryId == null)
            DirectoryId = 2;
        var File = Directories.Where(x => x.Id == DirectoryId).FirstOrDefault().File;
        var Path = Directories.Where(x => x.Id == DirectoryId).FirstOrDefault().Path;
        File FilesDir = new File(Path, "SDDnode");
        FilesDir.Mkdir();
        if (bool.Equals(FilesDir.CanWrite(), true)) {
            File newFile = new File(FilesDir, BroadCastName);
            try
            {
                OutputStreamWriter outputStreamWriter = new OutputStreamWriter(Context.OpenFileOutput(BroadCastName, FileCreationMode.Private));
                outputStreamWriter.Write(BaseContent);
                outputStreamWriter.Flush();
                outputStreamWriter.Close();
            }
            catch (IOException e)
            {
                #region
                ledger._base.Errors.Add(new Error {
                    Message = "Something went wrong in generate file in Android",
                    Process = "sddnode_android.Base._system",
                    Sys_Message = e.Message,
                    Line = 115,
                    Priority = 1
                });
                #endregion
            }

            OutputStream os;
            try
            {
                os = new FileOutputStream(newFile);
                //target.compress(CompressFormat.PNG, 100, os);
                os.Flush();
                os.Close();
            }
            catch (FileNotFoundException e)
            {
                e.PrintStackTrace();
            }
            catch (IOException e)
            {
                e.PrintStackTrace();
            }
        }

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Для этого фрагмента кода действительно нет способа выяснить, откуда появился этот Контекст, поскольку мы не знаем, как он называется.

Но наиболее вероятной является контекст Activity, в зависимости от типа метода, хотя служба также вероятна.

Тем не менее, это действительно не имеет значения, поскольку в этом методе единственным контекстом является использование Context.OpenFileOutput(BroadCastName, FileCreationMode.Private), и это можно безопасно сделать с контекстом из любого места.

Edit:

Чтобы получить контекст, вы можете просто использовать ключевое слово this внутри Activity или Service.

Поэтому, где бы вы ни захотели запустить этот метод, вы просто вызываете SetFile("test", MainActivity.this, 2, ""); Замените MainActivity именем класса Activity или Service, в которой вы его используете.

Если вы используетев другом месте вне Activity или Service проверьте, есть ли у этого компонента метод getContext().

0 голосов
/ 15 января 2019

Вы можете получить контекст приложения, используя

var currentContext = Android.App.Application.Context;

и затем используйте его для передачи в setFile метод. Как,

SetFile("Name",currentContext, 1, "Some text here")
0 голосов
/ 15 января 2019

Вы можете использовать контекст действия, которое вызывает метод SetFile.

Вы можете получить хорошее объяснение класса контекста здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...