2015-03-02 138 views
0

我正在尝试开发一个简单的应用程序,当我购买一个活动时,它会启用按钮。应用程序重新启动后重置

我的代码工作正常,但问题是当我退出应用程序并重新打开它时,以前在购买后启用的按钮,它们变为禁用状态,但不允许再次重新购买。

(我需要做的是在购买时)

那么如何保持启用按钮保持启用状态,当我重新启动应用程序?

这里是我的代码:

public class MainScreen extends ActionBarActivity { 

private static final String TAG = "com.aseng90_test.smiap2"; 
IabHelper mHelper; 
static final String ITEM_SKU = "com.aseng90_test.smiap2_button5"; 
static final String ITEM_SKU2 = "com.aseng90_test.smiap2_buyact2"; 
static final String ITEM_SKU3 = "com.aseng90_test.smiap2_buyact3"; 
static final String ITEM_SKU4 = "com.aseng90_test.smiap2_buyall"; 

public Button Activity1; 
public Button Activity2; 
public Button Activity3; 


public Button buyButton; 
public Button buyAct2; 
public Button buyAct3; 
public Button buyAll; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_screen); 

    buyButton = (Button) findViewById(R.id.buyButton); 
    buyAct2 = (Button) findViewById(R.id.buyact2); 
    buyAct3 = (Button) findViewById(R.id.buyact3); 
    buyAll = (Button) findViewById(R.id.buyall); 


    Activity1 = (Button) findViewById(R.id.act1); 
    Activity2 = (Button) findViewById(R.id.act2); 
    Activity3 = (Button) findViewById(R.id.act3); 

    Activity1.setEnabled(false); 
    Activity2.setEnabled(false); 
    Activity3.setEnabled(false); 

String base64EncodedPublicKey = 
      ""; 

    mHelper = new IabHelper(this, base64EncodedPublicKey); 

    mHelper.startSetup(new 
           IabHelper.OnIabSetupFinishedListener() { 
            public void onIabSetupFinished(IabResult result) 
            { 
             if (!result.isSuccess()) { 
              Log.d(TAG, "In-app Billing setup failed: " + 
                result); 
             } else { 
              Log.d(TAG, "In-app Billing is set up OK"); 
             } 
            } 
           }); 
} 

public void buyClick(View view) { 
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, 
      mPurchaseFinishedListener, "mypurchasetoken"); 
} 

public void buyAct2 (View view){ 
    mHelper.launchPurchaseFlow(this, ITEM_SKU2, 10002, mPurchaseFinishedListener, "buyact2"); 
} 

public void buyAct3 (View view){ 
    mHelper.launchPurchaseFlow(this,ITEM_SKU3, 10003, mPurchaseFinishedListener, "buyact3"); 
} 

public void buyAll (View view){ 
    mHelper.launchPurchaseFlow(this, ITEM_SKU4,10004, mPurchaseFinishedListener, "buyall"); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) 
{ 
    if (!mHelper.handleActivityResult(requestCode, 
      resultCode, data)) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 



IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
     = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, 
             Purchase purchase) 
    { 
     if (result.isFailure()) { 
      // Handle error 
      return; 
     } 
     if (purchase.getSku().equals(ITEM_SKU)) { 
      Activity1.setEnabled(true); 
      buyButton.setEnabled(false); 
     } 

     if (purchase.getSku().equals(ITEM_SKU2)){ 
     Activity2.setEnabled(true); 
     buyAct2.setEnabled(false); 
    } 

     if (purchase.getSku().equals(ITEM_SKU3)){ 
      Activity3.setEnabled(true); 
      buyAct3.setEnabled(false); 
     } 

     if (purchase.getSku().equals(ITEM_SKU4)) { 
      Activity1.setEnabled(true); 
      Activity2.setEnabled(true); 
      Activity3.setEnabled(true); 

      buyAll.setEnabled(false); 
      buyButton.setEnabled(false); 
      buyAct2.setEnabled(false); 
      buyAct3.setEnabled(false); 
     } 
    } 


}; 

