获取微调项并计算后应用程序自动关闭
Application auto shuts after getting spinner item and calculating
每当我按下按钮进行计算时,应用程序会自动关闭。这可能是由于微调器(我有一个单独的应用程序来测试没有微调器的其他字段),从微调器获取项目并在正确的条件下使用它的方法是否正确?任何帮助表示赞赏!
MainActivity
public class MainActivity extends Activity implements OnItemSelectedListener{
EditText height;
EditText weight;
EditText age;
TextView calories;
Button calculate;
double h,w,wc,hc,m,wm,z,a,ac;
Spinner spinner, spinner2;
String choice;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControls();
// Spinner element
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Spinner click listener
spinner.setOnItemSelectedListener(this);
// Spinner Drop down elements
List<String> activity = new ArrayList<String>();
activity.add("Sedentary(little/no)");
activity.add("Lightly Active(1-3days/week)");
activity.add("Moderately(3-5days/week)");
activity.add("Very Active(6-7days/week)");
activity.add("Extremely Active(Physical Job/2x Training)");
// Spinner element
Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
// Spinner click listener
spinner2.setOnItemSelectedListener(this);
// Spinner Drop down elements
List<String> gender = new ArrayList<String>();
gender.add("Male");
gender.add("Female");
// Creating adapter for spinner
ArrayAdapter<String> activityAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, activity);
ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, gender);
// Drop down layout style - list view with radio button
activityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinner.setAdapter(activityAdapter);
spinner2.setAdapter(genderAdapter);}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String item = parent.getItemAtPosition(position).toString();
// Showing selected spinner item
Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
private void initControls(){
height=(EditText)findViewById(R.id.height);
weight=(EditText)findViewById(R.id.weight);
age=(EditText)findViewById(R.id.age);
calories=(TextView)findViewById(R.id.calories);
calculate=(Button)findViewById(R.id.calculate);
calculate.setOnClickListener(new Button.OnClickListener()
{public void onClick
(View v) { calculate();}});
}
private void calculate(){
h=Double.parseDouble(height.getText().toString());
w=Double.parseDouble(weight.getText().toString());
a=Double.parseDouble(age.getText().toString());
hc=h*6.25;
wc=w*10;
ac=a*5;
m= wc+hc-ac+5;
wm=wc+hc-ac-161;
Log.e("Error","messagehere1");
String choice = spinner.getSelectedItem().toString();
switch(choice){
case "Sedentary(little/no)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.2;
calories.setText(Double.toString(z));
}
else{
z=wm*1.2;
calories.setText(Double.toString(z));}
case "Lightly Active(1-3days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.375;
calories.setText(Double.toString(z));
}
else{
z=wm*1.375;
calories.setText(Double.toString(z));}
case "Moderately(3-5days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.55;
calories.setText(Double.toString(z));
}
else{
z=wm*1.55;
calories.setText(Double.toString(z));}
case "Very Active(6-7days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.725;
calories.setText(Double.toString(z));
}
else{
z=wm*1.725;
calories.setText(Double.toString(z));}
case "Extremely Active(Physical Job/2x Training)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.9;
calories.setText(Double.toString(z));
}
else{
z=wm*1.9;
calories.setText(Double.toString(z));}
}
}
Logcat
05-12 10:17:37.339: I/Choreographer(6028): Skipped 50 frames! The application may be doing too much work on its main thread.
05-12 10:17:37.379: I/PGA(6028): Attempting to create new SOCKET connectionn pid = 6028, tid = 6028
05-12 10:17:37.389: I/PGA(6028): New SOCKET connection: com.example.calories (pid 6028, tid 6028)
05-12 10:19:38.859: E/Error(6276): messagehere1
05-12 10:19:38.859: D/AndroidRuntime(6276): Shutting down VM
05-12 10:19:38.859: W/dalvikvm(6276): threadid=1: thread exiting with uncaught exception (group=0x55e15b20)
05-12 10:19:38.859: I/Process(6276): Sending signal. PID: 6276 SIG: 9
05-12 10:19:38.859: D/AndroidRuntime(6276): procName from cmdline: com.example.calories
05-12 10:19:38.859: E/AndroidRuntime(6276): in writeCrashedAppName, pkgName :com.example.calories
05-12 10:19:38.859: D/AndroidRuntime(6276): file written successfully with content: com.example.calories StringBuffer : ;com.example.calories
更改这些行
// Spinner element
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Spinner element
Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
和
spinner = (Spinner) findViewById(R.id.spinner);
spinner2 = (Spinner) findViewById(R.id.spinner2);
这会起作用。
每当我按下按钮进行计算时,应用程序会自动关闭。这可能是由于微调器(我有一个单独的应用程序来测试没有微调器的其他字段),从微调器获取项目并在正确的条件下使用它的方法是否正确?任何帮助表示赞赏!
MainActivity
public class MainActivity extends Activity implements OnItemSelectedListener{
EditText height;
EditText weight;
EditText age;
TextView calories;
Button calculate;
double h,w,wc,hc,m,wm,z,a,ac;
Spinner spinner, spinner2;
String choice;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initControls();
// Spinner element
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Spinner click listener
spinner.setOnItemSelectedListener(this);
// Spinner Drop down elements
List<String> activity = new ArrayList<String>();
activity.add("Sedentary(little/no)");
activity.add("Lightly Active(1-3days/week)");
activity.add("Moderately(3-5days/week)");
activity.add("Very Active(6-7days/week)");
activity.add("Extremely Active(Physical Job/2x Training)");
// Spinner element
Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
// Spinner click listener
spinner2.setOnItemSelectedListener(this);
// Spinner Drop down elements
List<String> gender = new ArrayList<String>();
gender.add("Male");
gender.add("Female");
// Creating adapter for spinner
ArrayAdapter<String> activityAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, activity);
ArrayAdapter<String> genderAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, gender);
// Drop down layout style - list view with radio button
activityAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// attaching data adapter to spinner
spinner.setAdapter(activityAdapter);
spinner2.setAdapter(genderAdapter);}
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
// On selecting a spinner item
String item = parent.getItemAtPosition(position).toString();
// Showing selected spinner item
Toast.makeText(parent.getContext(), "Selected: " + item, Toast.LENGTH_LONG).show();
}
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
private void initControls(){
height=(EditText)findViewById(R.id.height);
weight=(EditText)findViewById(R.id.weight);
age=(EditText)findViewById(R.id.age);
calories=(TextView)findViewById(R.id.calories);
calculate=(Button)findViewById(R.id.calculate);
calculate.setOnClickListener(new Button.OnClickListener()
{public void onClick
(View v) { calculate();}});
}
private void calculate(){
h=Double.parseDouble(height.getText().toString());
w=Double.parseDouble(weight.getText().toString());
a=Double.parseDouble(age.getText().toString());
hc=h*6.25;
wc=w*10;
ac=a*5;
m= wc+hc-ac+5;
wm=wc+hc-ac-161;
Log.e("Error","messagehere1");
String choice = spinner.getSelectedItem().toString();
switch(choice){
case "Sedentary(little/no)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.2;
calories.setText(Double.toString(z));
}
else{
z=wm*1.2;
calories.setText(Double.toString(z));}
case "Lightly Active(1-3days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.375;
calories.setText(Double.toString(z));
}
else{
z=wm*1.375;
calories.setText(Double.toString(z));}
case "Moderately(3-5days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.55;
calories.setText(Double.toString(z));
}
else{
z=wm*1.55;
calories.setText(Double.toString(z));}
case "Very Active(6-7days/week)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.725;
calories.setText(Double.toString(z));
}
else{
z=wm*1.725;
calories.setText(Double.toString(z));}
case "Extremely Active(Physical Job/2x Training)":
if(spinner2.getSelectedItem().equals("Male")){
z=m*1.9;
calories.setText(Double.toString(z));
}
else{
z=wm*1.9;
calories.setText(Double.toString(z));}
}
}
Logcat
05-12 10:17:37.339: I/Choreographer(6028): Skipped 50 frames! The application may be doing too much work on its main thread.
05-12 10:17:37.379: I/PGA(6028): Attempting to create new SOCKET connectionn pid = 6028, tid = 6028
05-12 10:17:37.389: I/PGA(6028): New SOCKET connection: com.example.calories (pid 6028, tid 6028)
05-12 10:19:38.859: E/Error(6276): messagehere1
05-12 10:19:38.859: D/AndroidRuntime(6276): Shutting down VM
05-12 10:19:38.859: W/dalvikvm(6276): threadid=1: thread exiting with uncaught exception (group=0x55e15b20)
05-12 10:19:38.859: I/Process(6276): Sending signal. PID: 6276 SIG: 9
05-12 10:19:38.859: D/AndroidRuntime(6276): procName from cmdline: com.example.calories
05-12 10:19:38.859: E/AndroidRuntime(6276): in writeCrashedAppName, pkgName :com.example.calories
05-12 10:19:38.859: D/AndroidRuntime(6276): file written successfully with content: com.example.calories StringBuffer : ;com.example.calories
更改这些行
// Spinner element
Spinner spinner = (Spinner) findViewById(R.id.spinner);
// Spinner element
Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
和
spinner = (Spinner) findViewById(R.id.spinner);
spinner2 = (Spinner) findViewById(R.id.spinner2);
这会起作用。