首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当引用NullPointerException时totalPriceEditText

当引用NullPointerException时totalPriceEditText
EN

Stack Overflow用户
提问于 2013-12-05 01:37:36
回答 1查看 72关注 0票数 0

我是Java和Android的新手,我想制作一个Android程序,让用户输入标签价格,并且程序能够显示最终价格。(税后为8%)我需要使用Netbean。没有红线,也没有错误消息。但是每次我运行它时,都会在仿真程序中显示“不幸的是,税收价格计算器必须停止”。请帮帮我。我很感激大家的回答。谢谢!

TaxCalculator.java:

代码语言:javascript
复制
package com.finalproject.taxcalculator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.text.TextWatcher;
import android.text.Editable;

public class TaxCalculator extends Activity{

private static final String TAG_PRICE = "TAG_PRICE";
private static final String TOTAL_PRICE = "TOTAL_PRICE";
private static final double TAX_RATE = 0.08;//Tax rate in Philadelphia

private double tagPrice;//Tag price entered by the user
private double totalPrice;//Total prices calculated by the program

private EditText tagPriceEditText;//accepts input for tag prices
private EditText totalPriceEditText;//displays total prices after tax


/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState)
{
    // constants used when saving/restoring state
    super.onCreate(savedInstanceState);// call superclass's version
    setContentView(R.layout.main);// inflate the GUI

    // check if app just started or is being restored from memory
    if ( savedInstanceState == null ) // the app just started running
       {
            tagPrice = 0.0; // initialize the tag price to zero

       } // end if
    else // app is being restored from memory, not executed from scratch
       {
         // initialize the tag price to saved amount
            tagPrice = savedInstanceState.getDouble(TAG_PRICE); 

       } // end else

         // get references to tag and total price edit text
            tagPriceEditText = (EditText)findViewById(R.id.tagPriceEditText);
            tagPriceEditText = (EditText)findViewById(R.id.totalPriceEditText);

         // tagPriceEditTextWatcher handles tagPriceEditText's onTextChanged event
            tagPriceEditText.addTextChangedListener(tagPriceEditTextWatcher);
}// end method onCreate


private void updateStandard() 
{
    // calculate the total price after the tax
    totalPrice = tagPrice * (1 + TAX_RATE);
    // set totalPriceEditText's text to total price
    totalPriceEditText.setText(String.format("%.02f", totalPrice));
} // end method updateStandard

// save values of tagPriceEditText 
@Override
protected void onSaveInstanceState(Bundle outState)
{
   super.onSaveInstanceState(outState);

   outState.putDouble(TAG_PRICE, tagPrice);


} // end method onSaveInstanceState

// event-handling object that responds to tagPriceEditText's events    
private TextWatcher tagPriceEditTextWatcher = new TextWatcher() 
{
  // called when the user enters a number
  @Override
  public void onTextChanged(CharSequence s, int start, 
     int before, int count) 
  {         
     // convert billEditText's text to a double
     try
     {
        tagPrice = Double.parseDouble(s.toString());
     } // end try
     catch (NumberFormatException e)
     {
        tagPrice = 0.0; // default if an exception occurs
     } // end catch 

     // update the tagPriceEditText
     updateStandard();
  } // end method onTextChanged

  @Override
  public void afterTextChanged(Editable s) 
  {
  } // end method afterTextChanged

  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
     int after) 
  {
  } // end method beforeTextChanged

}; // end tagPriceEditTextWatcher

} // end class TaxCaculator

来自main.xml:

代码语言:javascript
复制
 <?xml version="1.0" encoding="utf-8"?>
 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent" android:layout_height="match_parent" 
 android:background="#FFF" android:id="@+id/tableLayout" 
 android:stretchColumns="1,2,3" android:padding="5dp">


  <!-- tagPriceInputRow -->
       <TableRow android:layout_height="wrap_content" 
       android:layout_width="match_parent" android:id="@+id/tagPriceInputRow">

     <EditText android:layout_width="wrap_content" 
           android:id="@+id/tagPriceEditText" 
           android:inputType="number"
           android:text="@string/tagPrice"
           android:layout_height="wrap_content" android:layout_span="3" 
           android:layout_weight="1">
     </EditText>
     </TableRow>

     <!-- totalPriceOutputRow -->
     <TableRow android:layout_height="wrap_content" 
      android:layout_width="match_parent" android:id="@+id/totalPriceOutputRow">

     <EditText android:layout_width="wrap_content" 
     android:id="@+id/totalPriceEditText" 
     android:text="@string/totalPrice"
     android:layout_height="wrap_content" android:layout_span="3" 
     android:inputType="numberDecimal" android:layout_weight="1">
     </EditText>
  </TableRow>
  </TableLayout>

来自strings.xml:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
     <string name="app_name">Tax Price Calculator</string>
     <string name="tagPrice">Tag Price</string>
     <string name="totalPrice">Total Price</string>   
</resources>

AndroidManifest.xml:

代码语言:javascript
复制
  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.finalproject.taxcalculator"
  android:versionCode="1"
  android:versionName="1.0">
  <application android:label="@string/app_name" android:icon="@drawable/ic_launcher">
    <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>
    </application>
  </manifest>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-05 02:07:01

似乎在onCreate()内部的变量赋值中有一个错误,在引用totalPriceEditText时会导致NullPointerException

代码语言:javascript
复制
tagPriceEditText = (EditText)findViewById(R.id.tagPriceEditText);
tagPriceEditText = (EditText)findViewById(R.id.totalPriceEditText); // <- wrong?

应改为

代码语言:javascript
复制
tagPriceEditText = (EditText)findViewById(R.id.tagPriceEditText);
totalPriceEditText= (EditText)findViewById(R.id.totalPriceEditText);

您的TaxCalculator活动还没有在AndroidManifest.xml中注册: 1)更改应用程序入口点的名称(如果没有MainActivity),或者2)添加一个新的<activity>条目。

将应用程序的入口点更改为TaxCalculator的示例(替换当前的<activity>)

代码语言:javascript
复制
<activity android:name="TaxCalculator"
    android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

奖励:如果您的布局已经是最终的,代码可以清理到这里。这只是对你当前布局的一个建议。我仍然不知道你是否需要TableLayout作为未来的用途。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFF"
    android:orientation="vertical"
    android:padding="5dp" >
    <!-- tagPriceInputRow -->
    <EditText
        android:id="@+id/tagPriceEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:text="@string/tagPrice" >
    </EditText>
    <!-- totalPriceOutputRow -->
    <EditText
        android:id="@+id/totalPriceEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="numberDecimal"
        android:text="@string/totalPrice" >
    </EditText>
</LinearLayout>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20389757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档