public void Activity1 (View view) 
{ 
    startActivity(new Intent(MainScreen.this, Click1.class)); 

} 

public void Activity2 (View view){ 
    startActivity(new Intent(MainScreen.this, Activity2.class)); 
} 

public void Activity3 (View view){ 
    startActivity(new Intent(MainScreen.this, Activity3.class)); 
} 










@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) mHelper.dispose(); 
    mHelper = null ; 
} 

非常感谢

好了,所以我使用的共享偏好来拯救我的活动状态,但是当我尝试启用与其他免费按钮一个按钮,它只是正常工作,但它不适用于应用程序内购买按钮(只是它让我购买,但购买后永远不会启用停用的按钮)所以我不知道在应用程序购买和共享偏好之间是否存在冲突在我的代码?

这是我的编辑的代码:

包com.aseng90_test.smiap2;

import android.content.Intent;导入 android.content.SharedPreferences;导入 android.support.v7.app.ActionBarActivity;导入android.os.Bundle; import android.util.Log;导入android.view.View;导入 android.widget.Button;导入android.widget.Toast;

import com.aseng90_test.smiap2.util.IabHelper;进口 com.aseng90_test.smiap2.util.IabResult;进口 com.aseng90_test.smiap2.util.Purchase;

公共类MainScreen扩展ActionBarActivity {

private static final String TAG = "com.aseng90_test.smiap2"; 
IabHelper mHelper; 
static final String ITEM_SKU = "com.aseng90_test.smiap2_button55"; 
static final String ITEM_SKU2 = "com.aseng90_test.smiap2_buyact22"; 
static final String ITEM_SKU3 = "com.aseng90_test.smiap2_buyact33"; 
static final String ITEM_SKU4 = "com.aseng90_test.smiap2_buyall_1"; 






private Button Activity1; 
private Button Activity2; 
private Button Activity3; 

private Button buyButton; 
private Button buyAct2; 
private Button buyAct3; 
private Button buyAll; 

个人按钮EAct4;私人按钮Act4;

private SharedPreferences prefs; 
private String prefName = "MyPref"; 


boolean Activity1_isEnabled; 
boolean Activity2_isEnabled; 
boolean Activity3_isEnabled; 
boolean Act4_isEnabled; 

boolean buyButton_isEnabled; 
boolean buyAct2_isEnabled; 
boolean buyAct3_isEnabled; 
boolean buyAll_isEnabled; 
boolean EAct4_isEnabled; 

private static final String Activity1_state = "Activity1_state"; 
private static final String Activity2_State = "Activity2_state"; 
private static final String Activity3_State = "Activity3_state"; 
private static final String buyButton_State = "buyButton_state"; 
private static final String buyAct2_State = "buyAct2_state"; 
private static final String buyAct3_State = "buyAct3_state"; 
private static final String buyAll_State = "buyAll_state"; 
private static final String Act4_State = "Act4_state"; 
private static final String EAct4_State = "EAct4_state"; 



public void buyClick(View view) { 
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001, 
      mPurchaseFinishedListener, "mypurchasetoken"); 
} 

public void buyAct2 (View view){ 
    mHelper.launchPurchaseFlow(this, ITEM_SKU2, 10002, mPurchaseFinishedListener, "buyact2"); 
} 

public void buyAct3 (View view){ 
    mHelper.launchPurchaseFlow(this,ITEM_SKU3, 10003, mPurchaseFinishedListener, "buyact3"); 
} 

public void buyAll (View view){ 
    mHelper.launchPurchaseFlow(this, ITEM_SKU4,10004, mPurchaseFinishedListener, "buyall"); 
} 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_screen); 

    buyButton = (Button) findViewById(R.id.buyButton); 
    buyAct2 = (Button) findViewById(R.id.buyact2); 
    buyAct3 = (Button) findViewById(R.id.buyact3); 
    buyAll = (Button) findViewById(R.id.buyall); 


    Activity1 = (Button) findViewById(R.id.act1); 
    Activity2 = (Button) findViewById(R.id.act2); 
    Activity3 = (Button) findViewById(R.id.act3); 




    EAct4 = (Button) findViewById(R.id.eact4); 
    Act4 = (Button) findViewById(R.id.act4); 





    String base64EncodedPublicKey = 
      ""; 

    mHelper = new IabHelper(this, base64EncodedPublicKey); 

    mHelper.startSetup(new 
      IabHelper.OnIabSetupFinishedListener() { 
      public void onIabSetupFinished(IabResult result) 
     { 
      if (!result.isSuccess()) { 
      Log.d(TAG, "In-app Billing setup failed: " + result); 
       } else { 
       Log.d(TAG, "In-app Billing is set up OK"); 
        } 
     } 
    }); 
} 





public void EACT4 (View view) { 
    EAct4.setEnabled(false); 
    Act4.setEnabled(true); 


} 

