Сила закрытой проблемы

Я пытаюсь создать программу, которая принимает до 6 целых чисел, а затем преобразует ее в слова, к сожалению, я не вижу, что я делаю правильно или неправильно, потому что когда я пытаюсь запустить. Сила закрывается.

Вот мой MainActivity.java

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.fragment_main);

 final EditText numbers = (EditText) findViewById(R.id.editText1);
 String numberz =numbers.getText().toString();
 final long number = Long.parseLong(numberz);

 Button btnConvert = (Button) findViewById(R.id.button1); 
 btnConvert.setOnClickListener(new OnClickListener() {

 @Override
 public void onClick(View arg0) {

 String returnz = Words.convert(number); 

 } });


 }}

и вот класс, который я должен вызывать, когда я нажимаю кнопку Words.java:

import android.support.v7.app.ActionBarActivity;
import android.widget.EditText;

public class Words extends ActionBarActivity {

final EditText result = (EditText) findViewById(R.id.editText2);


 private static final String[] tensNames = {
 "",
 " ten",
 " twenty",
 " thirty",
 " forty",
 " fifty",
 " sixty",
 " seventy",
 " eighty",
 " ninety"
 };

 private static final String[] numNames = {
 "",
 " one",
 " two",
 " three",
 " four",
 " five",
 " six",
 " seven",
 " eight",
 " nine",
 " ten",
 " eleven",
 " twelve",
 " thirteen",
 " fourteen",
 " fifteen",
 " sixteen",
 " seventeen",
 " eighteen",
 " nineteen"
 };

 private Words() {}

 private static String convertLessThanOneThousand(int number) {
 String soFar;

 if (number % 100 < 20){
 soFar = numNames[number % 100];
 number /= 100;
 }
 else {
 soFar = numNames[number % 10];
 number /= 10;

 soFar = tensNames[number % 10] + soFar;
 number /= 10;
 }
 if (number == 0) return soFar;
 return numNames[number] + " hundred" + soFar;
 }


 public static String convert(long number) {
 // 0 to 999 999 999 999
 if (number == 0) { return "zero"; }

 String snumber = Long.toString(number);

 // pad with "0"
 String mask = "000000000000";
 DecimalFormat df = new DecimalFormat(mask);
 snumber = df.format(number);

 // XXXnnnnnnnnn
 int billions = Integer.parseInt(snumber.substring(0,3));
 // nnnXXXnnnnnn
 int millions = Integer.parseInt(snumber.substring(3,6));
 // nnnnnnXXXnnn
 int hundredThousands = Integer.parseInt(snumber.substring(6,9));
 // nnnnnnnnnXXX
 int thousands = Integer.parseInt(snumber.substring(9,12));

 String tradBillions;
 switch (billions) {
 case 0:
 tradBillions = "";
 break;
 case 1 :
 tradBillions = convertLessThanOneThousand(billions)
 + " billion ";
 break;
 default :
 tradBillions = convertLessThanOneThousand(billions)
 + " billion ";
 }
 String result = tradBillions;

 String tradMillions;
 switch (millions) {
 case 0:
 tradMillions = "";
 break;
 case 1 :
 tradMillions = convertLessThanOneThousand(millions)
 + " million ";
 break;
 default :
 tradMillions = convertLessThanOneThousand(millions)
 + " million ";
 }
 result = result + tradMillions;

 String tradHundredThousands;
 switch (hundredThousands) {
 case 0:
 tradHundredThousands = "";
 break;
 case 1 :
 tradHundredThousands = "one thousand ";
 break;
 default :
 tradHundredThousands = convertLessThanOneThousand(hundredThousands)
 + " thousand ";
 }
 result = result + tradHundredThousands;

 String tradThousand;
 tradThousand = convertLessThanOneThousand(thousands);
 result = result + tradThousand;

 // remove extra spaces!
 return result.replaceAll("^\\s+", "").replaceAll("\\b\\s{2,}\\b", " ");}



 public void main(String[] args) {
 result.setText("*** " + Words.convert(0));
 result.setText("*** " + Words.convert(1));
 result.setText("*** " + Words.convert(16));
 result.setText("*** " + Words.convert(100));
 result.setText("*** " + Words.convert(118));
 result.setText("*** " + Words.convert(200));
 result.setText("*** " + Words.convert(219));
 result.setText("*** " + Words.convert(800));
 result.setText("*** " + Words.convert(801));
 result.setText("*** " + Words.convert(1316));
 result.setText("*** " + Words.convert(1000000));
 result.setText("*** " + Words.convert(2000000));
 result.setText("*** " + Words.convert(3000200));
 result.setText("*** " + Words.convert(700000));
 result.setText("*** " + Words.convert(9000000));
 result.setText("*** " + Words.convert(9001000));
 result.setText("*** " + Words.convert(123456789));
 result.setText("*** " + Words.convert(2147483647));
 result.setText("*** " + Words.convert(3000000010L));

 }}

мой logcat здесь:

04-22 02:18:05.144: D/dalvikvm(1066): GC_FOR_ALLOC freed 109K, 6% free 3078K/3256K, paused 30ms, total 32ms
04-22 02:18:05.334: D/gralloc_goldfish(1066): Emulator without GPU emulation detected.
04-22 02:18:09.134: I/Choreographer(1066): Skipped 78 frames! The application may be doing too much work on its main thread.
04-22 02:18:21.704: I/Choreographer(1066): Skipped 37 frames! The application may be doing too much work on its main thread.
04-22 02:51:00.024: I/Choreographer(1066): Skipped 33 frames! The application may be doing too much work on its main thread.
04-22 03:00:00.054: I/Choreographer(1066): Skipped 40 frames! The application may be doing too much work on its main thread.
04-22 03:00:01.084: I/Choreographer(1066): Skipped 46 frames! The application may be doing too much work on its main thread.
04-22 03:27:10.474: I/Choreographer(1066): Skipped 121 frames! The application may be doing too much work on its main thread.
04-22 03:29:35.064: D/AndroidRuntime(1122): Shutting down VM
04-22 03:29:35.064: W/dalvikvm(1122): threadid=1: thread exiting with uncaught exception (group=0xb2abfba8)
04-22 03:29:35.094: E/AndroidRuntime(1122): FATAL EXCEPTION: main
04-22 03:29:35.094: E/AndroidRuntime(1122): Process: com.example.torres, PID: 1122
04-22 03:29:35.094: E/AndroidRuntime(1122): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.torres/com.example.torres.MainActivity}: java.lang.NumberFormatException: Invalid long: ""
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.os.Handler.dispatchMessage(Handler.java:102)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.os.Looper.loop(Looper.java:136)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-22 03:29:35.094: E/AndroidRuntime(1122): at java.lang.reflect.Method.invokeNative(Native Method)
04-22 03:29:35.094: E/AndroidRuntime(1122): at java.lang.reflect.Method.invoke(Method.java:515)
04-22 03:29:35.094: E/AndroidRuntime(1122): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-22 03:29:35.094: E/AndroidRuntime(1122): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-22 03:29:35.094: E/AndroidRuntime(1122): at dalvik.system.NativeStart.main(Native Method)
04-22 03:29:35.094: E/AndroidRuntime(1122): Caused by: java.lang.NumberFormatException: Invalid long: ""
04-22 03:29:35.094: E/AndroidRuntime(1122): at java.lang.Long.invalidLong(Long.java:124)
04-22 03:29:35.094: E/AndroidRuntime(1122): at java.lang.Long.parseLong(Long.java:345)
04-22 03:29:35.094: E/AndroidRuntime(1122): at java.lang.Long.parseLong(Long.java:318)
04-22 03:29:35.094: E/AndroidRuntime(1122): at com.example.torres.MainActivity.onCreate(MainActivity.java:19)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.Activity.performCreate(Activity.java:5231)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-22 03:29:35.094: E/AndroidRuntime(1122): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-22 03:29:35.094: E/AndroidRuntime(1122): ... 11 more
04-22 03:29:35.134: D/dalvikvm(1122): GC_FOR_ALLOC freed 100K, 6% free 3087K/3256K, paused 39ms, total 43ms
2 ответа

Ваша переменная numberz равна нулю при запуске приложения. Попробуй это....

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.fragment_main);

 final EditText numbers = (EditText) findViewById(R.id.editText1);

 Button btnConvert = (Button) findViewById(R.id.button1); 
 btnConvert.setOnClickListener(new OnClickListener() {

 @Override
 public void onClick(View arg0) {
 String numberz =numbers.getText().toString();
 try {
 final long number = Long.parseLong(numberz);
 String returnz = Words.convert(number); 
 } catch ( NumberFormatException e) {
 //Toast.makeToast("illegal number or empty number" , toast.long)
 }


 } 
 });
 }
 }


String numberz =numbers.getText().toString();

будет возвращать numberz=""; и on convert() в классе Words будет NumberFormatException: Invalid Long как NumberFormatException: Invalid Long. Таким образом, вы должны писать ниже коды в onClickListener().

btnConvert.setOnClickListener(new OnClickListener() 
 {
 @Override
 public void onClick(View arg0) {
 String numberz =numbers.getText().toString();
 try {
 final long number = Long.parseLong(numberz);
 String returnz = Words.convert(number); 
 } catch ( NumberFormatException e) {
 //Toast.makeToast("illegal number or empty number" , toast.long)
 }
 } 
 });

licensed under cc by-sa 3.0 with attribution.