【问题标题】:Cannot make a static reference to the non-static method setImageBitmap(Bitmap) from the type ImageView无法从 ImageView 类型对非静态方法 setImageBitmap(Bitmap) 进行静态引用
【发布时间】:2013-12-02 14:48:05
【问题描述】:

问题:

我在 Eclipse 中遇到错误,指出“无法从 ImageView 类型对非静态方法 setImageBitmap(Bitmap) 进行静态引用

来源:

public class Home extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener,
YouTubeThumbnailView.OnInitializedListener {

    public static final String API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    public static final String VIDEO_ID = "o7VVHhK9zf0";
    public static final String VIDEO1_ID = "xVHHJqntuXI";
    public static final String VIDEO2_ID = "YWteQj_q3Ro";
    public static final String VIDEO3_ID = "83ZgtqTw-mI";
    public static final String VIDEO4_ID = "n5wMza29JwI";
    private YouTubePlayer youTubePlayer;
    private YouTubePlayerView youTubePlayerView;
    private YouTubeThumbnailView youTubeThumbnailView1;
    private YouTubeThumbnailView youTubeThumbnailView2;
    private YouTubeThumbnailView youTubeThumbnailView3;
    private YouTubeThumbnailView youTubeThumbnailView4;
    private String[] drawerListViewItems;
    private DrawerLayout drawerLayout;
    private DrawerLayout mDrawerLayout;
    private ListView drawerListView;
    private ListView mDrawerList;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    private ActionBarDrawerToggle mDrawerToggle;
    Drawable selstation_up_btn; 
    private YouTubeThumbnailLoader youTubeThumbnailLoader;
    ScrollView mainScrollView;
    Button fav_up_btn1;
    Button fav_dwn_btn1;
    ArrayAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);

final ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.actionbar_custom_view_home);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);


Drawable d = getResources().getDrawable(selstation_up_btn);
imageView.setImageBitmap(((BitmapDrawable) d).getBitmap());

引用/示例来源/初始问题:

Footer Image Will Not Size Correctly

编辑(回应拉玛拉尔)

public class Home extends YouTubeBaseActivity implements
YouTubePlayer.OnInitializedListener,
YouTubeThumbnailView.OnInitializedListener {

    public static final String API_KEY = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
    public static final String VIDEO_ID = "o7VVHhK9zf0";
    public static final String VIDEO1_ID = "xVHHJqntuXI";
    public static final String VIDEO2_ID = "YWteQj_q3Ro";
    public static final String VIDEO3_ID = "83ZgtqTw-mI";
    public static final String VIDEO4_ID = "n5wMza29JwI";
    private YouTubePlayer youTubePlayer;
    private YouTubePlayerView youTubePlayerView;
    private YouTubeThumbnailView youTubeThumbnailView1;
    private YouTubeThumbnailView youTubeThumbnailView2;
    private YouTubeThumbnailView youTubeThumbnailView3;
    private YouTubeThumbnailView youTubeThumbnailView4;
    private String[] drawerListViewItems;
    private DrawerLayout drawerLayout;
    private DrawerLayout mDrawerLayout;
    private ListView drawerListView;
    private ListView mDrawerList;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    private ActionBarDrawerToggle mDrawerToggle;
    Drawable selstation_up_btn; 
    ImageView imageView;
    private YouTubeThumbnailLoader youTubeThumbnailLoader;
    ScrollView mainScrollView;
    Button fav_up_btn1;
    Button fav_dwn_btn1;
    ArrayAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.home);

        ViewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
        ImagePagerAdapter adapter = new ImagePagerAdapter();
        viewPager.setAdapter(adapter);

final ActionBar actionBar = getActionBar();
actionBar.setCustomView(R.layout.actionbar_custom_view_home);
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);


ImageView myImageView = (ImageView) findViewById(R.id.selstation_up_btn);
Drawable d = getResources().getDrawable(R.drawable.selstation_up_btn);
imageView.setImageDrawable(d);  

编辑后的问题(对拉马拉尔的回应)

12-02 10:28:23.619: E/AndroidRuntime(24278): FATAL EXCEPTION: main
12-02 10:28:23.619: E/AndroidRuntime(24278): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.idg2/com.idg.omv.Home}: java.lang.NullPointerException
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread.access$700(ActivityThread.java:143)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.os.Looper.loop(Looper.java:137)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread.main(ActivityThread.java:4950)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at java.lang.reflect.Method.invokeNative(Native Method)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at java.lang.reflect.Method.invoke(Method.java:511)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at dalvik.system.NativeStart.main(Native Method)
12-02 10:28:23.619: E/AndroidRuntime(24278): Caused by: java.lang.NullPointerException
12-02 10:28:23.619: E/AndroidRuntime(24278):    at com.idg.omv.Home.onCreate(Home.java:89)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.Activity.performCreate(Activity.java:5179)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
12-02 10:28:23.619: E/AndroidRuntime(24278):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
12-02 10:28:23.619: E/AndroidRuntime(24278):    ... 11 more

【问题讨论】:

  • 你的setImageBitmap方法在哪里?

标签: java android bitmap


【解决方案1】:

这是因为setImageBitmap 似乎不是静态方法,但您将其称为静态方法。您可能需要一个 ImageView 的实例并在该实例上调用 setImageBitmap

即您需要从您的视图中获取 ImageView 的实例,然后调用该方法。

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    ImageView imgView = (ImageView) findViewById(R.id.the_id);
    imgView.setImageBitmap(((BitmapDrawable) d).getBitmap());
}

您也可以使用setImageDrawable 方法,这可能更适合您的情况。

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    ImageView imgView = (ImageView) findViewById(R.id.the_id);
    imgView.setImageDrawable(d);
}

由于drawable为空而发生错误,请尝试更改此

Drawable d = getResources().getDrawable(R.drawable.selstation_up_btn);
ImageView imgView = (ImageView) findViewById(R.id.the_id);
imgView.setImageBitmap(((BitmapDrawable) d).getBitmap());

到这里

Bitmap d = BitmapFactory.decodeResource(context.getResources(),
                                       R.drawable.selstation_up_btn);
ImageView imgView = (ImageView) findViewById(R.id.the_id);
imgView.setImageBitmap(d);

【讨论】:

  • 有更好的调用方式吗?我只是想正确调整页脚图像的大小:stackoverflow.com/questions/20229433/…
  • 试试ImageView imgView = (ImageView) findViewById(R.id.whatever_id_your_imageview_has)然后你就可以打电话给imgView.setImageBitmap(((BitmapDrawable) d).getBitmap())
  • 我做了,但似乎给我留下了错误 The field YouTubeBaseActivity.d is not visible
  • 也许你应该使用 setImageDrawable 方法?
  • 奇怪......实际上你应该有一个,因为这个方法是在 API 级别 1 中添加的,所以它一直都在那里......也许你可以试试这篇文章中建议的代码stackoverflow.com/questions/3035692/…
【解决方案2】:

您的setImageBitmap() 方法不是static,但您正试图以静态方式调用它。这就是问题所在。

试试

reference.setImageBitmap(((BitmapDrawable) d).getBitmap()); // if you have a reference to it

setImageBitmap(((BitmapDrawable) d).getBitmap()); // if it is in your current class

【讨论】:

    【解决方案3】:

    如果您的 ImageView 在 R.layout.home.
    试试这个

    ImageView myImageView = (ImageView) findViewById(R.id.your_image_id);
    myImageView.setImageBitmap(((BitmapDrawable) d).getBitmap());  
    

    编辑

    imageView = (ImageView) findViewById(R.id.your_image_id);
    Drawable d = getResources().getDrawable(R.drawable.selstation_up_btn);
    imageView.setImageDrawable(d);  
    

    并且selstation_up_btn 必须在drawable 文件夹中。

    【讨论】:

    • 我在 R.layout.home 中有我的 ImageView,但我得到了 YouTubeBaseActivity.d 字段不可见 selstation_up_btn 无法解析或在替换两行时不是字段 Drawable d = getResources( ).getDrawable(selstation_up_btn); imageView.setImageBitmap(((BitmapDrawable) d).getBitmap());
    • 我按照建议更新了我的源(如上所示),但现在我遇到了强制关闭错误(如上所示)
    • @Override public boolean onCreateOptionsMenu(Menu menu) { // 为操作栏中使用的菜单项充气 MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main, menu);返回 super.onCreateOptionsMenu(menu); }
    • 您会在onCreate 获得NullPointerException。从 logCat 我看不到第 89 行在哪里。 R.id.view_pagerR.layout.home 中吗?
    • imageView.setImageDrawable(d);更改为myImageView.setImageDrawable(d);或将ImageView myImageView = (ImageView) findViewById(R.id.your_image_id);更改为imageView = (ImageView) findViewById(R.id.your_image_id);
    猜你喜欢
    • 2013-01-15
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多