私はPurchaseHelper.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);
}
OK]をクリックして、mPurchases1 = PurchaseHelper.createInstance()私の断片で罰金と素晴らしい作品。 oncreateには、残りのコードはoncreateviewにあります。
しかし、実際のアクティビティ(oncreate)で上記のコードを組み合わせてみると、oncreateviewを持つフラグメントではありませんが、何もしません。私が逃しているものは何ですか?
DiegoDeveloperが要求したとおりです。ここに私のPurchaseHelper.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 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
}
動作しないコードを入力してください – diegoveloper
完了しました。デベロッパー – Photogd
は、 – diegoveloper