Я пытаюсь обновить текстовое представление из другого действия, и оно продолжает падать - PullRequest
0 голосов
/ 11 мая 2011

При нажатии кнопки я читаю некоторую информацию из файла, и мне нужно отобразить ее в текстовом представлении, этот код работает, пока я работаю с макетом, но если я нахожусь на другом экране, тот же код не 'не работает.

String sdcard = Environment.getExternalStorageDirectory().getAbsolutePath();
File file = new File(sdcard + "/Mult/","boardname.cfg");
//Read text from file
try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
   while ((line = br.readLine()) != null) {
       Global.defaultboard = line;
   }
   TextView defaultboard = (TextView) findViewById(R.id.currentboard);
   defaultboard.setText(Global.defaultboard);
}    
catch (IOException e) {
    //You'll need to add proper error handling here
}
 finish();

Кто-нибудь может увидеть, что не так?если я удаляю строки или комментирую строки текстового представления, он не падает.

Спасибо

MrC

OK

Мое решение - моезначение хранится в глобальной переменной, поэтому я использую onResume (), чтобы обновить текстовое представление.

public void onResume()
{
         super.onResume();
         TextView defaultboard = (TextView) findViewById(R.id.currentboard);
         defaultboard.setText(Global.defaultboard);
 }

MrC

Ответы [ 4 ]

1 голос
/ 11 мая 2011

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

Вам нужно взглянуть на «Начало деятельности и получение результатов»

1 голос
/ 11 мая 2011

Вы когда-нибудь задумывались об использовании SharedPreferences?

  1. Создайте строку для текста, который вы хотите отобразить в этом классе.

  2. Написатьэта строка для общих настроек с использованием putString ("ключ", значение).

  3. В действии, в котором необходимо обновить TextView, инициализируйте его чем-то, чтобы не получить исключение NullPointerException.Затем загрузите строку из вашей SharedPreferences и установите текст оттуда.

  4. Если вы хотите иметь возможность установить ее динамически, вы можете создать метод updateText () в действии, которое имеетTextView, чтобы изменить его, потому что, если действие все еще выполняется, оно не будет обновляться, так как onCreate () не вызывается.Обязательно проверьте, в каком состоянии он находится, потому что, если эта активность в данный момент не существует (была вызвана onDestroy ()), вы получите еще одно исключение.

Надеюсь, это поможет.Я обнаружил, что SharedPreferences являются ответом на многие мои проблемы.Если вам нужна помощь, просто дайте мне знать, и я постараюсь вам помочь.

1 голос
/ 11 мая 2011

вы можете обновлять представления интерфейса только при запуске в главном потоке.Если вы делаете вещи в другом потоке, используйте метод runOnUIThread действия, передавая немного Runnable, который выполняет фактическую работу.

0 голосов
/ 11 мая 2011

OK

Мое решение - мое значение хранится в глобальной переменной, поэтому я использую onresume, как это, чтобы обновить текстовое представление

public void onResume()
{
         super.onResume();
         TextView defaultboard = (TextView) findViewById(R.id.currentboard);
         defaultboard.setText(Global.defaultboard);
 }

Спасибо всем за ответы, мне нравитсянекоторые из этих идей и изучаю, как они работают!

...