Приложение генерирует исключение NullPointerException

1

Я создал 3 действия.

  • ElecBillActivity

  • AddBillActivity

  • ResultActivity

Я успешно включаю во второе действие с использованием намерения, но как только я нажимаю кнопку "Отправить" во втором действии, я получаю исключение.

Я пробовал много способов, но я не могу понять проблему.

Это мой logcat

E/AndroidRuntime(  506): FATAL EXCEPTION: main
E/AndroidRuntime(  506): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.sai.android.billing/com.sai.android.billing.ResultActivity}: java.lang.NullPointerException
E/AndroidRuntime(  506):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
E/AndroidRuntime(  506):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
E/AndroidRuntime(  506):        at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime(  506):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
E/AndroidRuntime(  506):        at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(  506):        at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(  506):        at android.app.ActivityThread.main(ActivityThread.java:3647)
E/AndroidRuntime(  506):        at java.lang.reflect.Method.invokeNative(NativeMethod)
E/AndroidRuntime(  506):        at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime(  506):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime(  506):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime(  506):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(  506): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  506):        at com.sai.android.billing.ResultActivity.<init>(ResultActivity.java:21)
E/AndroidRuntime(  506):        at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(  506):        at java.lang.Class.newInstance(Class.java:1409)
E/AndroidRuntime(  506):        at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
E/AndroidRuntime(  506):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
E/AndroidRuntime(  506):        ... 11 more
W/ActivityManager(   70):   Force finishing activity com.sai.android.billing/.ResultActivity
W/ActivityManager(   70):   Force finishing activity com.sai.android.billing/.AddBillActivity
W/ActivityManager(   70): Activity pause timeout for HistoryRecord{4079d8f8 com.sai.android.billing/.ResultActivity}
I/ARMAssembler(   70): generated scanline__00000177:03515104_00001001_00000000 [91 ipp] (114 ins) at [0x445b36e0:0x445b38a8] in 1634844 ns
I/Process (  506): Sending signal. PID: 506 SIG: 9
I/ActivityManager(   70): Process com.sai.android.billing (pid 506) has died.
E/InputDispatcher(   70): channel '4060e840 com.sai.android.billing/com.sai.android.billing.ElecBillingActivity (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
E/InputDispatcher(   70): channel '4060e840 com.sai.android.billing/com.sai.android.billing.ElecBillingActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
I/WindowManager(   70): WIN DEATH: Window{4060e840 com.sai.android.billing/com.sai.android.billing.ElecBillingActivity paused=false}
I/WindowManager(   70): WIN DEATH: Window{406f4868 com.sai.android.billing/com.sai.android.billing.AddBillActivity paused=true}
E/InputDispatcher(   70): Received spurious receive callback for unknown input channel.  fd=151, events=0x8
W/InputManagerService(   70): Got RemoteException sending setActive(false) notification to pid 506 uid 10038

Я также предоставляю ссылку для моего code.

Как моя проблема кажется большой, и мои файлы классов слишком велики, я предоставил ссылку для загрузки здесь. Поскольку я новый пользователь, я не могу опубликовать скриншоты здесь.

  • 1
    Пожалуйста, разместите соответствующую часть вашего кода в вопросе. Это должно быть около строки 21 вашего класса ResultActivity если судить по выходным данным LogCat.
Теги:

1 ответ

4
Лучший ответ

В соответствии с журналами вы получили NullPointerException в ResultActivity.java в строке 21... рассмотрев исходный код, это вызвано вызовом getIntent(), который является функцией-членом Activity, которая может вызывается только после создания Activity. Поэтому переместите код инициализации в метод onCreate.

Измените определения своих членов на:

private TextView resultOk;
int highLimit,lowLimit,highRate,lowRate,defaultRate,amount;
Bundle bundle;
String userName;
String meterNumber;
String prevReading;
String currReading;
int pR;
int cR;
int units;
String u;
String a;

Далее вы вызываете getIntent().getExtras() и сохраняете его в переменной bundle. Но поскольку вы никогда не ставите никаких дополнительных функций в Intent в AddBillActivity, bundle будет null, и при попытке bundle.getString(...) он выкинет еще один NullPointerException!

Первое изменение: указать атрибут android:id для RadioGroup в файле form.xml. Установите его в radios и добавьте эту строку в переменные-члены в AddBillActivity:

public static RadioGroup radios;

Как и эта строка для метода setUpViews:

radios = (RadioGroup)findViewById(R.id.radios);

Затем измените метод addTask в AddBillActivity на

Intent intent1 = new Intent(AddBillActivity.this, ResultActivity.class);
intent1.putExtra("bill_name", billNameEditText.getText().toString());
intent1.putExtra("bill_number", billNumEditText.getText().toString());
intent1.putExtra("bill_previous", billPrevEditText.getText().toString());
intent1.putExtra("bill_current", billCurrEditText.getText().toString());
intent1.putExtra("radio", radios.getCheckedRadioButtonId());
startActivity(intent1);

И теперь вы можете получить все эти дополнительные функции в своем методе onCreate в ResultActivity:

bundle = getIntent().getExtras();
userName = bundle.getString("bill_name");
meterNumber = bundle.getString("bill_number");
prevReading = bundle.getString("bill_previous");
currReading = bundle.getString("bill_current");
pR = Integer.parseInt(prevReading);
cR = Integer.parseInt(currReading);
units = pR - cR;
u = bundle.getString(String.valueOf(units));
a = bundle.getString(String.valueOf(units));

Это должно сделать это;)

  • 0
    @Michael Rose Спасибо за ваш ответ. Я применил изменения, которые вы посоветовали. Но я получаю другое исключение. Мой Logcat говорит E/AndroidRuntime( 622): Caused by: java.lang.NullPointerException E/AndroidRuntime( 622): at com.sai.android.billing.ResultActivity.onCrea te(ResultActivity.java:38) Я написал этот код, используя учебное пособие в качестве ссылки, я буду очень признателен вам, если вы сможете мне помочь !!
  • 0
    Вы добавили активность в файл манифеста?
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню