I have 3 buttons in my application,
buttons id's = button1, button2, button3.
button1 and button3 need to do the same action, exit the game - working.
button2 need to add 1 to a counter and change a text to the counter (using for a score)
so i made an int counter=0, tried to make the script and the app crashes when I press on button2, here's the logcat and the script:
package com.example.bluetap;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.PaintDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class FirstActivity extends Activity implements OnClickListener {
private TextView changingTextView;
private Button button1;
private Button button2;
private Button button3;
private int counter=0;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
changingTextView = (TextView) findViewById(R.id.changingTextView);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this);
button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(this);
button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(this);
}
public void onClick(View v) {
int id = v.getId();
if (id == R.id.button1) {
finish();
System.exit(0);
}
else if (id == R.id.button2) {
counter++;
changingTextView.setText(counter);
}
else if (id == R.id.button3) {
finish();
System.exit(0);
}
}
}
here's the main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="#dimen/activity_vertical_margin"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin"
tools:context="com.example.bluetap.FirstActivity$PlaceholderFragment" >
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:minWidth="200dp"
android:text="Press The White Button"
android:textColor="#color/blue" />
<Button
android:id="#+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button1"
android:layout_below="#+id/button1"
android:background="#android:color/white"
android:minWidth="200dp"
android:text="Press The White Button"
android:textColor="#color/blue" />
<Button
android:id="#+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button2"
android:layout_below="#+id/button2"
android:minWidth="200dp"
android:text="Press The White Button"
android:textColor="#color/blue" />
<TextView
android:id="#+id/changingTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="#+id/button3"
android:layout_below="#+id/button3"
android:layout_marginLeft="80dp"
android:layout_marginTop="95dp"
android:text="0"
android:textSize="60sp" />
here's the logcat:
TextView.setText(int) expects a resource identifier. You're trying to show the actual int value in your TextView. Android looks for a resource with that value, which it cannot find. Thus crashing your application.
Use changingTextView.setText(String.valueOf(counter)); to convert it to a String first.
you have problem on:
else if (id == R.id.button2) {
counter++;
changingTextView.setText(counter);
}
you can't set integer value to TextView, so you need cast that to String.
you can use:
changingTextView.setText(""+counter);
or
changingTextView.setText(Integer.toString(counter));
or
changingTextView.setText(String.valueOf(counter));
Related
I'm building a Contact app using ListView. My ListView has 2 button. In this app, to test the respond ability of the buttons, I intended to set the button "Edit" so that when I click on it, it will change to "Clicked", and the button "Delete" will change to "Clicked", too. When I ran the Debug, the app stopped working and I couldn't get it work again (before I added the onClickListener, this app had worked property).
I don't know what is the error, and have tried many ways to fix.
Here is my row_listview.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_margin="10dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="5">
<ImageView
android:id="#+id/imgAvatar"
android:layout_width="0dp"
android:layout_height="70dp"
android:layout_weight="1"
android:src="#drawable/if_male3_403019" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="2.7"
android:orientation="vertical"
android:weightSum="2">
<TextView
android:id="#+id/tvName"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingLeft="15dp"
android:text="Akai Shuichi"
android:textSize="16dp"
android:textColor="#000"
android:gravity="center_vertical"
/>
<TextView
android:id="#+id/tvNumber"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:paddingLeft="15dp"
android:text="0982xxxxxx"
android:textSize="16dp"
android:textColor="#000"
android:gravity="center_vertical"
/>
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1.3"
android:weightSum="2"
android:orientation="vertical">
<Button
android:id="#+id/btnEdit"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:backgroundTint="#3FE0FF"
android:onClick="myClickHandler"
android:text="Edit"
android:textColor="#fff"
android:textStyle="bold" />
<Button
android:id="#+id/btnDelete"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:backgroundTint="#F73131"
android:onClick="myClickHandler"
android:text="Delete"
android:textColor="#fff"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>
And here is my MainActivity.java:
package com.huy9515gmail.mycontact;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import java.util.ArrayList;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
#BindView(R.id.edt_inputName) EditText edtName;
#BindView(R.id.btnAdd) Button btnAdd;
#BindView(R.id.btnEdit) Button btnEdit;
#BindView(R.id.btnDelete) Button btnDelete;
#BindView(R.id.edt_inputNumber) EditText edtNumber;
#BindView(R.id.rdbtn_male) RadioButton rdbtn_male;
#BindView(R.id.rdbtn_female) RadioButton rdbtn_female;
#BindView(R.id.rdbtn_others) RadioButton rdbtn_others;
#BindView(R.id.gender) RadioGroup genderSelection;
private ListView lvContact;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
lvContact = (ListView) findViewById(R.id.lv_contact);
final ArrayList<Contact> arrContact = new ArrayList<>();
btnAdd.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//validating contact info
if (((edtName.getText().toString().trim()) == "") || (edtNumber.getText().toString().trim() == "") || ((rdbtn_male.isChecked()==false) && (rdbtn_female.isChecked()==false) &&(rdbtn_others.isChecked()==false))) {
Toast.makeText(MainActivity.this, "Invalid contact info! Please try again!", Toast.LENGTH_SHORT).show();
}
//adding contact info
else {
Contact contact = new Contact(Gender.male, "", "");
//adding info
contact.setName(edtName.getText().toString());
contact.setNumber(edtNumber.getText().toString());
arrContact.add(contact);
}
CustomAdapter customAdapter = new CustomAdapter(MainActivity.this, R.layout.row_listview, arrContact);
lvContact.setAdapter(customAdapter);
}
});
}
public void myClickHandler(View v) {
LinearLayout vwParentRow = (LinearLayout) v.getParent();
Button btnEdit = (Button) vwParentRow.getChildAt(0);
Button btnDelete = (Button) vwParentRow.getChildAt(1);
btnEdit.setText("Clicked");
btnDelete.setText("Clicked");
}
}
And here is the row_listview.xml layout:
Instead of setting the android:onClick in XML, do the same as you did for btnAdd.
Find the view by id or use butterknife, then put the following in onCreate()
btnEdit.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// Your code here
}
});
btnDelete.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// Your code here
}
});
Make sure you have an element in your XML file with the id like this:
android:id="#+id/btnAdd"
I want to change the activity when button clicked and new layout will be opened based on which radio button is checked.I have three radio button .I want to change the layout based on the checked radio button and next button click .Here is my code
package com.edkul.vimal.edkul;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
public class Join_AS_A extends AppCompatActivity {
private RadioGroup radioGroup;
private RadioButton radioButton;
private Button btn;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_join__as_);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
radioGroup = (RadioGroup) findViewById(R.id.joinGroup);
radioGroup.clearCheck();
int selectedId = radioGroup.getCheckedRadioButtonId();
radioButton = (RadioButton) findViewById(selectedId);
btn = (Button)findViewById(R.id.nextButton);
btn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
String selection = (String) radioButton.getText();
Log.i("Print here", selection);
if (selection.equals("Student") && view ==btn){
Intent intentMain = new Intent(Join_AS_A.this, Student_Signup.class);
Join_AS_A.this.startActivity(intentMain);
Log.i("Content ", " Main layout ");
}
}
});
}
}
Here is the xml code
Here is the xml file :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="#dimen/activity_vertical_margin"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin"
app:layout_behavior="#string/appbar_scrolling_view_behavior"
tools:context="com.edkul.vimal.edkul.Join_AS_A"
tools:showIn="#layout/activity_join__as_">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="#string/joinAsA"
android:textSize="30sp"
android:id="#+id/textView2"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="#+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="47dp"
android:layout_alignRight="#+id/textView2"
android:layout_alignEnd="#+id/textView2"
android:id="#+id/joinGroup">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/joinasaStudent"
android:textSize="20sp"
android:textColor="#33b5e5"
android:id="#+id/radioButton"
android:checked="false" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/joinasaTeacher"
android:textSize="20sp"
android:textColor="#33b5e5"
android:id="#+id/radioButton2"
android:checked="false" />
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/joinasaparent"
android:textSize="20sp"
android:textColor="#33b5e5"
android:id="#+id/radioButton3"
android:checked="false" />
</RadioGroup>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/joinNext"
android:id="#+id/nextButton"
android:background="#drawable/custom_button"
android:layout_alignBottom="#+id/joinGroup"
android:layout_centerHorizontal="true"
android:layout_marginBottom="79dp" />
</RelativeLayout>
You have to change the code of on click is something like:-
radioGroup = (RadioGroup) findViewById(R.id.joinGroup);
btn = (Button) findViewById(R.id.nextButton);
btn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
int selectedId = radioGroup.getCheckedRadioButtonId();
if (selectedId == R.id.radioButton) {
Intent intentMain = new Intent(MainActivity.this,
Student_Signup.class);
startActivity(intentMain);
Log.i("Content ", " Main layout ");
}
}
});
As you are getting the checked radio button id in oncreate() so its reference will not gets change even if user will select some other radio button. So you have to find the selected radio button id when user will click on next button and then have to perform operation accordingly.
My program opens with a login page, then moves to a page with two buttons (go to counter and go to scan barcode).
Very basic at this point, but I'm stuck because I press the scan barcode button and it moves to the new page fine, but if I press the 'go to counter' button (which goes to a chronometer class), the program crashes - even though there is a class made for it.
It gives me this error:
Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference.
Here is my code
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
public class page1 extends AppCompatActivity implements View.OnClickListener {
Button scanner,go2count;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_page1);
scanner = (Button) findViewById(R.id.scanner);
go2count = (Button) findViewById(R.id.go2count);
scanner.setOnClickListener(this);
go2count.setOnClickListener(this);
}
#Override
public void onClick(View v) {
switch(v.getId()){
case R.id.scanner:
startActivity(new Intent(this, ScanPage.class));
break;
case R.id.go2count:
startActivity(new Intent(this, ChronoPage.class));
break;
}
}
So if I press the 'scanner' button, it works fine. But if I press the 'go2count' button, the program gives me the error mentioned.
This is the chronometer code:
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Chronometer;
import android.widget.Button;
public class ChronoPage extends AppCompatActivity implements View.OnClickListener {
private Button start;
private Button stop;
private Button resume;
private Button reset;
private long time = 0;
private Chronometer myChrono;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uI();
}
public void uI(){
start = (Button) findViewById(R.id.bStart);
start.setOnClickListener(this);
stop = (Button) findViewById(R.id.bStop);
stop.setOnClickListener(this);
resume = (Button) findViewById((R.id.bResume));
resume.setOnClickListener(this);
reset = (Button) findViewById(R.id.bReset);
reset.setOnClickListener(this);
myChrono = (Chronometer) findViewById(R.id.chronometer);
}
#Override
public void onClick(View v){
if (v == start){
myChrono.setBase(SystemClock.elapsedRealtime());
myChrono.start();
}
else if (v == stop){
time = SystemClock.elapsedRealtime();
myChrono.stop();
// printing();
}
else if (v == resume){
myChrono.setBase(myChrono.getBase() + SystemClock.elapsedRealtime() - time);
myChrono.start();
}
else if (v == reset){
myChrono.setBase(SystemClock.elapsedRealtime());
}
}
}
Another post said to try unchecking the "Use Host GPU" in the AVD manager, but that didn't solve the problem either.
Other posts have the same error, but are more specific to their code. All help is appreciated!
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:padding="10dp"
android:layout_width="match_parent">
<ImageView
android:id="#+id/logo1"
android:layout_marginTop="100dp"
android:layout_width="150dp"
android:layout_height="150dp"
android:layout_gravity="center_horizontal"
android:src="#drawable/swordlogocopy"/>
<Button
android:id="#+id/scanner"
android:text="Scan Barcode"
android:textColor="#DDC004"
android:background="#000000"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<Button
android:id="#+id/go2count"
android:text="Go to counter"
android:textColor="#DDC004"
android:background="#000000"
android:layout_width="100dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="30dp"
android:layout_height="wrap_content" />
And the XML layout of the Chrono Page:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="match_parent"
android:padding="10dp"
android:layout_width="match_parent">
<ImageView
android:id="#+id/logo1"
android:layout_marginTop="100dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:src="#drawable/swordlogocopy"/>
<Chronometer
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:textColor="#000000"
android:id="#+id/chronometer1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/start"
android:layout_gravity="center_horizontal"
android:id="#+id/bStart"
android:textColor="#DDC004"
android:background="#000000"
android:layout_marginTop="50dp"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/stop"
android:layout_gravity="center_horizontal"
android:textColor="#DDC004"
android:background="#000000"
android:layout_marginTop="5dp"
android:id="#+id/bStop" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/resume"
android:layout_gravity="center_horizontal"
android:textColor="#DDC004"
android:background="#000000"
android:layout_marginTop="5dp"
android:id="#+id/bResume" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/reset"
android:layout_gravity="center_horizontal"
android:textColor="#DDC004"
android:background="#000000"
android:layout_marginTop="5dp"
android:id="#+id/bReset" />
If you get this error, then most likely the findViewById(id) is not finding your Button variable in your xml to set the corresponding Button and therefore returning null. Which results in a NullpointerException when trying to set a OnClickListener on this view
Check if all Button Ids are valid
When I click on the add button without entring anything on the edittext,unfortunately calculator has stopped.
package com.example.calculator;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Calci extends Activity {
TextView t1;
EditText e1,e2;
Button add,sub,mul,div;
Context c;;
String b,a;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calci);
e1=(EditText) findViewById(R.id.EditText01);
e2=(EditText) findViewById(R.id.EditText02);
add=(Button) findViewById(R.id.add);
sub=(Button) findViewById(R.id.sub);
mul=(Button) findViewById(R.id.mul);
div=(Button) findViewById(R.id.div);
t1=(TextView) findViewById(R.id.textView1);
a=e1.getText().toString();
b=e2.getText().toString();
}
public void doSomething(View v){
if(v.getId()==R.id.add){
if (a==null & b==null){
Toast.makeText(c,"PLEASE ENTER SOMETHING", Toast.LENGTH_LONG).show();
}
else{
int result=Integer.parseInt(a) + Integer.parseInt(b);
t1.setText(Integer.toString(result));
}
}
}
}
When I click on the add button,unfortunately calculator has stopped.
XML FILE
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Calci" >
<EditText
android:id="#+id/EditText01"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:ems="10"
android:inputType="number" />
<EditText
android:id="#+id/EditText02"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_toRightOf="#+id/EditText01"
android:ems="10"
android:inputType="number" />
<Button
android:id="#+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="#+id/EditText01"
android:layout_marginTop="20dp"
android:text="ADD"
android:onClick="doSomething"/>
<TextView
android:id="#+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="#+id/button4"
android:layout_marginTop="44dp"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="#+id/sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="#+id/add"
android:onClick="doSomething"
android:text="SUBTRACT" />
<Button
android:id="#+id/mul"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="#+id/sub"
android:onClick="doSomething"
android:text="MULTIPLY" />
<Button
android:id="#+id/div"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="#+id/mul"
android:onClick="doSomething"
android:text="DIVIDE" />
</RelativeLayout>
When I click on the add button,unfortunately calculator has stopped.\
what shuold i do now
First of all initialize
t1=(TextView) findViewById(R.id.textView1);
And you can put validation for empty check on button click listener before furthe process like
if(!(t1.getText.toString().equals(""))) to show alerts
I think problem is that you have not declared your text-view, try to declare it like below and then try.
t1=(TextView) findViewById(R.id.textView1);
Edit
if (e1.getText.toString().trim() == "" && e2.getText.toString().trim() == "")
{
// alert
}
else
{
// do your code
}
So your final code would be
public void doSomething(View v){
if(v.getId()==R.id.add){
a=e1.getText().toString();
b=e2.getText().toString();
if (a == "" && b == "")
{
// alert
}
else
{
int result=Integer.parseInt(a) + Integer.parseInt(b);
t1.setText(Integer.toString(result));
}
}
}
At first you have mistake in your function - you should call e1.setText(), not t1, t1 undeclared and not initialized. And next you should use OnClickListener like this:
public class Calci extends Activity {
TextView t1;
EditText e1,e2;
Button add,sub,mul,div;
String b,a;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_calci);
e1=(EditText) findViewById(R.id.EditText01);
e2=(EditText) findViewById(R.id.EditText02);
add=(Button) findViewById(R.id.add);
sub=(Button) findViewById(R.id.sub);
mul=(Button) findViewById(R.id.mul);
div=(Button) findViewById(R.id.div);
add.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View v) {
a=e1.getText().toString();
b=e2.getText().toString();
int result=Integer.parseInt(a) + Integer.parseInt(b);
e1.setText(Integer.toString(result));
}
});
}
}
And yes, check the textfield for not empty String.
if((!a.isEmpty())&(!b.isEmpty())) { your code }
And the best way - use try-catch for catching FormatNumberException
try {
int result=Integer.parseInt(a) + Integer.parseInt(b);
e1.setText(Integer.toString(result));
}
catch (FormatNumberException e) {
Log.d("Exception", e.getMessage());
}
So you can prevent all crashes.
I just started learning Computer Science and Android development. I've been going through some helloworld demos to try and learn.
So going wild, I tried to rewrite a program that has one button for two buttons using the onClickListener. While I don't have any compiling errors, my program is force closing on me:
01-05 11:20:33.968: E/AndroidRuntime(3257): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.multbuttontest/com.example.multbuttontest.MultiButtonActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class button
My XML file looks like so (Sorry I suck at formatting):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="#dimen/activity_vertical_margin"
android:paddingLeft="#dimen/activity_horizontal_margin"
android:paddingRight="#dimen/activity_horizontal_margin"
android:paddingTop="#dimen/activity_vertical_margin"
tools:context=".MultiButtonActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/hello_world" />
<button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<button
android:id="#+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
and code:
package com.example.multbuttontest;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
public class MultiButtonActivity extends Activity implements View.OnClickListener{
Button button1, button2;
int touchCount1, touchCount2;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_button);
button1 = (Button) findViewById(R.id.button1);
button1.setText( "Touch Button 1!");
button1.setOnClickListener(this);
button2 = (Button) findViewById(R.id.button2);
button2.setText( "Touch Button 2!");
button2.setOnClickListener(this);
}
public void onClick(View v){
switch(v.getId()){
case R.id.button1:
touchCount1++;
button1.setText("Touched b1 " + touchCount1 + " times(s)");
break;
case R.id.button2:
touchCount2++;
button2.setText("Touched b2 " + touchCount2 + " times(s)");
break;
}
}
}
This is strictly just for my learning purposes, and the code does suck. Any help would be appreciated.
It's not button, it's Button. The XML tag points to the java class in the framework. And Java is case sensitive.
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="#+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Here is some code that might help you out.
MainActivity:
public class MainActivity extends Activity
{
private TextView txt1;
private Button btnCount,btnClear;
private int num1 = 1;
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt1 = (TextView) findViewById(R.id.txt1);
btnCount = (Button) findViewById(R.id.button1);
btnClear = (Button) findViewById(R.id.button2);
}
public void sendMessage(View view)
{
txt1.setText("You have clicked"+ (num1) + "times");
num1++;
}
public void clear(View view)
{
num1 = 1;
txt1.setText("You have clicked"+ (num1) + "times");
}
}
activity_main.xml:
<Button
android:id="#+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/button_send"
android:onClick="sendMessage" />
<Button
android:id="#+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#string/button_clear"
android:onClick="clear" />
<TextView
android:id="#+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="#+string/pushed" />
Output: