我正在尝试从不同的活动更新textview,它一直在崩溃

时间:2011-05-10 20:35:39

标签: android button crash textview

在按钮上单击我正在从文件中读取一些信息,我需要在textview中显示它,这段代码可以在我使用布局的活动中工作,但如果我在不同的屏幕中,则相同的代码不会工作。

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();

有谁能看到什么错?如果我删除了行或者注释了textview的行,它就不会崩溃。

由于

MRC

我的解决方案是 - 我的值存储在一个全局变量中,所以我使用像这样的onResume()来刷新textview。

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

MRC

4 个答案:

答案 0 :(得分:1)

您只能在主线程中运行时更新UI视图。如果你在不同的线程中执行操作,请使用活动的runOnUIThread方法传递一些执行实际工作的Runnable。

答案 1 :(得分:1)

嗯,每个活动都有自己的布局,因此您无法直接通过不同的活动更新项目。

您需要查看"Starting Activities and Getting Results"

答案 2 :(得分:1)

你有没有想过使用SharedPreferences?

  1. 为要在此课程中显示的文字创建一个字符串。

  2. 使用putString(“key”,value)将此字符串写入共享首选项。

  3. 在具有需要更新的TextView的活动中,将其初始化为无法获得NullPointerException的内容。然后从SharedPreferences加载字符串并从那里设置文本。

  4. 如果您希望能够动态设置它,可以在具有TextView的活动中创建updateText()方法来更改它,因为如果活动仍在运行,它将不会更新为onCreate ()未被调用。请务必检查它所处的状态,因为如果该活动当前不存在(已调用onDestroy()),您将获得另一个例外。

  5. 希望这会有所帮助。我发现SharedPreferences是我很多问题的答案。如果您需要帮助,请告诉我,我会尽力帮助您。

答案 3 :(得分:0)

我的解决方案是 - 我的值存储在一个全局变量中,所以我使用像这样的onresume来刷新textview

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

感谢大家的回答,我喜欢其中的一些想法,并且正在研究它们的工作原理!