2010-07-24 2 views
0

Моя программа содержит файл с именем «size.txt», который содержит только слово «15». Если пользователь выберет значение из счетчика, скажем 17, то выбранное значение должно быть сохранено в файле и заменить «15».Android: не удается записать в txt-файл

Я добавил разрешение программы

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 

Но почему-то я не могу сделать выбранное значение записывается в файл. Вот мой код

try { 
    FileOutputStream fos = openFileOutput("size", Context.MODE_PRIVATE); 
    OutputStreamWriter osw = new OutputStreamWriter(fos); 
    osw.write("17"); 
    osw.flush(); 
    osw.close(); 
} catch (java.io.IOException e) { 
//do something if an IOException occurs. 
} 

Может кто-нибудь мне помочь? Большое спасибо!

ответ

2

Возможно, вам стоит прочитать это, прежде чем искать способ исправить свой код.

Согласно Shared Preferences | Android Developer Tutorial (Part 13) Саи Гита M N,

Многие приложения могут обеспечить способ для захвата пользовательских предпочтений о настройках конкретного приложения или деятельности. Для поддержки Android предлагает простой набор API.

Предпочтения - это, как правило, пары значений. Они могут храниться как «Общие предпочтения» в различных действиях в приложении (примечание в настоящее время нельзя использовать совместно для процессов). Или это может быть что-то, что необходимо сохранить для конкретной деятельности.

  1. Общие предпочтения: Общие предпочтения могут быть использованы всеми компонентами (виды деятельности, услуг и т.д.) от приложений.

  2. Действия, связанные с обработкой: Эти настройки могут использоваться только в действии и не могут использоваться другими компонентами приложения.

Общие предпочтения:

Общие настройки управляются с помощью getSharedPreferences метода в Context класса. Настройки сохраняются в файле по умолчанию (1) или вы можете указать имя файла (2), которое будет использоваться для ссылки на настройки.

(1) Вот как вы получите экземпляр при указании имени файла

public static final String PREF_FILE_NAME = "PrefFile"; 
    SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE); 

MODE_PRIVATE является режим работы для предпочтений. Это режим по умолчанию и означает, что к созданному файлу будет обращаться только вызывающее приложение. Поддерживаются два других режима: MODE_WORLD_READABLE и MODE_WORLD_WRITEABLE. В MODE_WORLD_READABLE другое приложение может читать созданный файл, но не может его изменить. В случае MODE_WORLD_WRITEABLE другие приложения также имеют права на запись для созданного файла.

(2) Рекомендуемый способ заключается в использовании в режиме по умолчанию, без указания имени файла

SharedPreferences preferences = PreferencesManager.getDefaultSharedPreferences(context); 

Наконец, когда у вас есть экземпляр предпочтения, вот как вы можете получить хранимый значения от предпочтений:

int storedPreference = preferences.getInt("storedInt", 0); 

Для магазин значения в файле настроекДолжен использоваться объект. Editor - это вложенный интерфейс класса SharedPreference.

SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

методы Редактор также поддерживают как remove() и clear() удалить значение предпочтения из файла.

Активность Предпочтения:

Общие предпочтения могут быть использованы другими компонентами приложения. Но если вам не нужно делиться предпочтениями с другими компонентами и вы хотите, чтобы у вас были личные предпочтения. Вы можете сделать это с помощью метода активности getPreferences(). Метод getPreference использует метод getSharedPreferences() с именем класса активности для имени файла предпочтения.

Ниже приводится код, чтобы получить преференции

SharedPreferences preferences = getPreferences(MODE_PRIVATE); 
int storedPreference = preferences.getInt("storedInt", 0); 

Код для хранения значений также же, как и в случае общих предпочтений.

SharedPreferences preferences = getPreference(MODE_PRIVATE); 
SharedPreferences.Editor editor = preferences.edit(); 
editor.putInt("storedInt", storedPreference); // value to store 
editor.commit(); 

Вы также можете использовать другие методы, такие как сохранение состояния активности в базе данных. Примечание. Android также содержит пакет под названием android.preference. Пакет определяет классы для реализации пользовательского интерфейса приложений.