public void ACT4 (View view){ 
    Toast.makeText(MainScreen.this, 
      "ACt4 Clicked", Toast.LENGTH_LONG).show(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, 
           Intent data) 
{ 
    if (!mHelper.handleActivityResult(requestCode, 
      resultCode, data)) { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 



IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener 
     = new IabHelper.OnIabPurchaseFinishedListener() { 
    public void onIabPurchaseFinished(IabResult result, 
             Purchase purchase) 
    { 
     if (result.isFailure()) { 
      // Handle error 
      return; 
     } 
     if (purchase.getSku().equals(ITEM_SKU)) { 
      Activity1.setEnabled(true); 
      buyButton.setEnabled(false); 

     } 

     if (purchase.getSku().equals(ITEM_SKU2)){ 
     Activity2.setEnabled(true); 
     buyAct2.setEnabled(false); 
    } 

     if (purchase.getSku().equals(ITEM_SKU3)){ 
      Activity3.setEnabled(true); 
      buyAct3.setEnabled(false); 
     } 

     if (purchase.getSku().equals(ITEM_SKU4)) { 
      Activity1.setEnabled(true); 
      Activity2.setEnabled(true); 
      Activity3.setEnabled(true); 

      buyAll.setEnabled(false); 
      buyButton.setEnabled(false); 
      buyAct2.setEnabled(false); 
      buyAct3.setEnabled(false); 
     } 
    } 


}; 




public void Activity1 (View view) 
{ 
    startActivity(new Intent(MainScreen.this, Click1.class)); 

} 

public void Activity2 (View view){ 
    startActivity(new Intent(MainScreen.this, Activity2.class)); 
} 

public void Activity3 (View view){ 
    startActivity(new Intent(MainScreen.this, Activity3.class)); 
} 


@Override 
public void onDestroy() { 
    super.onDestroy(); 
    if (mHelper != null) mHelper.dispose(); 
    mHelper = null ; 
} 


@Override 
protected void onPause(){ 
    super.onPause(); 

    if (Act4.isEnabled()){ 
     Act4_isEnabled = true; 
    } 
    else { 
     Act4_isEnabled = false; 
    } 


    if (Activity1.isEnabled()){ 
     Activity1_isEnabled = true; 
    } 
    else { 
     Activity1_isEnabled = false; 
    } 

    if (Activity2.isEnabled()){ 
     Activity2_isEnabled = true; 
    } 
    else { 
     Activity2_isEnabled = false; 
    } 

    if (Activity3.isEnabled()){ 
     Activity3_isEnabled = true; 
    } 
    else { 
     Activity3_isEnabled = false; 
    } 

    if (buyButton.isEnabled()){ 
     buyButton_isEnabled = true; 
    } 
    else { 
     buyButton_isEnabled = false; 
    } 

    if (buyAct2.isEnabled()){ 
     buyAct2_isEnabled = true; 
    } 
    else { 
     buyAct2_isEnabled = false; 
    } 

    if (buyAct3.isEnabled()){ 
     buyAct3_isEnabled = true; 
    } 
    else { 
     buyAct3_isEnabled = false; 
    } 

    if (buyAll.isEnabled()){ 
     buyAll_isEnabled = true; 
    } 
    else { 
     buyAll_isEnabled = false; 
    } 



    prefs = getSharedPreferences(prefName,MODE_PRIVATE); 
    SharedPreferences.Editor editor = prefs.edit(); 
    editor.putBoolean(Act4_State,Act4_isEnabled); 
    editor.putBoolean(EAct4_State,EAct4_isEnabled); 
    editor.putBoolean(Activity1_state,Activity1_isEnabled); 
    editor.putBoolean(Activity2_State,Activity2_isEnabled); 
    editor.putBoolean(Activity3_State,Activity3_isEnabled); 
    editor.putBoolean(buyButton_State,buyButton_isEnabled); 
    editor.putBoolean(buyAct2_State,buyAct2_isEnabled); 
    editor.putBoolean(buyAct3_State,buyAct3_isEnabled); 
    editor.putBoolean(buyAll_State,buyAll_isEnabled); 
    editor.apply(); 

} 

@Override 
protected void onResume(){ 
    super.onResume(); 

    prefs = getSharedPreferences(prefName,MODE_PRIVATE); 

    Act4.setEnabled(prefs.getBoolean(Act4_State,false)); 
    Activity1.setEnabled(prefs.getBoolean(Activity1_state,false)); 
    Activity2.setEnabled(prefs.getBoolean(Activity2_State,false)); 
    Activity3.setEnabled(prefs.getBoolean(Activity3_State,false)); 

    EAct4.setEnabled(prefs.getBoolean(EAct4_State,true)); 
    buyButton.setEnabled(prefs.getBoolean(buyButton_State,true)); 
    buyAct2.setEnabled(prefs.getBoolean(buyAct2_State,true)); 
    buyAct3.setEnabled(prefs.getBoolean(buyAct3_State,true)); 
    buyAll.setEnabled(prefs.getBoolean(buyAll_State,true)); 
} 

再次感谢

+0

为什么你不在DB中存储这些值? – VVB 2015-03-02 05:13:32

+0

如何做到这一点? @VVB – 2015-03-02 05:19:06

+0

存储跟踪购买的值。 – VVB 2015-03-02 05:26:15

回答

0

当你的活动重新启动,它不会从以前的实例保存的自己的观点状态。因此,您可能需要将状态数据保存到某个地方,以便在重新启动活动时,可以重新设置视图,查看保存的状态数据。您可以使用“SharedPreferences”类。 SharedPreferences允许您将信息存储在键值对中。我想这符合你的目的。

SharedPreferences pref = getApplicationContext().getSharedPreferences("ProductCache", 0); 
// 0 - for private mode 
//First parameter is the name of your preference file.Could be "ProductCache" in your case. 
// Default 0 for private access. 
SharedPreferences.Editor editor = pref.edit(); // edit your preference file 
editor.putString("KEY","VALUE");//save strings 
editor.putBoolean("KEY",true);//save booleans or any other type of data. 
editor.commit(); //commit your changes 

您可以设置您的产品在应用中打开,你可以通过使用您用来存储信息相同的“键”查看同一文件的mPurchaseFinishedListener.Next时间已经买好来检查产品已经购买,然后你可以相应地设置你的观点。

如果这不符合您的目的,那么您可能必须开始实施一个跟踪所有购买的SQLite数据库。请仔细阅读这篇文章的Android开发者,因为它可以帮助你进一步:

http://developer.android.com/training/basics/data-storage/index.html

希望这有助于。干杯!

+0

谢谢,我会尝试 – 2015-03-02 05:42:35

0

使用CheckOut library它为您做的一切,你可以检查购买的物品,并根据sku你可以启用或禁用购买按钮。