آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

Force Close هنگام وارد نشدن ورودی

h_r_v  12 سال پیش  12 سال پیش
+1 0

سلام! یه برنامه هست که دو تا ورودی میگیره و محاسبات انجام میده! اما اگه یوزر ورودی نده برنامه Force CLose میده! توی اینترنت گشتم و از کد

 try{
String Weight = numWeight.getText().toString();
}catch(NumberFormatException e){
//do something here
}

استفاده کردم که موقع وارد نکردن یه پیغام بده اما وقتی این رو میدم، متغیر i که مقدارشو از Weight میگیره خطا میشه! یعنی نمیتونه مقدار بگیره!
چی کار کنم که حل شه مشکل!؟

سورس:

 package com.yekteam.chaghsanj;

import com.yekteam.bmicalculator.R;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText numWeight = (EditText) findViewById(R.id.numWeight);
final EditText numHeight = (EditText) findViewById(R.id.numHeight);
final Button btnCalculate = (Button) findViewById(R.id.btnCalculate);
final TextView txtResult = (TextView) findViewById(R.id.txtResult);
final ImageView imageView1 = (ImageView) findViewById(R.id.browser);
final ImageView imageView2 = (ImageView) findViewById(R.id.twitter);

imageView1.setVisibility(View.INVISIBLE);
imageView2.setVisibility(View.INVISIBLE);


btnCalculate.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

imageView1.setVisibility(View.INVISIBLE);
imageView2.setVisibility(View.INVISIBLE);



String Weight = numWeight.getText().toString();

double i = Double.parseDouble(Weight);

String Height = numHeight.getText().toString();

double j = Double.parseDouble(Height);
double k;
k = i/(j*j);
txtResult.setText("Your BMI is: " + k);

if (k >= 18.5 && k <= 25){

txtResult.setText("Normal & Your BMI is: " + k);
imageView1.setVisibility(View.VISIBLE);
}
else if (k > 25 && k <= 38){
txtResult.setText("Overweight & Your BMI is: " + k);
imageView2.setVisibility(View.VISIBLE);


}





}


});
if (savedInstanceState == null) {
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, 1, 1, "About");

getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

Intent intent = new Intent(MainActivity.this, AboutPage.class);
MainActivity.this.startActivity(intent);
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}


}


 برای این سوال 5 پاسخ وجود دارد.
پاسخ به سوال 
Spirit  12 سال پیش
+2 0

سلام!

مثلا :  شما باید اول با یه شرط برسی کنید که آیا کاربر ورودی وارد کرده  یا نه؟

if (numWeight.getText().toString().length() > 0 && numHeight.getText().toString().length() > 0) {
// محسبات رو اینجا انجام بدید
} else {
Toast.makeText(arg0.getContext(), "ورودی ها خالی هستن!", Toast.LENGTH_SHORT).show();
}

حالا میتونید هر یک از ورودی ها رو جداگونه بررسی کنید تا پیغام متناسب رو هم به کاربر نشون بدید.

 

 
پاسخ به سوال 
h_r_v  12 سال پیش
0 0

باز هم فورس کلوز میده
کد :

 package com.yekteam.chaghsanj;

import com.yekteam.bmicalculator.R;

import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBar;
import android.support.v4.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.os.Build;

public class MainActivity extends ActionBarActivity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final EditText numWeight = (EditText) findViewById(R.id.numWeight);
final EditText numHeight = (EditText) findViewById(R.id.numHeight);
final Button btnCalculate = (Button) findViewById(R.id.btnCalculate);
final TextView txtResult = (TextView) findViewById(R.id.txtResult);
final ImageView imageView1 = (ImageView) findViewById(R.id.browser);
final ImageView imageView2 = (ImageView) findViewById(R.id.twitter);

imageView1.setVisibility(View.INVISIBLE);
imageView2.setVisibility(View.INVISIBLE);


btnCalculate.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

imageView1.setVisibility(View.INVISIBLE);
imageView2.setVisibility(View.INVISIBLE);
String Weight = numWeight.getText().toString();
double i = Double.parseDouble(Weight);
String Height = numHeight.getText().toString();
double j = Double.parseDouble(Height);
double k;
k = i/(j*j);
if (numWeight.getText().toString().length() > 0 && numHeight.getText().toString().length() > 0) {
if (k >= 18.5 && k <= 25){

txtResult.setText("Normal & Your BMI is: " + k);
imageView1.setVisibility(View.VISIBLE);
}
else if (k > 25 && k <= 38){
txtResult.setText("Overweight & Your BMI is: " + k);
imageView2.setVisibility(View.VISIBLE);


}
} else {
Toast.makeText(arg0.getContext(), "Empty Fields", Toast.LENGTH_SHORT).show();
}


txtResult.setText("Your BMI is: " + k);






}


});
if (savedInstanceState == null) {
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, 1, 1, "About");

getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

Intent intent = new Intent(MainActivity.this, AboutPage.class);
MainActivity.this.startActivity(intent);
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}


}


پاسخ به سوال 
Spirit  12 سال پیش
+2 0

مشکلی شما داری اینه که هنوز درک صحیحی نداری از برنامه نویسی یا اصلا به چیزهایی که مینویسی فکر نمیکنی ، باید خط به خط ببینی برنامه چیکار میکنه، الان شما شرط رو بعد از مقدار دهی متغیر ها قرار دادی ،

StringWeight= numWeight.getText().toString();
double i =Double.parseDouble(Weight);
StringHeight= numHeight.getText().toString();
double j =Double.parseDouble(Height);
double k;
k = i/(j*j);

بهتره که این کد ها رو توی شرط بزاری ، تا اگه ورودی در کار بود محاسبات رو انجام بده ،این در حالیه که شما الان بیشتر محاسبات رو انجام میدی و بعد میای وجود ورودی رو بررسی میکنی.

البته ماهم در زمان شروع به کار نمیدونستیم html چیه چه برسه با این جور چیزا. فقط رو کدها توجه کن چه خودت مینویسی چه از یجای دیگه میخونی.

پاسخ به سوال 
h_r_v  12 سال پیش
0 0

ممنون از پاسختون
مشکل من اینه که هر چی توی اون if ـی که شما گفتید میزارم به عنوان متغیر نمیتونم بعدا ازش استفاده کنم و میگه تعریف نشده!

واسه همین مجبور شدم کلشو بزارم توی اون if

الان اینی که شما گفتید رو زدم، اما بعدش هیچکدوم از اون متغیر های تو شرط if شناخته نمیشن :|

0 0
یه پروژه ساختم همین کدهای شما رو توش نوشتم برای من هیچ مشکلی نداره ، دیگه نمیدونم مشکل از کجاست. (12 سال پیش)
پاسخ به سوال 
sadeghbarout  12 سال پیش
+1 0

سلام

همون جواب Spirit عزیز کاملا درسته . 

به جای کدهای زیر :

String Weight = numWeight.getText().toString();
double i = Double.parseDouble(Weight);
String Height = numHeight.getText().toString();
double j = Double.parseDouble(Height);

این کدها رو بذار :

 double i = 0;
double j = 0;
if (numWeight.getText().toString().length() > 0 && numHeight.getText().toString().length() > 0) {
i = Double.parseDouble(Weight);
j = Double.parseDouble(Height);
} else {
Toast.makeText(arg0.getContext(), "ورودی ها خالی هستن!", Toast.LENGTH_SHORT).show();
}
0 0
نمیدونم چرا کدها رو رنگی نشون نمیده! شما نمیدونید چرا؟؟ (12 سال پیش)
0 0
رنگی شد: کپی در Notepad و بعد Paste (12 سال پیش)
0 0
ممنون . استاد اینم یکی از مشکلاته. اگه کد رو بزنیم بعد کد رو انتخاب کنیم و گزینه clear format ی که توی نوار ابزار ها گذاشتید رو بزنیم ، دیگه کد ها رنگی درج نمیشن.مثلا اینجا من برای یه دست شدن متنم ، این کارو کرده بودم که اینجوری شده بود. (12 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .