我是新的Android开发人员:D我的应用程序遇到一个小问题,当我点击按钮移动到另一个活动时,应用程序崩溃了。我尝试了一些解决方案,例如在clickListner之前在顶部声明按钮并修改intent但是没有工作。有谁可以帮助我吗?
MainActivity.java
package com.example.geocalc;
import android.support.v7.app.ActionBarActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button CiButton = (Button) findViewById(R.id.CircleButton);
final Button CyButton = (Button) findViewById(R.id.CylinderButton);
final Button CuButton = (Button) findViewById(R.id.CubeButton);
final Button TriButton = (Button) findViewById(R.id.TriangleButton);
final Button SpButton = (Button) findViewById(R.id.SphereButton);
final Button SqButton = (Button) findViewById(R.id.SquareButton);
final Button RecButton = (Button) findViewById(R.id.RectangleButton);
final Button RPButton = (Button) findViewById(R.id.RectangularPrismButton);
CiButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, CircleActivity.class);
MainActivity.this.startActivity(intent);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
CircleActivity.java(我想要达到的活动):
package com.example.geocalc;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class CircleActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_circle);
final Button button = (Button) findViewById(R.id.CalculateButton);
final EditText radiustext = (EditText) findViewById(R.id.RadiusText);
final EditText areatext = (EditText) findViewById(R.id.AreaText);
final EditText circtext = (EditText) findViewById(R.id.CircumferenceText);
double radius;
final double area;
final double circumference;
radius= Double.parseDouble(radiustext.getText().toString());
area = Math.round((Math.PI*Math.pow(radius,2.0)*Math.pow(10,4))/Math.pow(10, 4));
circumference = Math.round ((Math.PI*2*radius*Math.pow(10, 4))/Math.pow(10, 4));
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
areatext.setText(Double.toString(area));
circtext.setText(Double.toString(circumference));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.circle, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Android Manifist:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.geocalc"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".CircleActivity"
android:label="@string/title_activity_circle" >
</activity>
</application>
</manifest>
答案 0 :(得分:2)
您当前的活动会尝试使用onCreate
方法计算周长,并将其显示在TextView
中。但是,它可能会失败
radius= Double.parseDouble(radiustext.getText().toString());
如果您没有默认设置EditText
的有效数字。
可以通过为radiustext
成员设置默认文本来解决此问题(Double.parseDouble
不会抛出异常)。
但是我假设您希望按需计算这个周长,所以您应该将计算放在点击处理程序中:
button.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
try
{
final double radius = Double.parseDouble(radiustext.getText().toString());
final double area = Math.round((Math.PI * Math.pow(radius, 2.0) * Math.pow(10, 4)) / Math.pow(10, 4));
final double circumference = Math.round((Math.PI * 2 * radius * Math.pow(10, 4)) / Math.pow(10, 4));
areatext.setText(Double.toString(area));
circtext.setText(Double.toString(circumference));
}
catch (NumberFormatException e)
{
Log.e("Click", "Exception caught in .onClick", e);
}
}
});
try-catch
将处理仍可能被抛出的任何NumberFormatException
。