2017-04-21 36 views
2

我無法弄清楚這個問題的解決方案請幫助我。使用Palette API時獲取空指針異常getRgb()方法

我試圖通過這裏的collapseToolbarLayout內部的圖像中提取顏色更改的工具欄的顏色是我的Java代碼

public class ToolbarColorDynamic extends AppCompatActivity { 

private CollapsingToolbarLayout collapsingToolbarLayout; 
ImageView mImageView; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_toolbar_color_dynamic); 

    setupToolbar(); 

    collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar4); 
    collapsingToolbarLayout.setTitle(getResources().getString(R.string.user_name));//to set the title 
    mImageView = (ImageView) findViewById(R.id.profile_id1); 


    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.leodicaprio); 
    mImageView.setImageBitmap(bm); 


    setToolbarColor(bm); 

} 

private void setupToolbar() { 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar4); 
    setSupportActionBar(toolbar); 
    final ActionBar ab = getSupportActionBar(); 
    // Show menu icon 
    if (ab != null) { 

     ab.setDisplayHomeAsUpEnabled(true); 
    } 
} 
/* This method is to set the color and to set the image*/ 

private void setToolbarColor(Bitmap bitmap) { 

    Palette p = createPaletteSync(bitmap); 
    Palette.Swatch vibrantSwatch = checkVibrantSwatch(p); 

    Toolbar tb = (Toolbar) findViewById(R.id.toolbar); 
    tb.setBackgroundColor(vibrantSwatch.getRgb());//this is the line am getting null pointer exception 
    tb.setTitleTextColor(vibrantSwatch.getTitleTextColor()); 
} 

private Palette createPaletteSync(Bitmap bitmap) { 
    Palette p = Palette.from(bitmap).generate(); 
    return p; 
} 

private Palette.Swatch checkVibrantSwatch(Palette p){ 
    Palette.Swatch vibrant = p.getVibrantSwatch(); 
    if (vibrant != null){ 
     return vibrant; 
    } 
    return null; 
} 

}

我試了幾個步驟,像斷言值不等於空

assert vibrantSwatch != null; 

和此步驟太...

if(vibrantSwatch != null){ 
    tb.setBackgroundColor(vibrantSwatch.getRgb()); 
} 

但似乎沒有工作!...我嘗試了谷歌搜索,並在這裏檢查,但無法找到解決方案。

下面是我的logcat日誌

04-21 12:06:32.420 20288-20288/basavaraj.com.librarytools E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering 
04-21 12:06:37.974 20288-20288/basavaraj.com.librarytools E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{basavaraj.com.librarytools/basavaraj.com.librarytools.diff_toolbar.ToolbarColorDynamic}: java.lang.NullPointerException 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2343) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395) 
                      at android.app.ActivityThread.access$600(ActivityThread.java:162) 
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364) 
                      at android.os.Handler.dispatchMessage(Handler.java:107) 
                      at android.os.Looper.loop(Looper.java:194) 
                      at android.app.ActivityThread.main(ActivityThread.java:5371) 
                      at java.lang.reflect.Method.invokeNative(Native Method) 
                      at java.lang.reflect.Method.invoke(Method.java:525) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
                      at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
                      at basavaraj.com.librarytools.diff_toolbar.ToolbarColorDynamic.setToolbarColor(ToolbarColorDynamic.java:64) 
                      at basavaraj.com.librarytools.diff_toolbar.ToolbarColorDynamic.onCreate(ToolbarColorDynamic.java:42) 
                      at android.app.Activity.performCreate(Activity.java:5122) 
                      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1081) 
                      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2307) 
                      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2395)  
                      at android.app.ActivityThread.access$600(ActivityThread.java:162)  
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1364)  
                      at android.os.Handler.dispatchMessage(Handler.java:107)  
                      at android.os.Looper.loop(Looper.java:194)  
                      at android.app.ActivityThread.main(ActivityThread.java:5371)  
                      at java.lang.reflect.Method.invokeNative(Native Method)  
                      at java.lang.reflect.Method.invoke(Method.java:525)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)  
                      at dalvik.system.NativeStart.main(Native Method) 

請幫助解決這個問題。 謝謝!

+0

也許'vibrantSwatch.getRgb()'返回null? –

+0

經過3個小時的搜索,如何解決空指針異常,我剛剛意識到我在setToolbarColor()方法內的此活動中引用了錯誤的工具欄ID。天啊!對我很愚蠢。最後,代碼成功啓動並運行。 –

回答

0

您的工具欄爲空。在你的setupToolbar()方法開始時,你引用ID爲R.id.toolbar4的工具欄,但在setToolbarColor()的內部,你引用了R.id.toolbar

+0

我剛剛找到解決方案,非常感謝您的答覆... –

0

我找到了解決方案。

在setToolbarColor()方法我是引用一個錯誤的工具欄ID 所以我只是改變了代碼: -

從----

private void setToolbarColor(Bitmap bitmap) { 

Palette p = createPaletteSync(bitmap); 
Palette.Swatch vibrantSwatch = checkVibrantSwatch(p); 

Toolbar tb = (Toolbar) findViewById(R.id.toolbar);//This is the line i did silly mistake 
tb.setBackgroundColor(vibrantSwatch.getRgb());//this is the line am getting null pointer exception 
tb.setTitleTextColor(vibrantSwatch.getTitleTextColor()); 

}

中場休息 -

private void setToolbarColor(Bitmap bitmap) { 

Palette p = createPaletteSync(bitmap); 
Palette.Swatch vibrantSwatch = checkVibrantSwatch(p); 

Toolbar tb = (Toolbar) findViewById(R.id.toolbar4); 
tb.setBackgroundColor(vibrantSwatch.getRgb());//this is the line am getting null pointer exception 
tb.setTitleTextColor(vibrantSwatch.getTitleTextColor()); 

}