Can't get integer value from EditText - java

I can't get integer value from EdiText(edText). I don't know why this problem occurs. The part under Catch is executed instead of Try.
public class Ybus_Activity extends Activity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ybus);
//Creating Linear Layout
final LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
final LinearLayout main = (LinearLayout)findViewById(R.id.android_main_layout);
//Creating TextView
TextView getData=new TextView(this);
getData.setText("Enter the number of LineData : ");
getData.setId(5);
getData.setLayoutParams(params);
main.addView(getData);
//Creating EdiText
final EditText edText = new EditText(this);
edText.setId(3);
edText.setLayoutParams(params);
edText .setWidth(100);
edText .setImeOptions(EditorInfo.IME_ACTION_NEXT);
edText .setInputType(InputType.TYPE_CLASS_NUMBER);
edText .setKeyListener(DigitsKeyListener.getInstance());
edText .setMaxLines(1);
main.addView(edText );
final String ed=edText.getText().toString();
//Creating Button for displaying integer from edText
Button bt = new Button(this);
bt.setText("Click to enter Linedata");
bt.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
main.addView(bt);
final TextView text = new TextView(this);
bt.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
int i = 0;
try{
i =Integer.parseInt(ed);
text.setText(i);
}catch(NumberFormatException ex){
text.setText("Value at TextView is not a valid integer");
}
}
});
main.addView(text);
}
}

Hi you can use a string to show at textview so you can do as follows
bt.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
String ed=edText.getText().toString();
int i = 0;
try{
i =Integer.parseInt(ed);
//setting value here
text.setText(String.valueof(i));
//or you can do like this
// text.setText(i+"");
}catch(NumberFormatException ex){
text.setText("Value at TextView is not a valid integer");
}
}
});

Convert int to String for displaying your content into TextView. It's because of setText(CharacterSequence) has set CharacterSequence.
text.setText(String.valueof(i));
Implement your Button click listener this way:
bt.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
int i = 0;
try{
String ed=edText.getText().toString();
i =Integer.parseInt(ed);
text.setText(String.valueOf(i);
}catch(NumberFormatException ex){
text.setText("Value at TextView is not a valid integer");
}
}
});

Move this String ed=edText.getText().toString();
bt.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
int i = 0;
try{
String ed=edText.getText().toString();
i =Integer.parseInt(ed);
text.setText(String.valueOf(i));
}catch(NumberFormatException ex){
e.printStacktrace();
}
}
});
inside button click listener
Also setText(int)(i is a int value i) looks for a Resource with the id mentioned. If not found you get ResourceNotFOundException. Instead use setText(CharacterSequence) for which you need to use text.setText(String.valueOf(i));

This to string:
text.setText(i+"");
And get int value
int a = Integer.parseInt(text.getText().toString());

You change the line :
i =Integer.parseInt(ed);
text.setText(i);
to:
i = Integer.parseInt(edText.getText().toString());
text.setText(i+"");

Related

set input range from 1-30

i m getting an input using an EditText from the user but i don't want input more than 30 that is his input should be from 1-30 range, how should i do it??
final EditText personcount = findViewById(R.id.personcount);
final TextView personcountview = findViewById(R.id.personcountview);
final TextView itemcountview = findViewById(R.id.itemcountview);
final EditText itemcount = findViewById(R.id.itemcount);
personcount.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1)});
itemcount.setFilters(new InputFilter[]{new InputFilter.LengthFilter(1)});
Toast.makeText(this, "EditText limit set to a single digit", Toast.LENGTH_SHORT).show();
Button next1 = findViewById(R.id.next1);
next1.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
int num1= Integer.parseInt(personcount.getText().toString());
int num2 = Integer.parseInt(itemcount.getText().toString());
Intent personname = new Intent(getApplicationContext(), personname.class);
personname.putExtra("num", num1);
personname.putExtra("num2",num2);
startActivity(personname);
}
you can set maxLength in your editText in xml :
android:maxLength="30"
or set filter :
TextView edit= new TextView(...);
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(30);
edit.setFilters(filterArray);

How do i use getText() on an editText field while the editText is inside another onclick?

