2013-02-19 62 views
0

我試圖通過在字段中輸入金額,在微調器中選擇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) 
+1

你還可以在你的問題中標記com.travelcurrencyconverter.Calculate.onClick(Calculate.java:64)行嗎? – Raman 2013-02-19 13:07:58

+0

您看起來不是在代碼中的任何位置爲ConvertTo或ConvertFrom設置值。如果這種情況成立,當您嘗試在onClick方法中使用ConvertTo值時,您將獲得NPE。 – Perception 2013-02-19 13:19:59

+0

我知道我忘了現在通過向我展示我的警報對話而讓我向前移動,現在我猜測它沒有通過旋轉器從陣列中獲取數據,但是感謝您讓我感動:D – JoeLee 2013-02-19 13:27:53

回答

1

你試圖訪問一個參考(點前面的部分)是null上線64

另外的一員,當您發佈的代碼,所有縮進它由四個空格來獲得所有語法的顏色。

另外,在執行此操作之前,請務必自動格式化IDE中的代碼。

+0

向誰低估了我:爲什麼?請注意,該問題已被編輯,當我提交此答案時,它有錯誤消息'致命例外:main java.lang.NullPointerException at com.travelcurrencyconverter.Calculate.onClick(Calculate.java:64)' – 2013-03-13 14:48:27