Чтобы увидеть еще несколько примеров, отметьте сообщение Android Data Storage на сайте разработчиков.

+2

Вместо того, чтобы копировать и вставлять ответ из другого вопроса, вы действительно должны просто ссылаться на него. Я думаю, это одно: http://stackoverflow.com/questions/3317812/can-i-perform-database-specific-operation-using-android-preference-package ... который снова кажется copy-n- вставленный из этой статьи: http://saigeethamn.blogspot.com/2009/10/shared-preferences-android-developer.html –

+0

(1) Когда вопросы не связаны друг с другом, я не вижу, почему я ссылку на них. Пользователь просто путается, когда проверяет связанную область в правой колонке сайта. (2) По моему опыту подробный ответ более ценен, чем связь с сайтом, который иногда никогда не читается (3). Ответ с помощью ссылки на контент может не оцениваться так же, как если бы кто-то другой отправлял более ответный ответ. Просто запустите статистику на SO-сайте и посмотрите, сколько ответов принято, у которых есть ссылка на текстовые ответы. Позднее побеждает. – Pentium10

+1

Это действительно хороший ответ! Я не просто решил свою проблему, но также узнал, как работают предпочтения и как эффективно хранить очень малые объемы данных. Большое спасибо! – TianDong

0
*package com.example; 

import java.io.ByteArrayOutputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 
import android.app.Activity; 
import android.content.res.AssetManager; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.TextView; 

public class GetFromURLActivity extends Activity 
{ 
    TextView txtContent; 
    String path; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     try { 
      //this is the file you want to download from the remote server 

      /*path ="http://localhost:82/TextureTest01.apk";*/ 
      path ="http://10.0.2.2:82/my.txt"; 
      //this is the name of the local file you will create 

      /*String targetFileName = "mynew"; // Omit extension. 
      boolean eof = false;*/ 
      URL u = new URL(path); 

      HttpURLConnection c = (HttpURLConnection) u.openConnection(); 

      c.setRequestMethod("GET"); 
      c.setDoOutput(true); 
      c.connect(); 

      InputStream in = c.getInputStream(); 


      Log.e("value",in.toString()); 

      //Gets the instance of the asset manager 
      AssetManager mngr=getAssets(); 

      //Resources resources = new Resources(); 
      //resources.getAssets().open("my.txt"); 
      //FileOutputStream f = new FileOutputStream(new File("c:\\" + targetFileName)); 

      /*FileOutputStream f = this.openFileOutput(targetFileName, 
        this.MODE_WORLD_READABLE);*/ 

      ByteArrayOutputStream bo = new ByteArrayOutputStream(); 

      byte[] buffer = new byte[1024]; 
      in.read(buffer); // Read from Buffer. 
      bo.write(buffer); // Write Into Buffer. 

      /*int len1 = 0; 
      while ((len1 = in.read(buffer)) != -1) 
      { 
       //f.write(buffer,0, len1); 
       bo.write(buffer,0, len1); // Write Into Buffer. 
      }*/ 
      txtContent =(TextView)findViewById(R.id.textview); 
      txtContent.setText(bo.toString()); 
      bo.close(); 
      //f.close(); 

     } 
     catch (MalformedURLException e) { 
      e.printStackTrace(); 
      //txtContent.setText(e.getMessage().toString()); 
     } catch (ProtocolException e) { 
      e.printStackTrace(); 
      //txtContent.setText(e.getMessage().toString()); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      //txtContent.setText(e.getMessage().toString()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      //txtContent.setText(e.getMessage().toString()); 
     } 
    } 
    String ReadFile(InputStream is) 
    { 
     ByteArrayOutputStream bo=new ByteArrayOutputStream(); 

     byte [] buffer=new byte[1024]; 

     try { 
      is.read(buffer); 
      bo.write(buffer); 

      bo.close(); 
      is.close(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return bo.toString(); 
    } 
} 
// My Email Id is [email protected]* 
Смежные вопросы