我試圖通過在字段中輸入金額,在微調器中選擇from currency
以及在另一微調器中選擇to currency
來創建從USD,GBP和Euro的簡單貨幣轉換器。然後我在文本字段中輸出轉換的數量。Java空指針異常(點擊)
但由於某種原因,我無法通過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)
你還可以在你的問題中標記com.travelcurrencyconverter.Calculate.onClick(Calculate.java:64)行嗎? – Raman 2013-02-19 13:07:58
您看起來不是在代碼中的任何位置爲ConvertTo或ConvertFrom設置值。如果這種情況成立,當您嘗試在onClick方法中使用ConvertTo值時,您將獲得NPE。 – Perception 2013-02-19 13:19:59
我知道我忘了現在通過向我展示我的警報對話而讓我向前移動,現在我猜測它沒有通過旋轉器從陣列中獲取數據,但是感謝您讓我感動:D – JoeLee 2013-02-19 13:27:53