i need to display 24,36,60 in MonthsTxtView in each condition of if when user check the coresponding radio button . For example if user check 2 years i need to display on MonthsTxtview the 24 and etc... Below is my code but when i am running and checking a radio button tolds me "Unfortunately,Carloan (name of app) has stopped" and closes my app any suggestion?
如果用户检查相应的单选按钮,我需要在每个条件下在MonthsTxtView中显示24,36,60。例如,如果用户检查2年我需要在MonthsTxtview上显示24等等...下面是我的代码,但是当我正在运行并且检查单选按钮告诉我“不幸的是,Carloan(app的名称)已经停止”并关闭我的app有什么建议吗?
XML CODE:
JAVA CODE:
package com.example.ioann_000.carloan;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import java.text.NumberFormat;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "CARLOAN";
private TextView MonthsTxtView;
private TextView Total2TxtView;
private RadioGroup RadioGroup1;
private RadioButton selected;
private int years2=24;
private int years3=36;
private int years5=60;
private double MOntlyI= 0;
private double loan = 0;
private RadioButton radioyear2;
private RadioButton radioyear3;
private RadioButton radioyear5;
private static final NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
private static final NumberFormat percentFormat = NumberFormat.getPercentInstance();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MOnthsTxtView= (TextView) findViewById(R.id.MonthsTxtView);
Total2TxtView = (TextView) findViewById(R.id.Total2TxtView);
radioyear2 = (RadioButton) findViewById(R.id.radioyear2);
radioyear3 = (RadioButton) findViewById(R.id.radioyear3);
radioyear5 = (RadioButton) findViewById(R.id.radioyear5);
EditText IREditText = (EditText) findViewById(R.id.IREditText);
EditText AmountEditText = (EditText) findViewById(R.id.AmountEditText);
EditText AFEditText = (EditText) findViewById(R.id.AFEditText);
RadioBtn();
Log.i(TAG, "onCreate: ");
}
private void RadioBtn () {
RadioGroup selected= (RadioGroup) findViewById(R.id.RadioGroup1);
selected.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if(radioyear2.isChecked()) {
MonthsTxtView.setText("24");
Log.i(TAG, "onCheckedChanged: ");
}
else if (radioyear3.isChecked()) {
MonthsTxtView.setText("36");
Log.i(TAG, "onCheckedChanged: ");
}
else
MonthsTxtView.setText("60");
Log.i(TAG, "onCheckedChanged: ");
}
});
Log.i(TAG, "RadioBtn: ");
}
}
ERROR when Clicking Radio Button:
单击单选按钮时出错:
**12-07 01:31:00.863 4006-4006/com.example.ioann_000.carloan E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.ioann_000.carloan, PID: 4006
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.RadioButton.isChecked()' on a null object reference
at com.example.ioann_000.carloan.MainActivity$1.onCheckedChanged(MainActivity.java:64)
at android.widget.RadioGroup.setCheckedId(RadioGroup.java:174)
at android.widget.RadioGroup.access$600(RadioGroup.java:54)
at android.widget.RadioGroup$CheckedStateTracker.onCheckedChanged(RadioGroup.java:358)
at android.widget.CompoundButton.setChecked(CompoundButton.java:157)
at android.widget.CompoundButton.toggle(CompoundButton.java:113)
at android.widget.RadioButton.toggle(RadioButton.java:78)
at android.widget.CompoundButton.performClick(CompoundButton.java:118)
at android.view.View$PerformClick.run(View.java:19866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
**
ERROR 2 : E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.ioann_000.carloan, PID: 11445 java.lang.IllegalStateException: Could not find method onRadioButtonClicked(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatRadioButton with id 'radioyear2' at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) at android.view.View.performClick(View.java:4780) at android.widget.CompoundButton.performClick(CompoundButton.java:120) at android.view.View$PerformClick.run(View.java:19866) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) Disconnected from the target VM, address: 'localhost:8625', transport: 'socket'
错误2:E / AndroidRuntime:FATAL EXCEPTION:main进程:com.example.ioann_000.carloan,PID:11445 java.lang.IllegalStateException:无法在父级或祖先中找到onRadioButtonClicked(View)方法上下文中的android:onClick属性已定义在android.support.v7.app.AppCompatViewInflater上的id为“radioyear2”的视图类android.support.v7.widget.AppCompatRadioButton上,在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener中声明了OnClickListener.resolveMethod(AppCompatViewInflater.java:327) .onClick(AppCompatViewInflater.java:284)在Android.view.View.View.View.View.View的android.widget.CompoundButton.performClick(CompoundButton.java:120)上的android.view.View.performClick(View.java:4780)$ PerformClick.run( View.java:19866)在android.os.Handler.handleCallback(Handler.java:739)android.os.Handler.dispatchMessage(Handler.java:95)android.os.Looper.loop(Looper.java:135) )在java.lang.reflect.Method.invoke(Native Met)的android.app.ActivityThread.main(ActivityThread.java:5254)在com.android.internal.os.ZygoteInit的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)的java.lang.reflect.Method.invoke(Method.java:372)上。 .main(ZygoteInit.java:698)与目标虚拟机断开连接,地址:'localhost:8625',传输:'socket'
0
One of your RadioButtons is outside the RadioGroup tag. Check that first. Regards!
您的一个RadioButton位于RadioGroup标签之外。先检查一下。问候!
The other thing you can do is something like bellow:
你可以做的另一件事就是像吼叫:
int checkedRadioButtOnId= selected.getCheckedRadioButtonId();
if (checkedRadioButtOnId== -1) {
// No item selected
}
else{
switch(checkedRadioButtonId){
case R.id.radioyear2:
// Do something cool here
break;
case R.id.radioyear3:
// Do something cool here
break;
case R.id.radioyear5:
// Do something cool here
break;
}
}
And also, you missed to initialize your MonthsTxtView with the findViewById...
而且,您错过了使用findViewById初始化MonthsTxtView ...
0
It does not look like you initialized your radio buttons. You need to bind them to the variables using findViewById. It would also help if you posted the stack trace
它看起来不像你初始化你的单选按钮。您需要使用findViewById将它们绑定到变量。如果您发布了堆栈跟踪,它也会有所帮助
In onCreate
radioyear2 = (RadioButton) findViewById(R.id.radioyear2);
radioyear3 = (RadioButton) findViewById(R.id.radioyear3);
radioyear5 = (RadioButton) findViewById(R.id.radioyear5);
MOnthsTxtView= (TextView) findViewById(R.id.MonthsTxtView);
0
finally i have to do this change:
最后我必须做这个改变:
`public void onRadioButtonClicked(View view) {
// Is the button now checked?
boolean checked = ((RadioButton) view).isChecked();
// Check which radio button was clicked
switch(view.getId()) {
case R.id.radioyear2:
if (checked)
MonthsTxtView.setText("24");
Log.i(TAG, "onRadioButtonClicked: ");
break;
case R.id.radioyear3:
if (checked)
MonthsTxtView.setText("36");
Log.i(TAG, "onRadioButtonClicked: ");
break;
case R.id.radioyear5:
if (checked)
MonthsTxtView.setText("60");
Log.i(TAG, "onRadioButtonClicked: ");
break;
}
}
}`
thanks to @David Rawson
感谢@David Rawson