2011-11-03 72 views
0

我正在使用我的應用程序中的achartengine。他們添加了一個功能來處理空值,但爲了正確處理它們,您需要MathHelper.NULL_VALUE來代替空值。該圖需要List Double [](雙數組列表)以正確顯示數據。我的代碼循環遍歷遊標,填充雙精度列表,將雙精度列表轉換爲Double [],最後將Double []添加到我的List Double []中。Android替換我的雙列陣列表中的空值

我試着在循環中放入一個if/else語句,表示如果column_TEMP爲null,則cvalue = MathHelper.NULL_VALUE,但它在需要之前進行計算,結果非常災難性(失敗)。該圖沒有正確填充屏幕底部的單個小行,只顯示2個點而不是10個。它不能在MathHelper.NULL_VALUE之前進行計算,直到它位於List Double []中。我試圖找出一種方法,當它從Double []到List Double []時,更改空值。這是我目前使用的代碼。原因是它使null值在圖上顯示爲0。如果有一個空值,那麼使用較大數字的圖可能會相當混亂。你可以從幾百到幾百,再從幾百到幾百再到幾百。任何建議都非常感謝。

private List<Double[]> values; 
private List<Double> cValue; 
private Double[] Dvalue; 

     while (cursor.moveToNext()) { 
      try { 
       String cdate=null; 
       Double cvalue=null; 
       column_date = cursor.getColumnIndex(Provider.DATE); 
       column_value = cursor.getColumnIndex(Provider.TEMP); 
       cdate = cursor.getString(column_date); 
       cvalue = cursor.getDouble(column_value); 
       }; 
       SimpleDateFormat curFormater = new SimpleDateFormat("yyyy/MM/dd"); 
       Date dateObj = curFormater.parse(cdate); 
       if (dateObj.getTime() >= startDate.getTime() && 
         dateObj.getTime() <= endDate.getTime()) { 
        SimpleDateFormat postFormater = new SimpleDateFormat("yyyy,MM,dd"); 
        String dateObj1 = postFormater.format(dateObj); 
        SimpleDateFormat finalFormater = new SimpleDateFormat("yyyy,MM,dd"); 
        Date dateObj2 = finalFormater.parse(dateObj1); 
        cDates.add(dateObj2); 
        cValue.add(cvalue); 
       } 
      } catch (ParseException e) { 
       e.printStackTrace(); 
      } 
     } 

    dateValues = cDates.toArray(new Date[0]); 
    dates.add(dateValues); 

    Dvalue = (Double[]) cValue.toArray(new Double[0]); 
    values.add(Dvalue); 

從理論上講,這是數組應該是什麼樣子,但我不知道如何輸入MathHelper.NULL_VALUE到現有陣列。

values.add(new double[] { 21.2, 21.5, 21.7, 21.5, 21.4, 21.4, 21.3, 21.1, 20.6, 20.3, 20.2, 
    19.9, 19.7, 19.6, 19.9, 20.3, 20.6, 20.9, 21.2, 21.6, 21.9, 22.1, 21.7, 21.5 }); 
values.add(new double[] { 1.9, 1.2, 0.9, 0.5, 0.1, -0.5, -0.6, MathHelper.NULL_VALUE, 
    MathHelper.NULL_VALUE, -1.8, -0.3, 1.4, 3.4, 4.9, 7.0, 6.4, 3.4, 2.0, 1.5, 0.9, -0.5, 
    MathHelper.NULL_VALUE, -1.9, -2.5, -4.3 }); 

編輯:

我想通了一個問題。在我while循環,我把這個代碼

  Double d=MathHelper.NULL_VALUE; 
      String s=Double.toString(d); 
      Log.i(getClass().getSimpleName(), s); 

而且記錄0.0低了下去我的ChartFactory的設置(外循環),我把 相同的代碼,並預期它返回1.7976931348623157E308。爲什麼 會使while循環返回0.0?

+0

旁白:名爲'cvalue'和'cValue'在同一範圍內有變數是非常容易出錯。 –

+0

我同意它通常是這樣,但它使我更容易從雙打到列表。我的大腦不正確我猜大聲笑。 – Opy

+0

「cValue」與「cValues」甚至「cValueList」如何? 'cValue'與'cValue'沒有任何關於它們的不同之處。 –

回答

0

好的值顯示爲0.0是一個ID10T錯誤。愚蠢的我有string =而不是string.equals。但主要的問題是它不喜歡將原始列表中的MathHelper.NULL_VALUE作爲Double傳遞。我所要做的就是將所有東西都作爲字符串傳遞給字符串列表,然後將其添加到字符串數組中,最後將其傳遞給字符串數組列表。一旦我有了所有的字符串數組列表,我不得不提出新的代碼來將字符串數組列表轉換爲Double數組列表,並且它非常完美。

感謝您的幫助勞倫斯:)

1

由於您沒有包含代碼,因此不清楚您添加if語句的含義,「結果非常具有災難性(失敗)」並不十分具體 - 錯誤信息會有所幫助。

無論如何,這是我所期待的工作,因爲所提供的信息:

更改此:

cValue.add(cvalue); 

成這樣:

cValue.add(cvalue == null ? MathHelper.NULL_VALUE : cvalue); 

一些建議沒有直接關係到您的問題:

  • 只有單個內部字母的情況下,名稱不同的變量纔在同一範圍內。 FooBarfooBar沒問題(雖然FooBar應該是一個類名,而不是Java中的變量),但foobarfooBar相比太容易混淆了。

  • 我不知道你爲什麼有Dvalue和cValue作爲字段。看起來他們只是持有臨時價值,所以當地人會更合適。

  • 在Java中,標準約定是隻有類名稱有Dvalue。變量應該以小寫字母開頭。 (例外,這取決於你對「變量」的定義,是所有大寫字母都有下劃線的常量LIKE_THIS

  • 零長度數組在Java中是不可變的,所以沒有任何意義上有多於一個給定類型。你可以把它們保存在常量中(即:static final域)並重用它們。或者,在這種情況下,您可以知道所需數組的長度,因此您可以在調用toArray之前分配正確大小的數組。

+0

首先,感謝所有的信息。 cvalue和cValue只用於那個區域,所以一旦它通過了,我不必擔心會混淆它們。我明白你在說什麼。我不知道爲什麼我使用Dvalue而不是dValue,那天我可能只是很累而且打錯了。我會回去清理:)。大小數組總是隨着人們在數據庫中記錄臨時數的次數而變化。也可能只有一個數組列表中的數組,但最多可以有4個。 – Opy

+0

我試過cValue.add(cvalue == null?MathHelper.NULL_VALUE:cvalue);但它與之前的一樣,null值只顯示爲0而不是空白。 – Opy

+0

我更新了我的帖子。任何想法爲什麼這樣做? – Opy