0

ある金額を別の通貨に変換する小さなコードを書いています。アプリは、EditText (10 進数を受け入れるように構成されている) を介して 2 つの値を受け入れます。

コードは次のとおりです。

package kk.currency;

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

public class CurrencyActivity extends Activity {
    /** Called when the activity is first created. */

    EditText inpval1;
    EditText inpval2;
    EditText rate;

    int v1 = 0;
    int v2 = 0;
    int r = 0;

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

    public void btnclick(View view)  {
        try {
            inpval1 = (EditText)findViewById(R.id.away);
            v1 = Integer.parseInt(inpval1.getText().toString());

            inpval2 = (EditText)findViewById(R.id.home);
            v2 = Integer.parseInt(inpval2.getText().toString());

            rate = (EditText)findViewById(R.id.rate);
            r = Integer.parseInt(rate.getText().toString()); 
        }
        catch (Exception e) {
            Toast.makeText(this, "Empty field", Toast.LENGTH_SHORT).show();
        }
        finally {
            v1 = v2 * r;

            EditText destination = (EditText)findViewById(R.id.away);
            destination.setText(Integer.toString(v1));
        }
    }   
}

問題は、「btnclick」に関連付けられたボタンをクリックすると、空白のままになっているフィールド (および回答が表示されるはずの場所) に、入力に関係なく 0 が表示されることです。しかし、もう一度クリックすると正しい答えが表示されます。

また、空白のままにする必要があるフィールドに値を入力すると、最初に正しい値が表示されます。

何が問題になる可能性がありますか?!

「最終的に」を削除してそのコンテンツを「試してみる」に配置すると、ボタンをクリックしても応答がありません。

また、アプリの実行中、LogCat は完全に空です。

これは、誰かが要求したアプリのレイアウトです。

<?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:orientation="vertical" >

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/away"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/away"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/c1" />

<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/conv"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/rate"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/rate" />

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:layout_marginLeft="5dip"
    android:text="@string/home"
    android:textStyle="bold"
    android:textSize="20dip"
    android:textColor="#4199ae" />

<EditText
    android:id="@+id/home"
    android:digits="0123456789."
    android:inputType="number"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dip"
    android:hint="@string/c2" />

<Button
    android:id="@+id/but"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="25dip"
    android:text="@string/buttxt"
    android:onClick="btnclick" />

4

3 に答える 3

1

Reddit からの私の返信:

あなたの問題は、ユーザーが持つ可能性のあるさまざまな入力を処理していないためです。最初に、この行で

v1 = Integer.parseInt(inpval1.getText().toString());

の値

inpval1.getText().toString()

これは整数に変換できないため、例外が発生しています。「空のフィールド」トーストが表示されるはずです。その後、最終ステップに到達しますが、v2 と r はまだ 0 であるため、v1 に 0 を入れ、離れた EditText に 0 を入れます。

次に実行すると、Away EditText から 0 が取得され、正常に動作します。デバッグの方法を知っていますか? Eclipse を使用している場合は、一時停止したい行の一番左の灰色/青色のバーをダブルクリックすると、小さなブレークポイント アイコンが配置され、プログラムはそこで停止します。

したがって、最初に EditText の値の取得を削除すると、機能するはずです。また、ボタンをクリックするたびにコントロール ビューへのポインターを取得することで冗長な作業を行っているため、ここで他の提案のいくつかを実装することも検討したいと考えています。

幸運を!

于 2012-05-19T07:38:28.093 に答える
0

この方法を試してください。ただし、使用しているボタン ID と一致するようにコードを変更することを忘れないでください。

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

public class CurrencyActivity extends Activity {
/** Called when the activity is first created. */

    EditText inpval1;
    EditText inpval2;
    EditText rate;
    EditText destination;
    Button mbutt;
    int v1 = 0;
    int v2 = 0;
    int r = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mbutt = (Buttn)findViewById(R.id.SubmitButton);
        inpval1 = (EditText)findViewById(R.id.away);
        inpval2 = (EditText)findViewById(R.id.home);
        rate = (EditText)findViewById(R.id.rate);
        EditText destination = (EditText)findViewById(R.id.away);

        mbutt.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                         v1 = Integer.parseInt(inpval1.getText().toString());
                         v2 = Integer.parseInt(inpval2.getText().toString());
                         r = Integer.parseInt(rate.getText().toString()); 
                         v1 = v2 * r;
                         destination.setText(Integer.toString(v1));
                }
            });
    }    
}
于 2012-05-18T11:27:49.033 に答える
0

try catch ブロックを使用せずに試してみてください。それでもこれに固執したい場合は、コードを finally に try ブロックに配置し、finally ブロックを削除してください。

このような :

public void btnclick(View view)  {

    try {
                 inpval1 = (EditText)findViewById(R.id.away);
                 v1 = Integer.parseInt(inpval1.getText().toString());

                 inpval2 = (EditText)findViewById(R.id.home);
                 v2 = Integer.parseInt(inpval2.getText().toString());

                 rate = (EditText)findViewById(R.id.rate);
                 r = Integer.parseInt(rate.getText().toString()); 

                 v1 = v2 * r;

                  EditText destination = (EditText)findViewById(R.id.away);
                  destination.setText(Integer.toString(v1));
        }

    catch (Exception e) {
        Toast.makeText(this, "Empty field", Toast.LENGTH_SHORT).show();
    }
于 2012-05-18T11:45:11.477 に答える