致命异常:主要无法启动Activity componentInfo

时间:2013-08-30 13:51:05

标签: android

当我单击应用程序上的按钮时,我在日志中收到上述错误。我将发布MainActivity和接收活动的代码。

protected void onCreate(Bundle savedInstanceState)throws NullPointerException {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button = (Button) findViewById(R.id.calculate);

    button.setOnClickListener(onSave);


}

@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;
}
View.OnClickListener onSave = new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.calculate)
            calculate(v);
        }


    };

在onClick上计算上面是我进行计算的方法,我将在下面发布。

public void calculate(View view){
    Intent calculate = new Intent(this,Show_returns.class);
    Bundle extras = new Bundle();
    EditText monthlySalaryString = (EditText)findViewById(R.id.monthly_salary);
    double monthlySalary = stripRFromInputString(monthlySalaryString.getText().toString());
    EditText ageString = (EditText)findViewById(R.id.age);
    int  age = Integer.parseInt(ageString.getText().toString());
    double tax = ComputeTax.taxableCategory(age, monthlySalary);
    double annualSalary = monthlySalary * 12;
    EditText percInvestView = (EditText) findViewById(R.id.perc_invest);
    double percInvest = stripRFromInputString(percInvestView.getText().toString())/100;
    EditText numYearsInvestString = (EditText) findViewById(R.id.num_years_invest);
    int numYearsInvest = Integer.parseInt(numYearsInvestString.getText().toString());
    EditText lowTierInvestView = (EditText) findViewById(R.id.low_tier_invest);
    double  lowTierInvest = stripRFromInputString(lowTierInvestView.getText().toString())/100;
    EditText medTierInvestView = (EditText) findViewById(R.id.med_tier_invest);
    double medTierInvest = stripRFromInputString(medTierInvestView.getText().toString())/100;
    EditText highTierInvestView = (EditText)findViewById(R.id.high_tier_invest);
    double highTierInvest = stripRFromInputString(highTierInvestView.getText().toString())/100;
    double lowTierInvestCompound = Investments.lowTierInvestmentReturns(annualSalary, tax, numYearsInvest, percInvest, lowTierInvest);
    double medTierInvestCompound = Investments.lowTierInvestmentReturns(annualSalary, tax, numYearsInvest, percInvest,medTierInvest);
    double highTierInvestCompound = Investments.lowTierInvestmentReturns(annualSalary, tax, numYearsInvest, percInvest,highTierInvest);
    String lowTierInvestString = String.valueOf(Math.floor(lowTierInvestCompound));
    String medTierInvestString = String.valueOf(Math.floor(medTierInvestCompound));
    String highTierInvestString = String.valueOf(Math.floor(highTierInvestCompound));

    extras.putString(LOW,lowTierInvestString);
    extras.putString(MED,medTierInvestString);
    extras.putString(HIGH,highTierInvestString);
    extras.putDouble(TAX,tax);
    startActivity(calculate);
}

以下是接收活动的代码。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent receive =getIntent();
    Bundle extras = receive.getExtras();
    String lowTierInvest = extras.getString(MainActivity.LOW);
    String medTierInvest = extras.getString(MainActivity.MED);
    String highTierInvest =extras.getString(MainActivity.HIGH);
    double tax = extras.getDouble(MainActivity.TAX);

    String TaxDisplay = String.format("Total annual tax amount is: R%0.2fc", tax);
    String lowTierDisplay = String.format("Compounded amount for low tier after 3 years is: R%0.2c", lowTierInvest);
    String medTierDisplay = String.format("Compounded amount for medium tier after 3 years is: R%0.2fc", medTierInvest);
    String highTierDisplay = String.format("Compounded amount for medium tier after 3 years is: R%0.2fc", highTierInvest);
    TextView textView = new TextView(this);
    textView.setTextSize(18);
    textView.setText(TaxDisplay +" \n"+ lowTierDisplay +"\n" +medTierDisplay + "\n" +highTierDisplay);
    setContentView(textView);

}

这是我的logcat。

08-30 09:03:07.667: E/AndroidRuntime(1237): FATAL EXCEPTION: main
08-30 09:03:07.667: E/AndroidRuntime(1237): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.investments/com.example.investments.Show_returns}: java.lang.NullPointerException
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.os.Looper.loop(Looper.java:137)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at java.lang.reflect.Method.invokeNative(Native Method)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at java.lang.reflect.Method.invoke(Method.java:525)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at dalvik.system.NativeStart.main(Native Method)
08-30 09:03:07.667: E/AndroidRuntime(1237): Caused by: java.lang.NullPointerException
08-30 09:03:07.667: E/AndroidRuntime(1237):     at com.example.investments.Show_returns.onCreate(Show_returns.java:20)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.Activity.performCreate(Activity.java:5133)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
08-30 09:03:07.667: E/AndroidRuntime(1237):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
08-30 09:03:07.667: E/AndroidRuntime(1237):     ... 11 more

2 个答案:

答案 0 :(得分:1)

calculate()内,实际上附加内容未附加到intent.Try

Intent calculate = new Intent(this,Show_returns.class);
calculate.putExtra(LOW,lowTierInvestString);

答案 1 :(得分:0)

问题是你正在创建一个包含你发送的意图的包,但是你从来没有把包放在意图中,所以当你试图得到它时没有要获得的包

您需要执行calculate.putExtra(extras);