我有一个我在puplyHelper.java
中设置的全局布尔值 purchaseHelper1.mPurchaseItems.add(new PurchaseItem(SKU_ISSUE_PRO_UPGRADE,false, Features.UpgradePro));
现在我在我的任何活动中都以这种方式检查它,如果是真的,它会隐藏一些布局:
mPurchases1 = PurchaseHelper.createInstance();
if(mPurchases1.isPurchased(Features.UpgradePro) {
mAdView.setVisibility(View.GONE);
mAdLayout.setVisibility(View.GONE);
}
好吧,如果我放入 mpurchases1 = puphoyHelper.createinstance(); 在ongreate和oncreateview中的其他代码中,则可以在我的片段中效果很好。
但是,当我尝试在实际活动中(在ongreate中)而不是具有onCreateview的片段中的上述代码的任何组合时,它无济于事。知道我缺少什么吗?
按DieGodeveloper的要求。这是我的paskurehelper.java文件
public class PurchaseHelper {
public static final String SKU_ISSUE_PRO_UPGRADE = "pro";
public static final String SKU_ISSUE_PRO_UPGRADE_DISCOUNT = "prodiscount";
public static final String SKU_ISSUE_PRO_UPGRADE_DISCOUNTED = "prodiscounted";
public static final String SKU_ISSUE_PRO_UPGRADE_SUBSCRIPTION= "prosubscription";
private static final String LOG_TAG = PurchaseHelper.class.getSimpleName();
private static final int RC_REQUEST = 10001;
private IabHelper mHelper;
ArrayList<PurchaseItem> mPurchaseItems= new ArrayList<PurchaseItem>();
private static PurchaseHelper mInstance;
public static PurchaseHelper createInstance(){
if (mInstance==null){
PurchaseHelper purchaseHelper1 = new PurchaseHelper();
purchaseHelper1.mPurchaseItems= new ArrayList<PurchaseItem>();
purchaseHelper1.mPurchaseItems.add(new PurchaseItem(SKU_ISSUE_PRO_UPGRADE,false, Features.UpgradePro));
purchaseHelper1.mPurchaseItems.add(new PurchaseItem(SKU_ISSUE_PRO_UPGRADE_DISCOUNT,false,Features.UpgradeProDiscount));
purchaseHelper1.mPurchaseItems.add(new PurchaseItem(SKU_ISSUE_PRO_UPGRADE_DISCOUNTED,false,Features.UpgradeProDiscounted));
purchaseHelper1.mPurchaseItems.add(new PurchaseItem(SKU_ISSUE_PRO_UPGRADE_SUBSCRIPTION, true,Features.UpgradeProSubscription));
mInstance =purchaseHelper1;
}
return mInstance;
}
public boolean isPurchased(Features feature){
/*
//TODO remove
return true;
*/
Boolean result = false;
for (PurchaseItem item:mPurchaseItems) {
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_DISCOUNT)){
return true;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE)){
return true;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_DISCOUNTED)){
return true;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_SUBSCRIPTION)){
return true;
}
if (item.IsPurchased && item.IsFeature==true && item.FeatureName == feature){
return true;
}
}
return result;
}
public boolean showPurchaseDialog(){
/*
//TODO remove
return false;
*/
for (PurchaseItem item:mPurchaseItems) {
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE)){
return false;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_DISCOUNT)){
return false;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_DISCOUNTED)){
return false;
}
if (item.IsPurchased && item.SKU.equals(SKU_ISSUE_PRO_UPGRADE_SUBSCRIPTION)){
return false;
}
}
for (PurchaseItem item:mPurchaseItems) {
if (item.IsPurchased==false && item.IsFeature==true){
return true;
}
}
return false;
}
public ArrayList<PurchaseItem> getItems(){
return mPurchaseItems;
}
public void setPurchases(String sku){
for (PurchaseItem item:mPurchaseItems) {
if (item.SKU.equals(sku)){
item.IsPurchased = true;
}
}
}
public void resetPurchases(){
for (PurchaseItem item:mPurchaseItems) {
item.IsPurchased = false;
}
}
public static String md5(String s) {
try {
// Create MD5 Hash
MessageDigest digest = MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
// Create Hex String
StringBuffer hexString = new StringBuffer();
for (int i=0; i<messageDigest.length; i++)
hexString.append(Integer.toHexString(0xFF & messageDigest[i]));
return hexString.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return "";
}
这是代码运行良好的片段。我仅包括有关客户隐私问题的相关部分。
public class HomeFragmentThree extends Fragment {
private ArrayList<String> threeDaysDateLabels = new ArrayList<>();
private ArrayList<Double> threeDaysKpValues = new ArrayList<>();
private ArrayList<String> twentySevenDaysDateLabels = new ArrayList<>();
private ArrayList<Double> twentySevenDaysKpValues = new ArrayList<>();
private LineChartView threeDayChart, twentySevenDayChart;
private ProgressBar chartsProgress,chartsProgress2;
private TextView threeDaysDates, twentySevenDaysDates, chartDisabled;
PurchaseHelper mPurchases1;
public HomeFragmentThree() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
////View rootView= inflater.inflate(R.layout.fragment_three, container, false);
View view = inflater.inflate(R.layout.fragment_three, container, false);
mPurchases1 = PurchaseHelper.createInstance();
setUI(view);
getData();
if(mPurchases1.isPurchased(Features.UpgradePro) || mPurchases1.isPurchased(Features.UpgradeProDiscounted) || mPurchases1.isPurchased(Features.UpgradeProDiscount) || mPurchases1.isPurchased(Features.UpgradeProSubscription)) {
twentySevenDayChart.setVisibility(View.VISIBLE);
twentySevenDaysDates.setVisibility(View.VISIBLE);
chartDisabled.setVisibility(View.GONE);
}else {
twentySevenDayChart.setVisibility(View.GONE);
twentySevenDaysDates.setVisibility(View.GONE);
chartDisabled.setVisibility(View.VISIBLE);
}
chartDisabled.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getActivity(), UpgradeNowActivity.class);
startActivity(intent);
}
});
return view;
}
这是我试图实现相同布尔值的实际活动,而不是片段。布尔检查根本没有做任何事情。我仅包括有关客户隐私问题的相关部分。
public class swpcAlertsActivity extends AppCompatActivity {
@BindView(R.id.swipeRefreshLayout)
SwipeRefreshLayout mSwipeRefreshLayout;
@BindView(R.id.itemsRecyclerView)
RecyclerView mRecyclerView;
private ProductAdapter mRecyclerAdapter;
private IabHelper mHelper;
private AdView mAdView;
private LinearLayout mAdLayout;
private TextView adText1;
private TextView adText2;
PurchaseHelper mPurchases1;
private List<ProductItem> mProductList;
private List<ProductItem> mRecentProductList = new ArrayList<>(5);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_swpc);
mPurchases1 = PurchaseHelper.createInstance();
//// initialize admob banner ad and hiding it if they have the pro version
mAdView = (AdView) findViewById(R.id.adView);
mAdLayout = (LinearLayout) findViewById(R.id.adLayout);
AdRequest adRequest = new AdRequest.Builder()
.build();
mAdView.loadAd(adRequest);
//// hiding the admob banner on the home fragment if they have the pro version!
mAdView = (AdView) findViewById(R.id.adView);
mAdLayout = (LinearLayout) findViewById(R.id.adLayout);
//// go to upgrade screen if they click on ad text
adText1 = (TextView) findViewById(R.id.adText1);
adText2 = (TextView) findViewById(R.id.adText2);
adText1.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(swpcAlertsActivity.this, UpgradeNowActivity.class);
startActivity(intent);
}
});
adText2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(swpcAlertsActivity.this, UpgradeNowActivity.class);
startActivity(intent);
}
});
ButterKnife.bind(this);
initUI();
callAPI();
//todo
//// It is supposed to hide the ads if they have pro version. But the f'ing thing isn't working on this activity. Even though it works fine on HomeContentFragment.java.
if(mPurchases1.isPurchased(Features.UpgradePro) || mPurchases1.isPurchased(Features.UpgradeProDiscounted) || mPurchases1.isPurchased(Features.UpgradeProDiscount) || mPurchases1.isPurchased(Features.UpgradeProSubscription)) {
mAdView.setVisibility(View.GONE);
mAdLayout.setVisibility(View.GONE);
}
}
private void initUI() {
mRecyclerView.setHasFixedSize(true);
// use a linear layout manager
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Refresh items
refreshItems();
}
});
}
/****************************** List View *******************************/
void refreshItems() {
callAPI();
}
void onItemsLoadComplete() {
// Sort
Collections.sort(mProductList, new ToSort());
// Copy recent 35 items
mRecentProductList.clear();
Iterator<ProductItem> iterator = mProductList.iterator();
for (int i = 0 ; i < Math.min(5, mProductList.size()) ; i++) {
mRecentProductList.add(iterator.next());
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// Update the adapter and notify data set changed
if (mRecyclerAdapter == null) {
mRecyclerAdapter = new ProductAdapter(mRecentProductList);
mRecyclerView.setAdapter(mRecyclerAdapter);
} else {
mRecyclerAdapter.notifyDataSetChanged();
}
// Stop refresh animation
mSwipeRefreshLayout.setRefreshing(false);
}
});
}
public class ToSort implements Comparator<ProductItem> {
@Override
public int compare(ProductItem obj1, ProductItem obj2) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
try {
Date date1 = format.parse(obj1.issue_datetime);
Date date2 = format.parse(obj2.issue_datetime);
return date2.compareTo(date1);
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
}
功能类:
public enum Features {
UpgradePro,
UpgradeProDiscount,
UpgradeProDiscounted,
UpgradeProSubscription
}
您有一些错误:
if (item.IsPurchased && item.IsFeature==true && item.FeatureName == feature){
return true;
}
,不要忘记检查您在清单文件中看到的服务类。