2012-12-16 30 views
0

這是我的方法Android的錯誤異步點擊

private TextView monthTotal; 
    private TextView yearTotal; 
    private ExpenseDal expenseDal; 

    private EditText amountText; 
    private EditText descText; 
    private EditText categoryText; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     expenseDal = new ExpenseDal(this); 
     amountText = (EditText) findViewById(R.id.amountText); 
     descText = (EditText) findViewById(R.id.descText); 
     categoryText = (EditText) findViewById(R.id.categoryText); 

     setContentView(R.layout.activity_expense_list); 
     monthTotal = (TextView) findViewById(R.id.monthTotal); 
     yearTotal = (TextView) findViewById(R.id.yearTotal); 
     monthTotal.setText(expenseDal.getCurrentMonthTotal()); 
     yearTotal.setText(expenseDal.getCurrentYearTotal()); 

     //Event For Save Button 
     Button saveButton = (Button) findViewById(R.id.saveBtn); 
     saveButton.setOnClickListener(new OnClickListener() { 

      public void onClick(View v) { 
       if (amountText.getText().length() != 0) { 
        AsyncTask<Object, Object, Object> saveExpenseTask = new AsyncTask<Object, Object, Object>() { 
         @Override 
         protected Object doInBackground(Object... params) { 
          saveExpense(); 
          return null; 
         } 
         @Override 
         protected void onPostExecute(Object result) { 
          finish(); 
         } 
        }; 

        saveExpenseTask.execute((Object[]) null); 
       } 

       else { 
        AlertDialog.Builder alert = new AlertDialog.Builder(
          ExpenseList.this); 
        alert.setTitle(R.string.errorTitle); 
        alert.setMessage(R.string.errorMessage); 
        alert.setPositiveButton(R.string.errorButton, null); 
        alert.show(); 
       } 
      } 
     }); 

    } 

    private void saveExpense() { } 

我的跟蹤之下

12-17 04:53:53.003: D/AndroidRuntime(2484): Shutting down VM 
12-17 04:53:53.003: W/dalvikvm(2484): threadid=1: thread exiting with uncaught exception (group=0x40a13300) 
12-17 04:53:53.003: E/AndroidRuntime(2484): FATAL EXCEPTION: main 
12-17 04:53:53.003: E/AndroidRuntime(2484): java.lang.NullPointerException 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at com.technowizsol.easyexpensemanager.ExpenseList$1.onClick(ExpenseList.java:45) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.view.View.performClick(View.java:4084) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.view.View$PerformClick.run(View.java:16966) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.os.Handler.handleCallback(Handler.java:615) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.os.Handler.dispatchMessage(Handler.java:92) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.os.Looper.loop(Looper.java:137) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at java.lang.reflect.Method.invokeNative(Native Method) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at java.lang.reflect.Method.invoke(Method.java:511) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
12-17 04:53:53.003: E/AndroidRuntime(2484):  at dalvik.system.NativeStart.main(Native Method) 

的錯誤是在哪裏我檢查量爲空或不是就行了。任何想法爲什麼我得到這個。

回答

1

走線

setContentView(R.layout.activity_expense_list); 

移動它,所以它是直接低於

super.onCreate(savedInstanceState); 

你有它成立現在的辦法,就是你想之前找到在佈局的一些看法實際設置佈局。所以,findViewById()沒有找到這些視圖的任何東西(還沒有存在),所以,它返回null

此外,你不檢查是否amountText爲空,你檢查是否它的文本長度是0 - 兩個單獨的東西。由於amountText其實並沒有提及任何東西,所以你得到一個NPE。

+0

我發現這個問題後我發佈了這個。現在又出現了另一個問題。插入操作後,應用程序出來。任何想法爲什麼?是否因爲插入操作是異步的? – swordfish

+0

應用出來了嗎?精心闡述?另外,你的任務中沒有太多的實現,它現在調用一個空方法。 –

+0

我正在模擬器中測試它。發生了什麼後,我點擊保存按鈕。該應用程序關閉並返回到主屏幕。該記錄插入成功,日誌中沒有錯誤或警告,但該應用只是關閉並出現在主屏幕 – swordfish