【问题标题】:textview keeps crashing while trying to setText尝试 setText 时 textview 不断崩溃
【发布时间】:2010-11-11 18:46:59
【问题描述】:

我正在尝试创建一个应用程序,当我单击第一个布局中的按钮时,它将从 EditText 中提取文本并将该值从第二个布局中放入 TextView 中。但是,似乎应用程序会因为 TextView 的 setText 而崩溃。

我没有放 logCat,因为它并不能说明太多。我相信错误来自 setText 部分。但是我不知道如何修复该部分,或者我的编码方式可能是错误的。希望有人能帮助我。提前致谢。

<TextView android:id="@+id/showtitle"
    android:layout_marginTop="1dip"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp"
    android:textStyle="bold" />

<TextView android:id="@+id/showtemplate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/showtitle"
    android:layout_alignLeft="@+id/showtitle"
    android:paddingBottom="4dip"
    android:includeFontPadding="false"
    android:textSize="15sp"
    android:textStyle="normal" />

下面是我的java代码:

导入android.os.Bundle; 导入android.view.View; 导入 android.widget.TextView; 导入 android.widget.EditText; 导入android.widget.Button; 导入android.widget.Toast;

import android.app.Activity;

public class AndroidGroupSMS extends Activity{

 private EditText title;
 private EditText template;
 private Button btnsave;
 private Button btnload;
 private TextView text,text2;

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

 title = (EditText) findViewById(R.id.title);
    template = (EditText) findViewById(R.id.template);
    btnsave = (Button) findViewById(R.id.save);
    btnload = (Button) findViewById(R.id.load);
    text = (TextView) findViewById(R.id.showtitle);
    text2 = (TextView) findViewById(R.id.showtemplate);

    btnsave.setOnClickListener(new View.OnClickListener() {

   public void onClick(View v) {
    // TODO Auto-generated method stub   
    String sTitle = title.getText().toString();
    String sTemplate = template.getText().toString();
    if(sTitle.length() > 0 && sTemplate.length() > 0)
    {
     //this is where i'm setting the text extracted from the edittext boxes
     text.setText(sTitle.toString());
     text2.setText(sTemplate.toString());
    }
    else
     Toast.makeText(getBaseContext(),"Please enter the title and template" + "", Toast.LENGTH_SHORT).show();     
   }
  });       
}

我不知道怎么读。 以下是我要求的 logCat: 11-12 04:32:51.652: 调试/AndroidRuntime(283): >>>>>>>>>>>>>> AndroidRuntime START >>>>>>>>>>>>> AndroidRuntime START

【问题讨论】:

  • @Joel Seah:您可以发布您的 logcat 消息,或者只是突出显示哪一行出现错误以及您在 logcat 中遇到了什么错误?
  • 这样的话,恐怕如果 logCat 没有告诉你太多,那是你没看清楚。
  • 我的疯狂猜测是,当你尝试使用它时,某处的某些东西是空的,logcat 会告诉你和我们更多:)
  • 至少,我们真的需要来自 logcat 的堆栈跟踪,如果可能的话,还需要相应的布局 XML 文件。
  • @Tilsan The Fighter:我发布了 logCat,但我不知道它为什么如此混乱。 @Blumer & psicho:我不知道如何阅读 logCat。 @Alexander Lucas:我尝试发布我的主要布局,但它只显示几行。我只能以如此清晰的方式发布我的第二个布局。

标签: android


【解决方案1】:

除了你在 String 对象上使用 toString() 的部分之外,一切看起来都很好,这不是必需的。

但是 texttext2 TextView 是否与 EditText 视图位于相同的 XML 布局中?在这种情况下main.xml?如果答案是否定的,那么当您尝试使用它们时就会出现 NullPointerException,因为 findViewById 找不到它们。

【讨论】:

  • 是的。 TextView 与 EditText 视图的布局不同。那我该怎么做才能解决这个问题呢?
  • 他们在不同的活动中吗?如果是这样,您应该将数据放入用于启动该活动的 Intent 中。可以使用 putExtra() 方法放置数据。第一个参数是数据的名称,第二个参数是实际数据。然后在 onCreate() 方法中的其他活动中,您应该使用 getIntent().getStringExtra() 方法来获取字符串数据。在参数中给出数据的前一个名称。
  • 嗯。我看到我看到了。但是你能举个例子吗?如果你这么说,我可以理解。但是我的知识仍然很差,无法生成那种代码。提前致谢。
  • 用于将数据从第一个活动传递到第二个 ^^。解决错误后忘记选择您的答案。那段时间很忙。
【解决方案2】:

你可以只做 text2.setText(template.getText().toString());

而不是 text2.setText(sTemplate.toString());

看看这是否有效。

【讨论】:

  • 是的,这是一个错误,但它绝对不是应用程序崩溃的原因,因为如果 toString() 方法没有被覆盖,任何对象上的 toString() 都会返回对象全名
【解决方案3】:

乔尔,

考虑到您在不同的 xml 文件中有编辑文本。您可能能够为 xml 文件中显示的内容创建另一个资源文件。例如,您可以创建一个 xml 文件,该文件将保存其他 xml 文件中显示的值。看看这个example (notepad)。该示例来自 android 开发网站。您可以将放置在“值”xml 中的值用作所有其他 xml 文件的值。这样,您就可以在一个中心位置让其他 xml 文件获取它们的值。这可能会解决您的问题。让我们知道您发现了什么结果。

您将需要打开 res 文件夹和 values 文件夹以查看我在查看示例时所说的内容。

【讨论】:

  • 我明白了。但是我从 main.xml 的 EditText 中提取的文本不是硬编码的。它将是用户键入的任何内容,然后将其放入第二个布局中的 TextView 中。感谢您提供的示例(记事本),虽然它看起来很复杂,但我相信它会很有用。谢谢^^
  • 没问题。如果您认为它有用,请随时投票! =)
  • 很有用。但很难理解。 prolink777,我可以向您发送有关该示例代码的问题并回答吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2012-08-13
  • 2021-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多