2013-03-23 4 views
0

Я знаю, что я могу использовать getFilesDir() в действии и имени файла для сохранения/чтения файла. Однако, когда я пытаюсь вызвать getFilesDir() из виджета, я получаю сообщение об ошибке. Я хотел бы иметь доступ к тому же текстовому файлу как из виджета, так и из действия.Как поделиться личным файлом между виджетами и активностью?

Каков самый простой способ достичь этого?

+1

Какая ошибка? –

+0

показать ur код, а также ur stack ... – duggu

ответ

1

Вы можете использовать AssetManager для этой цели. Вот краткий пример:

AssetManager assetManager = getAssets(); 
String[] files = assetManager.list("Files"); 
InputStream input = assetManager.open("helloworld.txt"); 
int size = input.available(); 
byte[] buffer = new byte[size]; 
input.read(buffer); 
input.close(); 
String text = new String(buffer); 

Обновление: К сожалению, забыл, что вы хотели это для использования в виджете. Вы можете попробовать этот код из this answer:

InputStream is = mContext.getAssets().open(someFile); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8")); 

Предупреждение: Не используйте этот код, как есть. Вы должны использовать правильный код, который улавливает ошибки и краевые случаи.

+0

Глупый мне! Я только что понял, что onUpdate получает Context ... Ваш ответ заставил меня понять, что, когда я подумал «хорошо, откуда мне взять mContext?» Благодаря!!! Сейчас работает отлично. – PawelP

2

Вы можете использовать getFilesDir() от любых Context Итак, вы можете сохранить \ прочитать файл с Application.

Edit:

Вы должны расширить класс от Application и использовать его контекст:

public class App extends Application{ 

    private static Context mContext; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mContext = this; 
    } 

    public static Context getContext(){ 
     return mContext; 
    } 
} 

Тогда в manifest вашем приложении, установите name свойство Application тега с именем этого класса , например:

android:name="App" 

Примечание: приложение является имя этого класса, которое расширяет Application.

Теперь вы можете использовать его контекст для этого сохранить \ следующим образом:

App.getContext().getFilesDir(); 
+0

Я просто попытался ... при использовании «Контекст context = getApplicationContext();», я получаю «... не определено для виджета типа». Что я упускаю? – PawelP

+0

@ PawełParadowski См. Мои правки. – hasanghaforian

Смежные вопросы