Currently the issue with my application is that when switching views of my application via a floating action buttons onClickListener, i cannot access what is being put inside my editText because it is being created in a separate for loop.
start_button.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View view) {
for(int j=0;j<amount;j++){
...
final EditText team = new EditText(MainActivity.this);
team.setHint("TeamName");
team.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
ll.addView(team);
...
});
lm.addView(ll);
}
fab2.setVisibility(View.VISIBLE);
fab2.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if(lm.getVisibility()==View.GONE|lm2.getVisibility()==View.VISIBLE) {
lm2.setVisibility(View.GONE);
lm2.removeAllViews();
lm.setVisibility(View.VISIBLE);
}else{
if(lm.getVisibility()==View.VISIBLE|lm2.getVisibility()==View.GONE){
lm.setVisibility(View.GONE);
for(int x=0;x<amount;x++){
if(myStringArray[x]==null){
myStringArray[x]="Empty Team Name";
x--;
}else {
myStringArray[x] = (team.getText().toString());
TextView score_name = new TextView(MainActivity.this);
TextView final_score = new TextView(MainActivity.this);
score_name.setTextSize(15);
score_name.setTypeface(null, Typeface.BOLD);
final_score.setTextSize(25);
score_name.setLayoutParams(params);
final_score.setLayoutParams(params);
lm2.addView(score_name);
lm2.addView(final_score);
String a = Arrays.toString(myIntArray);
String ar[] = a.substring(1, a.length() - 1).split(", ");
score_name.append(myStringArray[x]);
final_score.append(ar[x]);
score_name.append("\n");
}
}
lm2.setVisibility(View.VISIBLE);
}
}
});
currently it is not recognizing the variable (team) when using
myStringArray[x] = (team.getText().toString());
I have tried moving around my initializer, {{final EditText team = new EditText(MainActivity.this);}}, but if i move it outside the for loop the application crashes upon the onclick of start_button
Define your EditText team out site of start_button.setOnClickListener(new OnClickListener() then initialise it in onClickListener method. Check the code below.
final EditText team;
start_button.setOnClickListener(new OnClickListener() {
#Override
public void onClick(View view) {
for(int j=0;j<amount;j++){
team = new EditText(MainActivity.this);
team.setHint("TeamName");
team.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
ll.addView(team);
...
});
lm.addView(ll);
}
fab2.setVisibility(View.VISIBLE);
fab2.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
if(lm.getVisibility()==View.GONE|lm2.getVisibility()==View.VISIBLE) {
lm2.setVisibility(View.GONE);
lm2.removeAllViews();
lm.setVisibility(View.VISIBLE);
}else{
if(lm.getVisibility()==View.VISIBLE|lm2.getVisibility()==View.GONE){
lm.setVisibility(View.GONE);
for(int x=0;x<amount;x++){
if(myStringArray[x]==null){
myStringArray[x]="Empty Team Name";
x--;
}else {
myStringArray[x] = (team.getText().toString());
TextView score_name = new TextView(MainActivity.this);
TextView final_score = new TextView(MainActivity.this);
score_name.setTextSize(15);
score_name.setTypeface(null, Typeface.BOLD);
final_score.setTextSize(25);
score_name.setLayoutParams(params);
final_score.setLayoutParams(params);
lm2.addView(score_name);
lm2.addView(final_score);
String a = Arrays.toString(myIntArray);
String ar[] = a.substring(1, a.length() - 1).split(", ");
score_name.append(myStringArray[x]);
final_score.append(ar[x]);
score_name.append("\n");
}
}
lm2.setVisibility(View.VISIBLE);
}
}
});

Not able to access global variables across activity

In this code, I want the strings sh1, shg2 and shg3 to be displayed according to the users input in text edit. I have created a saver class to set and retrieve the variables. But although they are global variables, shg1 ,sh2 and sh3 do not store the values and don't display anything. Thanks for your help
Saver class:
public class Saver extends Application {
public String shg1,shg2,shg3;
public String getShg1() {
return shg1;
}
public void setShg1(String s1) {
shg1= s1;
}
public String getShg2() {
return shg2;
}
public void setShg2(String s1) {
shg2= s1;
}
public String getShg3() {
return shg3;
}
public void setShg3(String s1) {
shg3= s1;
}
}
SHGDetails class:
public class SHGDetails extends AppCompatActivity {
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_shgdetails);
final EditText e1 = (EditText) findViewById(R.id.shg1);
final EditText e2 = (EditText) findViewById(R.id.shg2);
final EditText e3 = (EditText) findViewById(R.id.shg3);
final Button b1 = (Button) findViewById(R.id.b3);
final LinearLayout l = findViewById(R.id.linearl);
final TextView t1 = findViewById(R.id.textView2);
final TextView t2 = findViewById(R.id.textView3);
final TextView t3 = findViewById(R.id.textView4);
b1.setVisibility(View.INVISIBLE);
e1.setVisibility(View.INVISIBLE);
e2.setVisibility(View.INVISIBLE);
e3.setVisibility(View.INVISIBLE);
Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE)
.getBoolean("isFirstRun", true);
Saver s = new Saver();
if (isFirstRun) {
//show start activity
b1.setVisibility(View.VISIBLE);
e1.setVisibility(View.VISIBLE);
e2.setVisibility(View.VISIBLE);
e3.setVisibility(View.VISIBLE);
String text = e1.getText().toString();
String text2 = e2.getText().toString();
String text3 = e3.getText().toString();
((Saver) this.getApplication()).setShg1(text);
((Saver) this.getApplication()).setShg2(text2);
((Saver) this.getApplication()).setShg3(text3);
b1.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
l.removeView(e1);
l.removeView(e2);
l.removeView(e3);
l.removeView(b1);
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit()
.putBoolean("isFirstRun", false).commit();
}
});
}
else {
Toast.makeText(getApplicationContext(), s.getShg1(),Toast.LENGTH_LONG).show();
t1.setText(((Saver) this.getApplication()).getShg1());
t2.setText(((Saver) this.getApplication()).getShg2());
t3.setText(((Saver) this.getApplication()).getShg3());
}
}
}
You need to fetch data and set when user press the button so there's no values before button click so do this
b1.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
//
String text = e1.getText().toString();
String text2 = e2.getText().toString();
String text3 = e3.getText().toString();
((Saver) SHGDetails.this.getApplication()).setShg1(text);
((Saver) SHGDetails.this.getApplication()).setShg2(text2);
((Saver) SHGDetails.this.getApplication()).setShg3(text3);
l.removeView(e1);
l.removeView(e2);
l.removeView(e3);
l.removeView(b1);
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit()
.putBoolean("isFirstRun", false).commit();
}
});
and seems like you already have registered your application in manifest.

Exception Handling in If statement?

I'm struggling to create a very simple app. There are Product Names with matching Product Numbers. User enters a Number and the corresponding Name appears.
editTextField1 = the number user types
button1 = the search button
editTextField2 = the product name appears
Now my code is working but there is only one problem, when the user doesn't enter anything and clicks on button1 the app crashes. So I need some sort of exception handler maybe? Im struggling to get my head around it. I know how I'm coding, by declaring loads of variables, is long-winded lol.
public class MainActivity extends AppCompatActivity {
private Button button1;
private EditText editText1;
private EditText editText2;
private int a = 123;
private String b = "TV";
private int c = 333;
private String d = "Radio";
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.button1);
editText1 = (EditText) findViewById(R.id.editText1);
editText2 = (EditText) findViewById(R.id.editText2);
View.OnClickListener myOnClickListener = new View.OnClickListener() {
#Override
public void onClick(View v) {
double pNumber = Double.parseDouble(editText1.getText().toString());
if(pNumber == a){
editText2.setText(b);
}
else if (pNumber == c){
editText2.setText(d);
}
else
editText2.setText("Invalid Product Number");
}
};
button1.setOnClickListener(myOnClickListener);
In Addition to Spartas Answer, it would also be a good idea to check for a valid Double input:
try {
double pNumber = Double.parseDouble(text);
catch(NumberFormatException e){
//Do ExceptionHandling
}
Use this:
View.OnClickListener myOnClickListener = new View.OnClickListener() {
#Override
public void onClick(View v) {
String text = editText1.getText().toString();
if(!TextUtils.isEmpty(text)) {
// EditText1 is not empty
try {
double pNumber = Double.parseDouble(text);
if(pNumber == a)
editText2.setText(b);
else if (pNumber == c){
editText2.setText(d);
else
editText2.setText("Invalid Product Number");
}
catch(NumberFormatException e) {
// Invalid input, not a double
editText2.setText("Invalid double input");
}
}
else {
// EditText1 is empty
editText2.setText("EditText1 is empty");
}
}
};
There are basically 2 ways how you can handle this
1) Use try - catch
try{
double pNumber = Double.parseDouble(editText1.getText().toString());
}catch(NumberFormatException e){
//show a message to user
}
2) Use input sanitation
String number = editText1.getText().toString();
boolean isNumber = number.matches("^-?\\d+$"));//haven't tried this though
if(!isNumber) //if not number
//show a message to user

Difficulty saving and storing

