2016-03-08 49 views
1

所以我有一個numberpicker和日期選擇器,萬物除了當我的看法與導遊庫https://github.com/worker8/TourGuide相關工作,什麼可能是數字選擇器空指針(與Tourguide)的原因?

FATAL EXCEPTION: main 
java.lang.NullPointerException 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2988) 
     at android.view.View.getDisplayList(View.java:12428) 
     at android.view.View.getDisplayList(View.java:12545) 
     at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1184) 
     at android.view.ViewRootImpl.draw(ViewRootImpl.java:2446) 
     at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2306) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2109) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1127) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4606) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:567) 
     at android.view.Choreographer.doFrame(Choreographer.java:536) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733) 
     at android.os.Handler.handleCallback(Handler.java:615) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:153) 
     at android.app.ActivityThread.main(ActivityThread.java:4987) 

上述錯誤是當我點擊選擇器的頂部或底部的選擇,只拋出不是當我滑動選取器時,它很奇怪,因爲當導遊關閉時,錯誤不會被拋出。

我稱這種方法爲我所有的numberpicker和日期選擇器

public void pickerfix(View np) { 
    np.setSaveFromParentEnabled(false); 
    np.setSaveEnabled(true); 
    if (np.getId() == R.id.datepicker) { 
     ((DatePicker) np).setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 
    } else { 
     ((NumberPicker) np).setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 
    } 
    } 

,這行代碼上的每個onValueChange駁回導遊..

if(askTutorial == 1){ 
       tuts.dismissTourguide();} 

什麼可能是空指針的原因?我試着把一個onclicklistener放到採集器上,並把解僱線但沒有運氣。

!!!加入 所以這是我的日期選擇

Calendar c = Calendar.getInstance(); 
    int d = c.get(Calendar.YEAR); 
    c.set(Calendar.YEAR, d - 2); 
    Calendar c2 = Calendar.getInstance(); 
    c2.set(Calendar.YEAR, d - 130); 
    datePicker.setMinDate(c2.getTimeInMillis()); 
    datePicker.setMaxDate(c.getTimeInMillis()); 
    datePicker.init(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() { 
     @Override 
     public void onDateChanged(DatePicker view, 
            int year, int monthOfYear, int dayOfMonth) { 
      if(askTutorial == 1){ 
       tuts.dismissTourguide();} 
     } 


    }); 

代碼和我的號碼選擇器

pickerfix(npKg); 
    npKg.setMinValue(10); 
npKg.setMaxValue(650); 
    npKg.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { 
     @Override 
     public void onValueChange(NumberPicker numberPicker, int i, int i1) { 

      if(askTutorial == 1){ 
       tuts.dismissTourguide();} 
     } 
    }); 

一般我有超過1個numberpicker但我認爲這會做,。

我的導遊顯示被稱爲與解僱電話相同的不同類別。

public void showProfileTutorial(View v, String bgcolor, int txt){ 

    Animation animation = new TranslateAnimation(0f, 0f, 200f, 0f); 
    animation.setDuration(1000); 
    animation.setFillAfter(true); 
    animation.setInterpolator(new BounceInterpolator()); 

    Animation exitAnimation = new AlphaAnimation(1f, 0f); 
    exitAnimation.setDuration(200); 
    exitAnimation.setFillAfter(true); 


    String[] splitter = texts[txt].split(":"); 
    toolTip = new ToolTip() 
      .setTitle(splitter[0]) 
      .setDescription(splitter[1]) 
      .setTextColor(Color.parseColor("#bdc3c7")) 
      .setBackgroundColor(Color.parseColor("#30BA8F")) 
      .setShadow(true) 
      .setGravity(grav1| grav2) 
      .setEnterAnimation(animation); 

    overlay = new Overlay() 
      .disableClick(disableClick) 
      .setBackgroundColor(Color.parseColor(bgcolor)) 
      .setStyle(Overlay.Style.Circle) 
      .setExitAnimation(exitAnimation); 

    pointer = new Pointer().setColor(Color.RED).setGravity(Gravity.CENTER | Gravity.CENTER); 

    mTourGuideHandler = TourGuide.init(activity).with(TourGuide.Technique.Click); 
    mTourGuideHandler.setPointer(null); 
    mTourGuideHandler.setToolTip(toolTip); 
    mTourGuideHandler.setOverlay(overlay); 
    mTourGuideHandler.playOn(v); 

} 


public void dismissTourguide(){ 
    try{ 
     //.e("Before", "clean"); 
     mTourGuideHandler.cleanUp(); 
     //Log.e("After", "clean"); 
    }catch (Exception e){ 

    } 
} 
+0

您需要在您的活動類 – Inducesmile

+0

@NollyJ增加了一些代碼添加更多的代碼,雖然我刪除了一些不必要或不相關的方法調用,只是告訴我,如果我仍然失去了一些東西.. – johnguild

回答

1

第一次嘗試這種修改,看看它是否會工作,但我認爲這是有關的併發性問題 -

public void dismissTourguide(){ 
    try{ 
     if(null != mTourGuideHandler){ 
      mTourGuideHandler.cleanUp(); 
     } 
    }catch (Exception e){} 
} 
+0

仍然得到相同的錯誤 – johnguild

+0

你知道你是部分權利,dimiss調用是什麼導致錯誤,但我做的是刪除dismisstourguide呼籲每一個onvaluechange然後創建onclicklisteners並把它放在那裏,它的實際上並不是我想要的(它的行爲如何),但它消除了錯誤,所以我認爲不適應它。 – johnguild

相關問題