单击按钮时Android应用程序崩溃

时间:2014-12-21 20:37:19

标签: android eclipse

我是新的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>

1 个答案:

答案 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