2014-10-05 63 views
1

對不起我的英語! 我有BigDecimal的問題。 我已經創建了一個SQLiteDatabase。現在我想用Search View進行搜索。String to BigDecimal

private void showResults(String query) { 

    Cursor cursor = mDbHelper.searchCustomer((query != null ? query.toString() : "@@@@[email protected]@")); 

    if (cursor == null) { 
     // 
    } else { 
     // Specify the columns we want to display in the result 
     String[] from = new String[] { 
       ItemDbAdapter.KEY_1, 
       ItemDbAdapter.KEY_2, 
       ItemDbAdapter.KEY_3, 
       ItemDbAdapter.KEY_4, 
       ItemDbAdapter.KEY_5, 
       ItemDbAdapter.KEY_6, 
       ItemDbAdapter.KEY_7, 
       ItemDbAdapter.KEY_8}; 

     // Specify the Corresponding layout elements where we want the 
     // columns to go 
     int[] to = new int[] { 
       R.id.result_1, 
       R.id.result_2, 
       R.id.result_3, 
       R.id.result_4, 
       R.id.result_5, 
       R.id.result_6, 
       R.id.result_7, 
       R.id.result_8}; 

     SimpleCursorAdapter customers = new SimpleCursorAdapter(this, 
       R.layout.customresult, cursor, from, to); 
     mListView.setAdapter(customers); 

     mListView.setOnItemClickListener(new OnItemClickListener() {     
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 
       np.setValue(100); //Numberpicker 


       Cursor cursor = (Cursor) mListView.getItemAtPosition(position);     


       String 1 = cursor.getString(cursor.getColumnIndexOrThrow("1")); 
       String 2 = cursor.getString(cursor.getColumnIndexOrThrow("2")); 
       String 3 = cursor.getString(cursor.getColumnIndexOrThrow("3")); 
       String 4 = cursor.getString(cursor.getColumnIndexOrThrow("4")); 
       String 5 = cursor.getString(cursor.getColumnIndexOrThrow("5")); 
       String 6 = cursor.getString(cursor.getColumnIndexOrThrow("6")); 
       String 7 = cursor.getString(cursor.getColumnIndexOrThrow("7")); 
       String 8 = cursor.getString(cursor.getColumnIndexOrThrow("8")); 


       RelativeLayout customerLayout = (RelativeLayout) findViewById(R.id.custominfoLayout); 
       if (customerLayout == null) { 
        // Inflate the Customer Information View 
        RelativeLayout leftLayout = (RelativeLayout) findViewById(R.id.rightLayout); 
        View customerInfo = getLayoutInflater().inflate(
          R.layout.custominfo, leftLayout, false); 
        leftLayout.addView(customerInfo); 
       } 


       Tv1 = (TextView) findViewById(R.id.info_i); 
       Tv2 = (TextView) findViewById(R.id.info_a); 
       Tv3 = (TextView) findViewById(R.id.info_k); 
       Tv4 = (TextView) findViewById(R.id.info_B); 
       Tv5 = (TextView) findViewById(R.id.info_k); 
       Tv6 = (TextView) findViewById(R.id.info_k2); 
       Tv7 = (TextView) findViewById(R.id.info_P); 
       Tv8 = (TextView) findViewById(R.id.info_F); 


       Tv1.setText(1); 
       Tv2.setText(2); 
       Tv3.setText(3); 
       Tv4.setText(4); 
       Tv5.setText(5); 
       Tv6.setText(6); 
       Tv7.setText(7); 
       Tv8.setText(8); 

       searchView.setQuery("", true); 

直到這裏它運作良好。顯示了我所尋求的。

如果我想存儲在BigDecimal的價值觀,我得到這個錯誤信息:

10-05 17:58:51.759:E/AndroidRuntime(28053):致命異常:主要 10 -05 17:58:51.759:E/AndroidRuntime(28053):進程:com.XXX.XXXX,PID:28053 10-05 17:58:51.759:E/AndroidRuntime(28053):java.lang.NumberFormatException:Invalid long:「0,3」 10-05 17:58:51.759:E/AndroidRuntime(28053):at java.lang.Long.invalidLong(Long.java:124) 10-05 17:58:51.759:E/AndroidRuntime(28053):at java.lang.Long.parse(Long.java:361) 10-05 17:58:51.759:E/AndroidRuntime(28053):在java.lang.Long.parseLong(Long.java:352) 10-05 17:58:51.759:E/AndroidRuntime(28053):at java.lang.Long.parseLong(Long.java:318) 10- 05 17:58:51.759:E/AndroidRuntime(28053):在java.math.BigDecimal。(BigDecimal.java:344) 10-05 17:58:51.759:E/AndroidRuntime(28053):在java.math。的BigDecimal(BigDecimal.java:425) 10-05 17:58:51.759:E/AndroidRuntime(28053):在com.XXX.XXXX.ListeActivity $ 1.onItemClick(ListeActivity.java:288)

10- 05 17:58:51.759:E/AndroidRuntime(28053):在android.widget.AdapterView.performItemClick(AdapterView.java:299) 10-05 17:58:51.759:E/AndroidRuntime(28053):at android.widget .AbsListView.performItemClick(AbsListView.java:1113) 10-05 17:58:51.759:E/AndroidR (28053):at android.widget.AbsListView $ PerformClick.run(AbsListView.java:2911) 10-05 17:58:51.759:E/AndroidRuntime(28053):at android.widget.AbsListView $ 3.run(AbsListView .java:3645) 10-05 17:58:51.759:E/AndroidRuntime(28053):at android.os.Handler.handleCallback(Handler.java:733) 10-05 17:58:51.759:E/AndroidRuntime (28053):at android.os.Handler.dispatchMessage(Handler.java:95) 10-05 17:58:51.759:E/AndroidRuntime(28053):at android.os.Looper.loop(Looper.java:136 ) 10-05 17:58:51.759:E/AndroidRuntime(28053):at android.app.ActivityThread.main(ActivityThread.java:5001) 10-05 17:58:51.759:E/AndroidRuntime(28053):在java.lang.reflect.Method.invokeNative(本地方法) 10-05 17:58:51.759:E/AndroidRuntime(28053):在java.lang.reflect.Method.invoke(Method.java: 515) 10-05 17:58:51.759:E/AndroidRuntime(28053):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:785) 10-05 17:58:51.759: E/AndroidRuntime(28053):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 10-05 17:58:51.759:E/AndroidRuntime(28053):at dalvik.system.NativeStart。主(本地方法)

我作爲出發:

   Sa = String.valueOf(Tv1.getText()); 
       Sb = String.valueOf(Tv2.getText()); 
       Sc = String.valueOf(Tv3.getText()); 
       Sd = String.valueOf(Tv4.getText()); 
       Se = String.valueOf(Tv5.getText()); 
       Sf = String.valueOf(Tv6.getText()); 
       Sg = String.valueOf(Tv7.getText()); 




       Big1 = new BigDecimal(Sa); 
       Big2 = new BigDecimal(Sb); 
       Big3 = new BigDecimal(Sc); 
       Big4 = new BigDecimal(Sd); 
       Big5 = new BigDecimal(Se); 
       Big6 = new BigDecimal(Sf); 
       Big7 = new BigDecimal(Sg); 

我不明白爲什麼這個錯誤出現。

我只使用String和BigDecimal,但錯誤是float。

+1

請顯示您的完整堆棧跟蹤。 (我也建議給你的變量更有意義的名稱,但這是另一回事。) – 2014-10-05 15:50:27

回答

0

java variable names cant be just numbers, or even start with a number

String 1 = cursor.getString(cursor.getColumnIndexOrThrow("1")); 
String 2 = cursor.getString(cursor.getColumnIndexOrThrow("2")); 
.... 

後來你設置

Tv1.setText(1); 
Tv2.setText(2); 

構建應該給你的警告。

+0

謝謝, 我已經寫過。 但是,如果我想要保存BigDecimal中的值,則會收到錯誤消息 – NewYorker 2014-10-05 16:25:03

+0

請更新您的問題,並更改新的更改,擺脫舊代碼 – ashoke 2014-10-05 16:28:57

+0

我沒有更改我的代碼。在我上面的代碼中,我轉向他們的例子。 – NewYorker 2014-10-05 16:33:43

0

我想知道變量1, 2, 3, 4, 5, ...的名稱是否是有效的變量名稱。我建議使用變量名稱,如firstColumnTextArrayList。所以你遇到的錯誤可能會受此影響。

您還聲稱顯示的錯誤是float但它絕對不是! 0,3可能是逗號分隔的列表BigDecimals或其他東西!

從你給我不能對這個問題,但這樣的問題的建議的信息可以通過使用工具,如的CheckStyle用默認的Android風格的配置來避免。

+0

謝謝! 問題是0,3 得到它在0.3更改,現在它工作 – NewYorker 2014-10-05 17:01:01