Devlight / InfiniteCycleViewPager

Infinite cycle ViewPager with two-way orientation and interactive effect.
Apache License 2.0
5.75k stars 827 forks source link

java.lang.NullPointerException: Attempt to invoke virtual method 'int com.solaris.want2know.infinitecyclerviewpager.InfiniteCyclePagerAdapter.getVirtualPosition(int)' on a null object reference #12

Closed droid-wise closed 8 years ago

droid-wise commented 8 years ago

I have already initialized VerticalInfinitiveCycleViewPager and i'm calling method getRealmItem() for getting position of element in array. Here is my code:

@Override
    public void liked(LikeButton likeButton) {
        int position         = infiniteCycleViewPager.getRealItem(); // Here i'm getting an error
        final Post post    = mPosts.get(position);

        Like like    = new Like.Builder().build();
        mSimpleFacebook.publish(post.getPhotoId(), like, new OnPublishListener() {
            @Override
            public void onComplete(String response) {
                TastyToast.makeText(HomeActivity.this, response, TastyToast.LENGTH_LONG,
                        TastyToast.DEFAULT);
            }

            @Override
            public void onException(Throwable throwable) {
                super.onException(throwable);
            }

            @Override
            public void onFail(String reason) {
                super.onFail(reason);
            }

            @Override
            public void onThinking() {
                super.onThinking();
            }
        });
    }
droid-wise commented 8 years ago

Here is the whole activity code, and i would really appreciate some help here:

`public class HomeActivity extends AppCompatActivity implements OnLikeListener {

private List<Post> mPosts = new ArrayList<>();
private SimpleFacebook mSimpleFacebook;
private VerticalInfiniteCycleViewPager infiniteCycleViewPager;

private Permission[] mPermissions = new Permission[]{
        Permission.USER_PHOTOS,
        Permission.PUBLISH_ACTION,
        Permission.USER_LIKES,
};

private DialogLoadingScreen progressDialog;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Making notification bar transparent
    if (Build.VERSION.SDK_INT >= 21) {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
    }
    setContentView(R.layout.activity_home);
    progressDialog  = DialogLoadingScreen.newInstance();
    mSimpleFacebook = SimpleFacebook.getInstance(this);
    initViews();
    initLikeButton();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            showProgressDialog();
        }
    }, 1000);
    mSimpleFacebook.requestNewPermissions(mPermissions, onNewPermissionListener);

    Util.changeStatusBarColor(this);
}

private void configureInfinitiveCycleViewPager() {
    infiniteCycleViewPager =
            (VerticalInfiniteCycleViewPager) findViewById(R.id.view_pager);
    VerticalPagerAdapter adapter = new VerticalPagerAdapter(getSupportFragmentManager(), mPosts);
    infiniteCycleViewPager.setAdapter(adapter);
}

private void initViews() {
    ImageView imageView   = (ImageView) findViewById(R.id.iv_background);
    Glide.with(HomeActivity.this)
            .load(R.drawable.background)
            .crossFade()
            .centerCrop()
            .diskCacheStrategy(DiskCacheStrategy.SOURCE)
            .into(imageView);

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Blurry.with(HomeActivity.this)
                    .radius(25)
                    .sampling(1)
                    .async()
                    .capture(findViewById(R.id.iv_background))
                    .into((ImageView) findViewById(R.id.iv_background));
        }
    }, 500);
}

private void initLikeButton() {
    LikeButton likeButton = (LikeButton) findViewById(R.id.thumb_button);
    likeButton.setOnLikeListener(this);
}

@Override
protected void onResume() {
    super.onResume();
    mSimpleFacebook = SimpleFacebook.getInstance(this);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mSimpleFacebook.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}

/***************************
 * Facebook Methods
 *****************************/

OnNewPermissionsListener onNewPermissionListener = new OnNewPermissionsListener() {
    @Override
    public void onSuccess(String accessToken,
                          List<Permission> acceptedPermissions,
                          List<Permission> declinedPermissions) {
        Log.d("Access Token: ", accessToken);
        Bundle params = new Bundle();
        params.putString("fields",
                "picture, url, source, created_time");
        params.putString("limit", "1000");

        String entityId = "957672727688311";

        mSimpleFacebook.get(entityId, "photos/uploaded", params, onActionListener);
    }

    @Override
    public void onCancel() {

    }

    @Override
    public void onException(Throwable throwable) {

    }

    @Override
    public void onFail(String reason) {

    }
};

OnActionListener<List<Photo>> onActionListener = new OnActionListener<List<Photo>>() {
    @Override
    public void onComplete(List<Photo> photos) {
        configureInfinitiveCycleViewPager();

        hideProgressDialog();
        for (Photo photo : photos) {
            Post post = new Post();
            post.setPhotoId(photo.getId());
            post.setSource(photo.getSource());
            post.setCreatedTime(photo.getCreatedTime());
            mPosts.add(post);
        }

        sortList(mPosts);
        infiniteCycleViewPager.notifyDataSetChanged();
    }
};

private void sortList(List<Post> posts) {
    Collections.sort(posts, new Comparator<Post>() {
        @Override
        public int compare(Post o1, Post o2) {
            if (o1.getCreatedTime() == null || o2.getCreatedTime() == null)
                return 0;
            return o2.getCreatedTime().compareTo(o1.getCreatedTime());
        }
    });
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    this.finish();
}

private void showProgressDialog() {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.add(progressDialog, "loading");
    transaction.commitAllowingStateLoss();

    progressDialog.setCancelable(false);
}

private void hideProgressDialog() {
    if (progressDialog.isVisible()) {
        progressDialog.dismiss();
    }
}

public SimpleFacebook getSimpleFacebook() {
    return mSimpleFacebook;
}

public VerticalInfiniteCycleViewPager getInfiniteCycleViewPager() {
    return infiniteCycleViewPager;
}

@Override
public void liked(LikeButton likeButton) {
    int position       = infiniteCycleViewPager.getRealItem();
    final Post post    = mPosts.get(position);

    Like like    = new Like.Builder().build();
    mSimpleFacebook.publish(post.getPhotoId(), like, new OnPublishListener() {
        @Override
        public void onComplete(String response) {
            TastyToast.makeText(HomeActivity.this, response, TastyToast.LENGTH_LONG,
                    TastyToast.DEFAULT);
        }

        @Override
        public void onException(Throwable throwable) {
            super.onException(throwable);
        }

        @Override
        public void onFail(String reason) {
            super.onFail(reason);
        }

        @Override
        public void onThinking() {
            super.onThinking();
        }
    });
}

@Override
public void unLiked(LikeButton likeButton) {

}

} `

GIGAMOLE commented 8 years ago

Hello. Thanks for this issue. I'll try to fix this soon.

droid-wise commented 8 years ago

Thank you for responding here so fast. Your library is awesome. Just if this bug can be fixed, it would be great, i really need that feature, getting position of selected item in ViewPager.

GIGAMOLE commented 8 years ago

This is very interesting, because method doesnt invoke npe. Try to fix.

droid-wise commented 8 years ago

Well i have tried, but i always got null object reference. Can you look at the code and see if you can find any mistake i have made?

hassanimsuya79 commented 8 years ago

Asante

hassanimsuya79 commented 7 years ago

Hi, Download this cool app https://play.google.com/store/apps/details?id=app.pnd.speedmeter&feature=search_result