2015-03-01 7 views
2

Как выделить несколько дней согласно расчетуCalendarView Ошибка отображения нескольких Основные моменты

Привет. пожалуйста, помогите мне, как это сделать.

package com.tgkjer.fertilitystress; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.ArrayList; 
import java.util.GregorianCalendar; 
import java.util.List; 
import java.util.Locale; 

import android.content.Context; 
import android.graphics.Color; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class CalendarAdapter extends BaseAdapter { 
    private Context mContext; 
    public CalendarMain main; 
    private java.util.Calendar month; 
    public GregorianCalendar pmonth; // calendar instance for previous month 
    /** 
    * calendar instance for previous month for getting complete view 
    */ 
    public GregorianCalendar pmonthmaxset; 
    private GregorianCalendar selectedDate; 
    int firstDay; 
    int maxWeeknumber; 
    int maxP; 
    int calMaxP; 
    int lastWeekDay; 
    int leftDays; 
    int mnthlength; 
    String itemvalue, curentDateString; 
    DateFormat df; 

    private ArrayList<String> items; 
    public static List<String> dayString; 
    private View previousView; 

    public CalendarAdapter(Context c, GregorianCalendar monthCalendar) { 
     CalendarAdapter.dayString = new ArrayList<String>(); 
     Locale.setDefault(Locale.US); 
     month = monthCalendar; 
     selectedDate = (GregorianCalendar) monthCalendar.clone(); 
     mContext = c; 
     month.set(GregorianCalendar.DAY_OF_MONTH, 1); 
     this.items = new ArrayList<String>(); 
     df = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 
     curentDateString = df.format(selectedDate.getTime()); 
     refreshDays(); 
    } 

    public void setItems(ArrayList<String> items) { 
     for (int i = 0; i != items.size(); i++) { 
      if (items.get(i).length() == 1) { 
       items.set(i, "0" + items.get(i)); 
      } 
     } 
     this.items = items; 
    } 

    public int getCount() { 
     return dayString.size(); 
    } 

    public Object getItem(int position) { 
     return dayString.get(position); 
    } 

    public long getItemId(int position) { 
     return 0; 
    } 

    // create a new view for each item referenced by the Adapter 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     TextView dayView; 
     if (convertView == null) { // if it's not recycled, initialize some 
            // attributes 
      LayoutInflater vi = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.calendar_item, null); 

     } 

     dayView = (TextView) v.findViewById(R.id.date); 
     // separates daystring into parts. 
     String[] separatedTime = dayString.get(position).split("-"); 
     // taking last part of date. ie; 2 from 2012-12-02 
     String gridvalue = separatedTime[2].replaceFirst("^0*", ""); 
     // checking whether the day is in current month or not. 
     if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) { 
      // setting offdays to white color. 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
     } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) { 
      dayView.setTextColor(Color.WHITE); 
      dayView.setClickable(false); 
      dayView.setFocusable(false); 
     } else { 
      // setting curent month's days in blue color. 
      dayView.setTextColor(Color.BLUE); 
     } 

     if (dayString.get(position).equals(curentDateString)) { 
      setSelected(v); 
      previousView = v; 
     } else { 
      v.setBackgroundResource(R.drawable.list_item_background); 
     } 
     dayView.setText(gridvalue); 

     // create date string for comparison 
     String date = dayString.get(position); 

     if (date.length() == 1) { 
      date = "0" + date; 
     } 
     String monthStr = "" + (month.get(GregorianCalendar.MONTH) + 1); 
     if (monthStr.length() == 1) { 
      monthStr = "0" + monthStr; 
     } 
     //main.Calc(); 
     /*String s = ""; 
     long l = Long.parseLong(s); 
     DbFertility db = new DbFertility(getActivity()); 
     db.open(); 
     int cycle = Integer.parseInt(db.getCycle(l)); 
     int period = Integer.parseInt(db.getPeriod(l)); 
     int date1 = Integer.parseInt(db.getPeriod(l)); 
     db.close();*/ 

     int periodCycleDays = 28; 
     long date1 = Long.parseLong(date); 
     int bleedingDays = 3; 
     int fertilePhaseStart = periodCycleDays - 20; 
     int fertilePhaseEnd = periodCycleDays - 11; 
     int ovulation = (fertilePhaseStart-1) + (fertilePhaseEnd - fertilePhaseStart)/2; 

     // show icon if date is not empty and it exists in the items array 
     ImageView iw = (ImageView) v.findViewById(R.id.date_icon); 
     if (periodCycleDays == 28) { 
      for(long i = date1; i <= bleedingDays; i++) 
      { 
      iw.setVisibility(View.VISIBLE); 
      } 
      for(int j = fertilePhaseStart; j < ovulation; j++) 
      { 
       int b = 6; 
       if(j == b) 
       { 
        iw.setVisibility(View.VISIBLE); 
       }else{ 
        iw.setVisibility(View.VISIBLE); 
       } 
      } 
     } 
     return v; 
    } 

    private Context getActivity() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public View setSelected(View view) { 
     if (previousView != null) { 
      previousView.setBackgroundResource(R.drawable.list_item_background); 
     } 
     previousView = view; 
     view.setBackgroundResource(R.drawable.calendar_cel_selectl); 
     return view; 
    } 

    public void refreshDays() { 
     // clear items 
     items.clear(); 
     dayString.clear(); 
     Locale.setDefault(Locale.US); 
     pmonth = (GregorianCalendar) month.clone(); 
     // month start day. ie; sun, mon, etc 
     firstDay = month.get(GregorianCalendar.DAY_OF_WEEK); 
     // finding number of weeks in current month. 
     maxWeeknumber = month.getActualMaximum(GregorianCalendar.WEEK_OF_MONTH); 
     // allocating maximum row number for the gridview. 
     mnthlength = maxWeeknumber * 7; 
     maxP = getMaxP(); // previous month maximum day 31,30.... 
     calMaxP = maxP - (firstDay - 1);// calendar offday starting 24,25 ... 
     /** 
     * Calendar instance for getting a complete gridview including the three 
     * month's (previous,current,next) dates. 
     */ 
     pmonthmaxset = (GregorianCalendar) pmonth.clone(); 
     /** 
     * setting the start date as previous month's required date. 
     */ 
     pmonthmaxset.set(GregorianCalendar.DAY_OF_MONTH, calMaxP + 1); 

     /** 
     * filling calendar gridview. 
     */ 
     for (int n = 0; n < mnthlength; n++) { 

      itemvalue = df.format(pmonthmaxset.getTime()); 
      pmonthmaxset.add(GregorianCalendar.DATE, 1); 
      dayString.add(itemvalue); 

     } 
    } 

    private int getMaxP() { 
     int maxP; 
     if (month.get(GregorianCalendar.MONTH) == month.getActualMinimum(GregorianCalendar.MONTH)) { 
      pmonth.set((month.get(GregorianCalendar.YEAR) - 1), month.getActualMaximum(GregorianCalendar.MONTH), 1); 
     } else { 
      pmonth.set(GregorianCalendar.MONTH, month.get(GregorianCalendar.MONTH) - 1); 
     } 
     maxP = pmonth.getActualMaximum(GregorianCalendar.DAY_OF_MONTH); 

     return maxP; 
    } 

    public void Calculation(){ 

    } 
} 


03-01 08:43:52.412: E/AndroidRuntime(1294): FATAL EXCEPTION: main 
03-01 08:43:52.412: E/AndroidRuntime(1294): Process: com.tgkjer.fertilitystress, PID: 1294 
03-01 08:43:52.412: E/AndroidRuntime(1294): java.lang.NumberFormatException: Invalid long: "2015-03-01" 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.Long.invalidLong(Long.java:124) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.Long.parse(Long.java:361) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.Long.parseLong(Long.java:352) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.Long.parseLong(Long.java:318) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at com.tgkjer.fertilitystress.CalendarAdapter.getView(CalendarAdapter.java:137) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.GridView.onMeasure(GridView.java:1044) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.View.measure(View.java:16497) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.View.measure(View.java:16497) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.View.measure(View.java:16497) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.View.measure(View.java:16497) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.View.measure(View.java:16497) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.Choreographer.doFrame(Choreographer.java:544) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.os.Handler.handleCallback(Handler.java:733) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.os.Handler.dispatchMessage(Handler.java:95) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.os.Looper.loop(Looper.java:136) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at java.lang.reflect.Method.invoke(Method.java:515) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
03-01 08:43:52.412: E/AndroidRuntime(1294):  at dalvik.system.NativeStart.main(Native Method) 

«То ошибка в моей LogCat может у помочь мне указать, где это ошибка в моем коде?»

Ожидаемого выход: я хочу выделяет несколько дней согласно расчету Периода

ответ

0
FATAL EXCEPTION: main 
java.lang.NumberFormatException: Invalid long: "2015-03-01" 

это исключение возникает, когда вы разбор любого номера строки (т.е. String stringNumber="09"; где номер строки является любым числом между двойными кавычками, как " 09 "), который отличается от числа, такого как номер строки, имеющего другой символ, включен в число, например, вместо« 9 »или« 09 », если оно содержит« 0-9 »,« A09 »,« A9 »,« »,« 9a »,« 9-1 »и т. Д. Это исключение будет выброшено , вам нужно избегать передачи всего этого другого персонажа. только число в виде строки вы можете передать, так что вы получите номер в качестве межд, длинные и т.д.

at com.tgkjer.fertilitystress.CalendarAdapter.getView(CalendarAdapter.java:137) 

в строке номер 90 в `

com.tgkjer.fertilitystress.CalendarAdapter.getView(CalendarAdapter.java:90) 
String[] separatedTime = dayString.get(position).split("-"); 

separatedTime будет иметь номер строки т.е. dayString, имеющих значение даты, как "2015-03-01" вот почему вы spliting значение, используя разделитель «-»

который вы звоните на номер линии 117 в

com.tgkjer.fertilitystress.CalendarAdapter.getView(CalendarAdapter.java:117) 
// create date string for comparison 
String date = dayString.get(position); 

так дата, имеющих значение в качестве даты, которая является «2015-03-01»

if (date.length() == 1) { 
      date = "0" + date; 
     } 

выше строка кода в строке 121 № 119 не будет выполнять то, значение даты, потому что это date.length() == 1false он не войдет в блок if.

теперь видеть на линии нет 137 в

com.tgkjer.fertilitystress.CalendarAdapter.getView(CalendarAdapter.java:137) 
long date1 = Long.parseLong(date); 

то здесь Long.parseLong() ожидает значение как номер строки, но адресность значения даты в виде строки, которая «2015-03-01», так исключение riases , так использовать сплит функции на сегодняшний день, как

String[] separatedyyMMdd = date.split("-"); 
long date1yy = Long.parseLong(separatedyyMMdd[0]); 
long date1mm = Long.parseLong(separatedyyMMdd[1]); 
long date1dd = Long.parseLong(separatedyyMMdd[2]); 

будет решить вышеуказанную проблему

+0

Моя программа теперь работает, но она подчеркивает весь день в месяц и в год .. может у меня помочь Эта проблема. моя проблема в том, что я хочу выделить дни результата периода. Моя формула ... int periodCycleDays = 28; \t \t // long date1 = Long.parseLong (дата.отделка()); \t int bleedingDays = 3; \t int fertilePhaseStart = periodCycleDays - 20; \t int fertilePhaseEnd = periodCycleDays - 11; \t int ovulation = (fertilePhaseStart-1) + (fertilePhaseEnd - fertilePhaseStart)/2; –

+0

Строка [] separateyyMMdd = date.split ("-") long date1yy = Long.parseLong (separateyyMMdd [0]) long date1mm = Long.parseLong (separateyyMMdd [1]) long date1dd = Long.parseLong (separateyyMMdd [2]) ; // показывать значок, если правильный результат периода ImageView iw = (ImageView) v.findViewById (R.id.date_icon); если (periodCycleDays == 28) {\t \t \t для (длинный я = date1dd; я <= bleedingDays; я ++) {iw.setVisibility (View.VISIBLE);} для (Int J = fertilePhaseStart, J <овуляции; j ++) \t {int b = 6; if (j == b) {iw.setVisibility (View.VISIBLE); \t} else { \t \t iw.setVisibility (View.VISIBLE); \t \t \t \t}} (Может у исправить мою формулу? Пожалуйста) –

+0

Naval Кишор Джа –

Смежные вопросы