2014-07-01 56 views
1

首先,我是一個Android noob,我正在製作一個簡單的應用程序,它可以從EditText小部件中獲取文本,並在點擊按鈕時顯示在TextView中。但是當按鈕被點擊時,它強制關閉,我在logcat中得到一個NullPointerException當調用GetText()時出現NullPointerException

我的活動代碼:

package com.deltablue.freeearl.ama.ama; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 


public class MainActivity extends Activity { 

    private Button b1; 
    private EditText e1; 
    private TextView t1; 

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

     //Definiciones de los elementos 
     Button b1 = (Button) findViewById(R.id.bttn1); 
     EditText e1 = (EditText) findViewById(R.id.edit1); 
     TextView t1 = (TextView) findViewById(R.id.txt1); 
    } 

    public void b1click(View view) { 
     Toast.makeText(this, "Pressed", Toast.LENGTH_SHORT).show(); 
     String text = e1.getText().toString(); 
     t1.setText("Input: "); 
    } 
} 

的事情是,在調試時,該findViewById()調用返回正確的值。但是,b1click()執行時,e1 & t1爲空。我見過的所有其他類似問題都必須看到findViewById()返回null或錯誤的小部件ID,但這不是我的情況,AFAIK。我知道這可能是一些非常愚蠢的錯誤,但我不明白我錯在哪裏。

我的佈局:提前爲幫助

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    tools:context="com.deltablue.freeearl.ama.ama.MainActivity"> 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <EditText 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/edit1" /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Show text" 
      android:id="@+id/bttn1" 
      android:layout_gravity="center_horizontal" 
      android:onClick="b1click" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="Large Text" 
      android:id="@+id/txt1" 
      android:editable="true" /> 
    </LinearLayout> 
</RelativeLayout> 

謝謝!

+0

@Jens:我不認爲在這種情況下這是必要的--OP已經診斷出「e1'和't1'爲空的問題。問題是*爲什麼它們是空的,堆棧跟蹤對此沒有幫助。 –

回答

6

在這裏,onCreate

Button b1 = (Button) findViewById(R.id.bttn1); 
EditText e1 = (EditText) findViewById(R.id.edit1); 
TextView t1 = (TextView) findViewById(R.id.txt1); 

...你宣佈3個當地變量。這些都是從領域你早些時候宣佈完全獨立:

private Button b1; 
private EditText e1; 
private TextView t1; 

我敢肯定你只是想改變字段的值,而不是,所以你只要想新的值賦給變量,而不是重新聲明它們:

b1 = (Button) findViewById(R.id.bttn1); 
e1 = (EditText) findViewById(R.id.edit1); 
t1 = (TextView) findViewById(R.id.txt1); 
+0

Grrr,擊敗了我47秒。 +1和退... – Mena

+0

天哪,我知道這是一件非常愚蠢的事情。我很尷尬哈哈。謝謝,它已經解決了!我會盡快接受你的回答。 – CosmicFunkyPollo

相關問題