2013-08-05 3 views
1

Я пытаюсь прочитать список упражнений из файла Exercises.txt в моей папке /assests, и я нашел множество примеров, но я продолжаю получать ошибку «контекст не может быть разрешен». и если мне удастся исправить, то я получаю «конструктор по умолчанию не может обрабатывать тип исключения IOException брошенный неявной супер конструктор должен определить явный конструктор.»Android - прочитать файл

Вот мой код:

class ChooseExercises extends ListActivity{ 

    String[] exercises; 

    AssetManager am = context.getAssets(); //Error 1 
    InputStream inputStream = am.open("test.txt"); //Error 2 
    InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.choose_exercises); 
    } 

} 

Благодарю вас всех для оказания помощи.

ответ

4

Поскольку ничего не названо context, вы не можете ссылаться на него из инициализатора элемента данных.

Итак, начнем, перемещая элементы данных AssetManager и последующие в onCreate() как локальные переменные, и заменить context.getAssets() только с getAssets(), и вы будете в лучшей форме.

class ChooseExercises extends ListActivity{ 
    String[] exercises; 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     // TODO Auto-generated method stub 
     super.onListItemClick(l, v, position, id); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.choose_exercises); 

     AssetManager am = context.getAssets(); //Error 1 
     InputStream inputStream = am.open("test.txt"); //Error 2 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

     // TODO: actually use this stuff 
    } 
} 

Позже, по мере того как вам станет более комфортно работать с Java и Android, переместите этот диск ввода-вывода в фоновый поток.

+0

Какой метод вы рекомендуете для чтения данных из веб-сервиса? Я купил вам книгу, и в ней вы обычно читаете ответ последовательно. Я не знал, есть ли форум для вашей книги, поэтому я задал вопрос здесь в stackoverflow http://goo.gl/9MdzpL – eddy

0

Я думаю, вы забыли использовать конструкцию try-catch.

Запись:

try{ 
      FileOutputStream fos = getBaseContext().openFileOutput("fileName", Context.MODE_PRIVATE); 
      ObjectOutputStream os = new ObjectOutputStream(fos); 
      os.writeObject("content"); 
      os.close(); 
     }catch(Exception ex){ 
      //do stuff if something goes wrong. 
     }finally{ 
      //do stuff in the end. 
     } 

Reading:

try{ 
     FileInputStream fis = getBaseContext().openFileInput("filename"); 
     ObjectInputStream is = new ObjectInputStream(fis); 
     Object s = (Object) is.readObject(); // Object must be String if you want to read a string. 
     is.close(); 
    }catch(Exception ex){ 
     //do stuff if something goes wrong. 
    }finally{ 
     //do stuff in the end. 
    } 
+0

am.open ("test.txt"); требует попыток –

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