2017-02-01 5 views
0

私はAddItemという名前のアクティビティを持っています。これには、ユーザーが入力したいくつかのフィールドが含まれています。これを別のアクティビティに渡そうとしています。私はこれを行うことにより、最初の2つのフィールドを取得することができた:番号を取得しようとすると、私の活動がクラッシュするのはなぜですか?

String messageText = ((EditText) findViewById(R.id.inputName)).getText().toString(); 
String discriptionText = ((EditText) findViewById(R.id.description)).getText().toString(); 

上記のコードは、楽しさを働いていたが、その後私はそのようにのように、二重にキャスト別の値を取得しようとしました:

double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString()); 

これは長くて複雑ですが、基本的にはStringを解析してdouble値に変換する以外は同じことをやっています。私はこれが問題のコードであると判断しました。なぜなら、私がコメントアウトすると、残りのアプリケーションはうまく動作するからです。あなたが初期化されていないビューからonSaveItemButtonメソッドを呼び出している

public class AddItem extends AppCompatActivity { 

    EditText inputedTask, inputedDescription, inputedLatitude; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_item); 
    inputedTask = (EditText) findViewById(R.id.inputName); 
    inputedDescription = (EditText) findViewById(R.id.description); 
    inputedLatitude = (EditText) findViewById(R.id.Latitude); 
    } 

    public void onSaveItemButton(View view) { 
    String messageText = ((EditText) findViewById(R.id.inputName)).getText().toString(); 
    String discriptionText = ((EditText) findViewById(R.id.description)).getText().toString(); 
    double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString()); 

    if (messageText.equals("")); 
    else { 
     Intent intent = new Intent(); 
     intent.putExtra(Intent_Constant.INTENT_MESSAGE_FIELD, messageText); 
     setResult(Intent_Constant.INTENT_RESULT_CODE, intent); 
     finish(); 
    } 
    } 
} 
+1

あなたは必ずあなたのEditTextです適切にフォーマットされたDoubleを含んでいますか? – AnixPasBesoin

+0

あなたが受け取っているエラーを教えてください。 –

+0

@Selvinそれはどういう意味ですか? –

答えて

4

このレイアウトをホストする活動の中で、次のような方法 は、クリックイベントを処理します。

/** Called when the user touches the button */ 
public void sendMessage(View view) { 
    // Do something in response to button click 
} 

android:onClick属性で宣言するメソッドには、が必要です。 10の署名を正確に上に示されている。具体的には、この方法は、必要があります。

  • は公共
  • 戻り、ボイド
  • 唯一のパラメータとしてビューを定義して(これは クリックした表示になります)

だから公開に変更する:

public void onSaveItemButton(View view) { 
    ... 
} 

UPDATE:
エラーログが言うようにします。java:com.android.internal.os.ZygoteInit.mainで

(ZygoteInit.java:698) はによって引き起こされます.lang.NumberFormatException:無効なdouble: "" at java.lang.StringToReal.invalidReal(StringToReal.java:63) at java.lang.StringToReal.parseDouble(StringToReal.java:267) at java.lang.Double 。パーseDouble(Double.java:301) at cs4720.cs.virginia.edu.duysalahandroidminiproject02.AddItem。onSaveItemButton(AddItem.java:33)

あなたは、次のコードでは、空の文字列をキャッチする必要がありますので、

double Latitude = Double.parseDouble(((EditText) findViewById(R.id.Latitude)).getText().toString()); 

、それを最初に確認してください。

String val = ((EditText) findViewById(R.id.Latitude)).getText().toString(); 
if(!val.equals("") { 
    double Latitude = Double.parseDouble(val); 
} 
+0

私はそれをしましたが、それでも同じエラーが出ます。 –

+0

新しいエラーは何ですか?ここに投稿してください。 –

+0

更新されたエラーメッセージを投稿しました。それは前のものと同じように見えますが。 –

-1

は、ここに私の活動です。 btnChangeDateに初期化する必要があります。アクティビティからを作成してください。あなたがdocumentationから、onClickのためにパブリックメソッドを作成する必要があり

チェックthis answer

+0

この質問で 'onSaveItemButton'はどこにありますか? – AnixPasBesoin

+0

私は 'onCreate'メソッドで' Latitude =(EditText)findViewById(R.id.Latitude) 'のようなことをするだけで問題を解決できると言っていますか?それが必要な場合、なぜ他の2つのフィールドで同じことをする必要はありませんでしたか?ちょっと興味があるんだけど。 –

+0

@AnixPasBesoin XML部分です。これは、ボタンを押したときに呼び出されるメソッドです。 –

関連する問題