2014-07-26 122 views
0

我需要從我的EditText中獲取數據,該數據位於對話框中。
當我嘗試訪問它時,我發現了NullPointerException。Android EditText空指針異常

這裏是我的代碼:

public class MainActivity extends Activity { 

    int imgW ; 
    int imgH ; 

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

    public void OnToolButtonClick(View button) 
    { 
     switch (button.getId()) 
     { 
     case R.id.btn1: 

      final Dialog commentDialog = new Dialog(this); 
      commentDialog.setContentView(R.layout.reply); 
      Button okBtn = (Button) commentDialog.findViewById(R.id.ok); 

      okBtn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        final EditText  w= (EditText)findViewById(R.id.dialogW); 
        final EditText  h= (EditText) findViewById(R.id.dialogH); 

        try { 
         imgW = Integer.parseInt(w.getText().toString()); 
         imgH = Integer.parseInt(h.getText().toString()); 

        } 
        catch (NumberFormatException e) { 
         imgH=0; 
         imgW=0; 
        } 

        Log.i("Size" , " w "+ imgW + " h " + imgH); 
        // drawing_panel_params 

        commentDialog.dismiss(); 
       } 
      }); 
      Button cancelBtn = (Button) commentDialog.findViewById(R.id.cancel); 
      cancelBtn.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 

        commentDialog.dismiss(); 
       } 
      }); 

      commentDialog.show(); 

      break; 
     } 
    } 
} 
} 

主要佈局

<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:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.edittext.MainActivity$PlaceholderFragment" > 

    <Button 
     android:id="@+id/btn1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:clickable="true" 
     android:onClick="OnToolButtonClick" 
     android:text="@string/Start_dialog" /> 

</RelativeLayout> 

佈局對話框

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <EditText 
     android:id="@+id/dialogW" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:hint="@string/Wight" 
     android:lines="3" 
     android:textColor="#000000" /> 

    <EditText 
     android:id="@+id/dialogH" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:hint="@string/Height" 
     android:lines="3" 
     android:textColor="#000000" /> 

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

     <Button 
      android:id="@+id/ok" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@android:string/ok" /> 

     <Button 
      android:id="@+id/cancel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@android:string/cancel" /> 
    </LinearLayout> 

</LinearLayout> 

我想知道爲什麼會出現這種情況..? ?

+0

請發佈您的錯誤消息以及 – Nabin

+4

當您在此處發佈您的代碼時...請確保格式正確.... f您不要' t想要手動讓你的日食做到這一點...選擇整個代碼並按下「CTRL + I」,然後在這裏發佈... –

回答

1

變化

final EditText w= (EditText)findViewById(R.id.dialogW); 
final EditText h= (EditText)findViewById(R.id.dialogH); 

final EditText w= (EditText)commentDialog.findViewById(R.id.dialogW); 
final EditText h= (EditText)commentDialog.findViewById(R.id.dialogH); 

dialogWdialogHreply佈局其在commentDialog膨脹。您需要使用View,其中EditText存在EditText

0

你錯過commentDialog在findviewbyId

public class MainActivity extends Activity { 

int imgW ; 
int imgH ; 

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

public void OnToolButtonClick(View button) 
{ 
    switch (button.getId()) 
    { 
    case R.id.btn1: 

     final Dialog commentDialog = new Dialog(this); 
     commentDialog.setContentView(R.layout.reply); 
     Button okBtn = (Button) commentDialog.findViewById(R.id.ok); 

     okBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       final EditText  w= (EditText)commentDialog.findViewById(R.id.dialogW); 
       final EditText  h= (EditText) commentDialog.findViewById(R.id.dialogH); 

       try { 
        imgW = Integer.parseInt(w.getText().toString()); 
        imgH = Integer.parseInt(h.getText().toString()); 

       } 
       catch (NumberFormatException e) { 
        imgH=0; 
        imgW=0; 
       } 

       Log.i("Size" , " w "+ imgW + " h " + imgH); 
       // drawing_panel_params 

       commentDialog.dismiss(); 
      } 
     }); 
     Button cancelBtn = (Button) commentDialog.findViewById(R.id.cancel); 
     cancelBtn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       commentDialog.dismiss(); 
      } 
     }); 

     commentDialog.show(); 

     break; 
    } 
} 

} 
0

在你的代碼的樣子,我相信它不會被找到視圖您不使用findViewById()與您的對話框中設置的視圖。

I.e.改變

commentDialog.setContentView(R.layout.reply); 

View view = getActivity().getLayoutInflater().inflate(R.layout.reply, null); 
commentDialog.setContentView(view); 

,然後改變

final EditText w = (EditText) findViewById(R.id.dialogW); 
final EditText h = (EditText) findViewById(R.id.dialogH); 

final EditText w = (EditText) view.findViewById(R.id.dialogW); 
final EditText h = (EditText) view.findViewById(R.id.dialogH); 

給一個去看看,如果你不再得到一個NullPointerException。