FATAL EXCEPTION: main java.lang.RuntimeException
سلام.
من پک آموزشی آقای آقاجانی رو تازه شروع کردم.توی برنامه Calculator که همزمان با ویدیو پیش میرم همه کدها درست کار می کنه بغیر از کدهای مربوط به عملگرها (* / + - ). با وارد کردن کدها تو ایمولاتور پیغام Unfortunately, Calc has stoped رو میده و توی اندروید استودیو پیغام زیر رو:
09-07 14:13:38.010 1649-1649/com.example.me.calc E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.me.calc/com.example.me.calc.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
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:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.example.me.calc.MainActivity.onCreate(MainActivity.java:260)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
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:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
این هم کد من که عینا مثل کد خود آقای آقاجانیه مگر تو اسم متغیرها و ....
package com.example.me.calc;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
Button btn_ce;
Button btn_c;
Button btn_back;
Button btn_division;
Button btn_7;
Button btn_8;
Button btn_9;
Button btn_4;
Button btn_5;
Button btn_6;
Button btn_1;
Button btn_2;
Button btn_3;
Button btn_sign;
Button btn_0;
Button btn_point;
Button btn_equal;
Button btn_plus;
Button btn_minus;
Button btn_multiply;
TextView txt_result;
TextView txt_history;
float currentValue = 0;
String operand = "";
boolean mustReset = false;
void append(int num) {
if (mustReset) {
txt_result.setText("");
mustReset = false;
}
String oldValue = txt_result.getText().toString();
if (oldValue.length() > 9) return;
if (oldValue.equals("0"))
if (num == 0) {
return;
} else {
oldValue = "";
}
txt_result.setText(oldValue + num);
}
void operators(String nextOperand) {
String lastValue = txt_result.getText().toString();
Float lastResult = Float.parseFloat(lastValue);
if (operand.equals("+")) currentValue += lastResult;
else if (operand.equals("-")) currentValue -= lastResult;
else if (operand.equals("*")) currentValue *= lastResult;
else if (operand.equals("/")) currentValue /= lastResult;
else if (operand.equals("")) currentValue = lastResult;
String oldHistory = txt_history.getText().toString();
txt_history.setText(oldHistory + " " + lastResult + " " + nextOperand);
txt_result.setText("" + currentValue);
operand = nextOperand;
mustReset = true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt_result = (TextView) findViewById(R.id.txt_result);
txt_history = (TextView) findViewById(R.id.txt_history);
btn_ce = (Button) findViewById(R.id.btn_ce);
btn_c = (Button) findViewById(R.id.btn_c);
btn_back = (Button) findViewById(R.id.btn_back);
btn_division = (Button) findViewById(R.id.btn_division);
btn_7 = (Button) findViewById(R.id.btn_7);
btn_8 = (Button) findViewById(R.id.btn_8);
btn_9 = (Button) findViewById(R.id.btn_9);
btn_4 = (Button) findViewById(R.id.btn_4);
btn_5 = (Button) findViewById(R.id.btn_5);
btn_6 = (Button) findViewById(R.id.btn_6);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
btn_3 = (Button) findViewById(R.id.btn_3);
btn_sign = (Button) findViewById(R.id.btn_sign);
btn_0 = (Button) findViewById(R.id.btn_0);
btn_point = (Button) findViewById(R.id.btn_point);
btn_equal = (Button) findViewById(R.id.btn_equal);
btn_plus = (Button) findViewById(R.id.btn_plus);
btn_multiply = (Button) findViewById(R.id.btn_multiply);
View.OnClickListener numbersListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
int index = Integer.parseInt(v.getTag().toString());
append(index);
}
};
btn_0.setOnClickListener(numbersListener);
btn_1.setOnClickListener(numbersListener);
btn_2.setOnClickListener(numbersListener);
btn_3.setOnClickListener(numbersListener);
btn_4.setOnClickListener(numbersListener);
btn_5.setOnClickListener(numbersListener);
btn_6.setOnClickListener(numbersListener);
btn_7.setOnClickListener(numbersListener);
btn_8.setOnClickListener(numbersListener);
btn_9.setOnClickListener(numbersListener);
مشکل فقط همین قطعه کده که وقتی کامنتش میکنم بقیه کدها و دکمه ها درست کار می کنه:
View.OnClickListener operandListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
operators(view.getTag().toString());
}
};
btn_plus.setOnClickListener(operandListener);
btn_minus.setOnClickListener(operandListener);
btn_multiply.setOnClickListener(operandListener);
btn_division.setOnClickListener(operandListener);
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .