错误:将Drawable转换为片段内的位图

时间:2015-08-02 08:40:18

标签: android android-fragments bitmap

您好我正在从解析用户表填充自定义列表视图。如果该行不包含图像,我想显示一个本地图像。为此,我需要将可绘制图像转换为片段内的位图。我尝试了几种方法。但没有工作,我不知道错误是什么。

我的代码是......

postImage = po.getParseFile("pic");
                            if (postImage != null && postImage.getUrl() != null && postImage.getUrl().length() > 0) {
                                postImage.getDataInBackground(new GetDataCallback() {
                                    @Override
                                    public void done(byte[] bytes, ParseException e) {
                                        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                                        people.setPic(bmp);
                                    }
                                });
                            } else {
                                Bitmap icon = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.sanjay);
                                Log.d("ImageCoversion", BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.sanjay).toString());
                                people.setPic(icon);
                            }

我在getActivity()中遇到错误。在else块中的getResources()。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.support.v4.app.FragmentActivity.getResources()' on a null object reference

我的完整doInBackground代码是

protected List<People> doInBackground(List<People>... params) {

        try {

            final ParseQuery<ParseUser> query = ParseUser.getQuery();
            query.findInBackground(new FindCallback<ParseUser>() {
                @Override
                public void done(List<ParseUser> objects, ParseException e) {
                    ParseFile image = null;

                    if (e == null) {

                        peopleList.clear();

                        obj = objects;
                        for (ParseObject po : objects) {

                            //image = (ParseFile) po.get("pic");
                            ParseFile postImage;

                            final People people = new People();

                            people.setName(po.getString("username"));
                            people.setLastMessage(po.getString("email"));
                            people.setObjectId(po.getObjectId());

                            //people.setProfilePic(image.getUrl());

                            postImage = po.getParseFile("pic");
                            if (postImage != null && postImage.getUrl() != null && postImage.getUrl().length() > 0) {
                                postImage.getDataInBackground(new GetDataCallback() {
                                    @Override
                                    public void done(byte[] bytes, ParseException e) {
                                        Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                                        people.setPic(bmp);
                                    }
                                });
                            } else {
                                Bitmap icon = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.sanjay);
                                Log.d("ImageCoversion", icon.toString());
                                people.setPic(icon);

                            }
                            peopleList.add(people);
                        }
                    } else {
                        Log.d("*****Error", e.getMessage());
                    }
                }
            });

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return peopleList;
    }

1 个答案:

答案 0 :(得分:1)

尝试在代码开头声明Activity a = getActivity();

在其他地方而不是: Bitmap icon = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.sanjay);

使用: Bitmap icon = BitmapFactory.decodeResource(a.getResources(), R.drawable.sanjay);

有时getActivity()会返回null。