I am trying to save and store data in an android app using java. At the moment the data will not save and it causes my app to crash. Can anyone make any suggestions to my code? Part of my page includes a total budget and I am difficulty storing and saving the total budget.
public class Summary extends Activity implements TextWatcher, View.OnClickListener
{
DecimalFormat df = new DecimalFormat("£0.00");
int noOfGifts, giftsPurchased;
double cost;
EditText budgetEntered;
double savedBudget = 0;
String budgetString;
#Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.summary);
budgetEntered = (EditText) findViewById(R.id.s2TotalBudget);
budgetEntered.addTextChangedListener(this);
Button saveBudget = (Button) findViewById(R.id.s2ViewList);
saveBudget.setOnClickListener(saveButtonListener);
if(savedBudget != 0)
{
saveBudget.setText(budgetString);
}
Bundle passedInfo = getIntent().getExtras();
if (passedInfo != null)
{
cost = passedInfo.getDouble("cost");
noOfGifts = passedInfo.getInt("noOfGifts");
giftsPurchased = passedInfo.getInt("giftsPurchased");
}
Button logoutButton = (Button) findViewById(R.id.s2LogoutButton);
logoutButton.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
Intent myIntent = new Intent(Summary.this, MainActivity.class);
startActivity(myIntent);
}
});
Button viewList = (Button) findViewById(R.id.s2ViewList);
viewList.setOnClickListener(new View.OnClickListener()
{
public void onClick(View view)
{
Intent myIntent = new Intent(Summary.this, GiftList.class);
startActivity(myIntent);
}
});
String [][] summary = {{"Number of Presents to buy: ", (noOfGifts + "")},
{"Number of Presents bought:", (giftsPurchased + "")},
{"Cost: £", (cost + "")},
{"Budget: £", "50"}};
String passedBudget=null;
//convert totalPresents to double from String
String tempPresents = summary[0][1];
int presents = Integer.parseInt(tempPresents);
//convert presentsBought to double from String
String tempBought = summary[1][1];
int presentsToBuy = Integer.parseInt(tempBought);
//Number of presents
TextView s2PresentResult = (TextView) findViewById(R.id.s2PresentsResult);
s2PresentResult.setText(summary[0][1]);
//Number of presents to buy
TextView s2PresentsBuyResult = (TextView) findViewById(R.id.s2PresntsBuyResult);
s2PresentsBuyResult.setText((noOfGifts - giftsPurchased) + "");
Bundle passedId = getIntent().getExtras();
if (passedId != null)
{
passedBudget = passedId.getString("Enter Budget");
}
//EditText s2TotalBudget = (EditText) findViewById(R.id.s2TotalBudget);
//s2TotalBudget .addTextChangedListener((android.text.TextWatcher) this);
//s2TotalBudget .setText(passedBudget, TextView.BufferType.EDITABLE);
//Number of people
//TextView s2TotalBudget = (TextView) findViewById(R.id.s2TotalBudget);
//s2TotalBudget.setText("Enter budget");
//Number of people
TextView s2TotalCost = (TextView) findViewById(R.id.s2TotalCost);
s2TotalCost.setText(df.format(Double.parseDouble(summary[2][1])));
//Output if over or under budget
TextView s2CalculateOverBudget = (TextView) findViewById(R.id.s2CalculateOverBudget);
//convert totalCost to double from String
String temp = summary[2][1];
double totalCost = Double.parseDouble(temp);
//convert totalBudget to double from String
String tempTwo = "14";
double totalBudget = Double.parseDouble(tempTwo);
if((totalCost>totalBudget)&&(totalBudget!=0))
{
s2CalculateOverBudget.setTextColor(Color.rgb(209,0,0));
s2CalculateOverBudget.setText("You are over budget");
}
else if(totalBudget==0){
s2CalculateOverBudget.setText("");
}
else {
s2CalculateOverBudget.setText("You are within budget");
}
}
public View.OnClickListener saveButtonListener = new View.OnClickListener()
{
#Override
public void onClick(View v)
{
if(budgetEntered.getText().length()>0)
{
budgetString = budgetEntered.getText().toString();
}
}
};
public void onClick(View v)
{
}
#Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
#Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
}
#Override
public void afterTextChanged(Editable s)
{
this it the best way to store and load value in Android:
save values: (put this where you want to save the values, for example in the onStop or onPause method. Or, in your case, in the onClick method)
SharedPreferences settings = getSharedPreferences("MyPref", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("testValue", value);
editor.commit();
load values:
SharedPreferences settings = getSharedPreferences("MyPref", 0);
value = settings.getInt("testValue", defValue);

Categories

Resources