Java 空指针异常(单击时)

标签 java android onclick

我正在尝试创建一个简单的美元、英镑和欧元货币转换器,方法是在字段中输入金额,在微调器中选择从货币,然后选择货币 在另一个微调器中。然后,我在文本字段中输出转换后的金额。

但由于某种原因,我无法通过 onClick 方法,我不知道为什么。这可能很简单,但我看不到。

这是我的代码:

 public class Calculate extends Activity implements OnItemSelectedListener,
    OnClickListener {

Button Calculate;
String stringAmount;
double exchangeRate, E, D, Answer;
EditText Amount;
Spinner spinner, spinner1;
int ConvertFrom, ConvertTo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.calculate);
    Initilise();
    // this is calling the method initilise.
    // listens for the button to be clicked
    Calculate.setOnClickListener(this);

}

private void Initilise() {
    // Method initilise.
    /* Button */Calculate = (Button) findViewById(R.id.cal);
    /* EditText */Amount = (EditText) findViewById(R.id.amount);
    spinner = (Spinner) findViewById(R.id.Currency);
    spinner1 = (Spinner) findViewById(R.id.Currency1);

}

public void format() {

    ConvertFrom = 0;
    ConvertTo = 0;

    stringAmount = Amount.getText().toString();
    E = 0; // set it to 0 as the default
    try {
        E = Integer.parseInt(stringAmount);
    } catch (NumberFormatException e) {

    }
}

@SuppressWarnings("deprecation")
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    spinner();
    switch (v.getId()) {
    case R.id.cal:

        if (ConvertFrom == 0) {

            FromEuro();
        } else if (ConvertFrom == 1) {

            FromUsd();
        } else if (ConvertFrom == 2) {

            FromGbp();
        } else {
            // Amount.setText("Invalid Input");
            AlertDialog alertDialog = new AlertDialog.Builder(this)
                    .create();
            alertDialog.setTitle("Input");
            alertDialog.setMessage("Please Input a amount");
            alertDialog.setButton("OK",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            // here you can add functions

                        }
                    });
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();

        }
    }
}

public void spinner() {

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, R.array.Currencies);

    spinner = (Spinner) findViewById(R.id.Currency);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);

    spinner1 = (Spinner) findViewById(R.id.Currency1);
    spinner1.setAdapter(adapter);
    spinner1.setOnItemSelectedListener(this);
}

@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
        long arg3) {
    // TODO Auto-generated method stub
    int posistion = spinner.getSelectedItemPosition();
    ConvertFrom = posistion;
    int posistion1 = spinner1.getSelectedItemPosition();
    ConvertTo = posistion1;
}

@Override
public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub

}

@SuppressWarnings("deprecation")
private void FromEuro() {
    // TODO Auto-generated method stub
    if (ConvertTo == 1) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else if (ConvertTo == 2) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else if (ConvertTo == 0) {
        AlertDialog alertDialog = new AlertDialog.Builder(null).create();
        alertDialog.setTitle("Input");
        alertDialog.setMessage("Please Select a gender");
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // here you can add functions

            }
        });
        alertDialog.setIcon(R.drawable.ic_launcher);
        alertDialog.show();
    }
}

@SuppressWarnings("deprecation")
private void FromUsd() {
    // TODO Auto-generated method stub
    if (ConvertTo == 0) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else if (ConvertTo == 1) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else {
        if (ConvertTo == 2) {
            AlertDialog alertDialog = new AlertDialog.Builder(null)
                    .create();
            alertDialog.setTitle("Input");
            alertDialog.setMessage("Please Select a gender");
            alertDialog.setButton("OK",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            // here you can add functions

                        }
                    });
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();
        }
    }
}

private void FromGbp() {
    // TODO Auto-generated method stub
    if (ConvertTo == 2) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else if (ConvertTo == 0) {
        exchangeRate = 1.336891;
        Answer = E * exchangeRate;
        String Final = Double.toString(Answer);
        Amount.setText(Final);

    } else {
        if (ConvertTo == 1) {
            Builder alertDialog = new AlertDialog.Builder(this);
            alertDialog.setTitle("Input");
            alertDialog.setMessage("Please Select a gender");
            alertDialog.setPositiveButton("OK",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog,
                                int which) {
                            // here you can add functions

                        }
                    });
            alertDialog.setIcon(R.drawable.ic_launcher);
            alertDialog.show();
        }
    }
}`

}

但我现在正在接收

02-19 16:55:01.514: E/AndroidRuntime(28638): 在 android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:142)

上述错误。

<小时/>

之前这个问题有以下错误:

想知道是否有人可以帮忙。我收到这些错误:

FATAL EXCEPTION: main
    java.lang.NullPointerException
    at com.travelcurrencyconverter.Calculate.onClick(Calculate.java:64)
    at android.view.View.performClick(View.java:4222)
    at android.view.View$PerformClick.run(View.java:17273)
    at android.os.Handler.handleCallback(Handler.java:615)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4895)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
    at dalvik.system.NativeStart.main(Native Method)

最佳答案

您正在尝试访问第 64 行为 null 的引用成员(点之前的部分)。

此外,当您发布代码时,请将所有代码缩进四个空格,以使所有语法都着色。

此外,在执行此操作之前,请确保在 IDE 中自动设置代码格式。

关于Java 空指针异常(单击时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958277/

相关文章:

php - 需要帮助从 javascript 中的 onclick 函数保存文件

java - 如何使用 Couchbase Java SDK 3 使用不同的端口

java - 为什么 Spring 应用程序在 main 方法的末尾不存在

java - 单击对话框按钮时泄漏窗口

android - Android获取经纬度的方法

Android:如何在播放媒体(mp3)时以一定毫秒显示文本

c# - 从触发按钮单击事件中停止 Enter 键

java - 如果配置加载失败如何停止部署

java - Java 可选映射和 orElse 的链接(if-else 样式)

java - 将 TimePicker 数据保存在 sqlite 数据库中