Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 成功购买后未调用onProductPurchased和onActivityResult_Android_In App Purchase_In App Billing_Android Billing - Fatal编程技术网

Android 成功购买后未调用onProductPurchased和onActivityResult

Android 成功购买后未调用onProductPurchased和onActivityResult,android,in-app-purchase,in-app-billing,android-billing,Android,In App Purchase,In App Billing,Android Billing,我在Android应用程序中有一个购买按钮,我正在使用Anjlab应用程序内计费库。一旦购买成功,我想向服务器发送一个请求,服务器会通知我 但是,我根本无法实现“onProductPurchased”功能。在这里研究之后,我发现我需要调用onActivityResult。但即便如此,也没有得到足够的重视 获得onActivityResult的一个解决方案是覆盖它,但仍然无法通过。请找到下面的代码,并建议我需要做什么,以便一旦购买成功,我可以打电话到后端 public class Question

我在Android应用程序中有一个购买按钮,我正在使用Anjlab应用程序内计费库。一旦购买成功,我想向服务器发送一个请求,服务器会通知我

但是,我根本无法实现“onProductPurchased”功能。在这里研究之后,我发现我需要调用onActivityResult。但即便如此,也没有得到足够的重视

获得onActivityResult的一个解决方案是覆盖它,但仍然无法通过。请找到下面的代码,并建议我需要做什么,以便一旦购买成功,我可以打电话到后端

public class QuestionPrice extends Fragment implements View.OnClickListener, BillingProcessor.IBillingHandler{

private static final String PRODUCT_ID = "prod_00001";
private static final String PRODUCT_ID2 = "prod_00002";
private int paymentmade;
private String paymentdone;
ArrayList<String> arrayListOfProductIds;
private static final String LICENSE_KEY = "PUT YOUR MERCHANT KEY HERE";
private static final String MERCHANT_ID=null;
private static final String TAG = "Askquest";
private BillingProcessor bp;
private boolean readyToPurchase = false;
Button buybutton;
Button buybuttonReport;
private boolean purchased;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_question_price, container, false);
    buybutton = (Button) view.findViewById(R.id.buybutton);
    buybuttonReport = (Button) view.findViewById(R.id.buybuttonReport);
    buybutton.setOnClickListener(this);
    buybuttonReport.setOnClickListener(this);
    return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    if(!BillingProcessor.isIabServiceAvailable(getActivity())) {
        Toast.makeText(getActivity(), "In-app billing service is unavailable, please upgrade Android Market/Play to version >= 3.9.16", Toast.LENGTH_SHORT).show();
    }

    bp = new BillingProcessor(getActivity(), LICENSE_KEY, MERCHANT_ID,this);
    SkuDetails skuDetails = bp.getPurchaseListingDetails("PRODUCT_ID");
    getActivity().setTitle("Products");
}


@Override
public void onClick(View v) {
    SharedPreferences msharedprefs = getActivity().getSharedPreferences("sharedprefdata", MODE_PRIVATE);
    SharedPreferences.Editor editor = msharedprefs.edit();
    switch (v.getId()) {
        case R.id.buybutton:
    if (bp.loadOwnedPurchasesFromGoogle() && bp.isPurchased(PRODUCT_ID)) {
        boolean loadOwnedPurchasesFromGoogle = bp.loadOwnedPurchasesFromGoogle();
        boolean isPurchased = bp.isPurchased(PRODUCT_ID);

        TransactionDetails premiumTransactionDetailss = bp.getPurchaseTransactionDetails(PRODUCT_ID);

        Log.i("Transaction Details ", " TT Details " + premiumTransactionDetailss);
        if (purchased) {
             Toast.makeText(getActivity(), "You have already purchased a question.", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(getActivity(), "Purchase Initiated", Toast.LENGTH_SHORT).show();
            bp.purchase(getActivity(), PRODUCT_ID);
            TransactionDetails premiumTransactionDetails2 = bp.getPurchaseTransactionDetails(PRODUCT_ID);
            purchased = bp.isPurchased(PRODUCT_ID);
            Log.i("TAG", "isPurchased" + purchased);
            if (purchased) {
                Log.i("TAG", "Congratulations!!! Purchase Successfull");
                Toast.makeText(getActivity(), "Congratulations!!! Purchase Successfull", Toast.LENGTH_SHORT).show();
            }
        }
    }
            break;

        case R.id.buybuttonReport:
            TransactionDetails premiumTransactionDetails2 = bp.getPurchaseTransactionDetails(PRODUCT_ID2);
            Log.i("Transaction Details ", " TT Details "+premiumTransactionDetails2);
            if (bp.loadOwnedPurchasesFromGoogle() && bp.isPurchased(PRODUCT_ID2))
            {
                boolean loadOwnedPurchasesFromGoogle = bp.loadOwnedPurchasesFromGoogle();
                boolean  isPurchased = bp.isPurchased(PRODUCT_ID2);
                TransactionDetails premiumTransactionDetailss = bp.getPurchaseTransactionDetails(PRODUCT_ID2);
                Log.i("Transaction Details ", " TT Details "+premiumTransactionDetailss);
               Log.i("TAG", ""+msharedprefs.getInt("reportQues", -1));

                Toast.makeText(getActivity(), "You have already purchased a report.", Toast.LENGTH_SHORT).show();
            }
            else
            {
             Toast.makeText(getActivity(), "Purchase Initiated", Toast.LENGTH_SHORT).show();
             bp.purchase(getActivity(), PRODUCT_ID2);
             purchased = bp.isPurchased(PRODUCT_ID2);
             if ( purchased)
             {
                 Log.i("TxnDetails : ","TxnDetails : "+premiumTransactionDetails22.purchaseInfo.purchaseData.orderId.toString());
             }
                Log.i("TAG", "isPurchased"+purchased );
            }
            break;
    }
}

@Override
public void onProductPurchased(@NonNull String productId, @Nullable TransactionDetails details) {

    SharedPreferences msharedprefs = getActivity().getSharedPreferences("sharedprefdata", MODE_PRIVATE);
    SharedPreferences.Editor editor = msharedprefs.edit();
    String userid = msharedprefs.getString("userid", null);
    String username = msharedprefs.getString("username", null);

    Toast.makeText(getActivity(), "On Product Purchased", Toast.LENGTH_SHORT).show();
    Log.i("TAG", "On Product Purchased" );

    purchased = bp.isPurchased(PRODUCT_ID2);
    if ( purchased) {
        Toast.makeText(getActivity(), "Congratulations!!! Purchase Successfull", Toast.LENGTH_SHORT).show();
        Log.i("TAG", "Button Clicked Product Purchased" );
        Toast.makeText(getActivity(), "Button Clicked Product Purchased", Toast.LENGTH_SHORT).show();
    }
    editor.putInt("paymentdone", 1);
    editor.commit();
    purchasemade(userid);

}

@Override
    public void onPurchaseHistoryRestored() {
    Log.i("TAG", "Button Clicked Product History Restored" );
   Toast.makeText(getActivity(), "Button Clicked Product History Restored", Toast.LENGTH_SHORT).show();
    editor.putInt("paymentdone", 0);
    editor.commit();

}

@Override
public void onBillingError(int errorCode, @Nullable Throwable error) {
    Toast.makeText(getActivity(), "Button Clicked Billing Error", Toast.LENGTH_SHORT).show();
    Log.i("TAG", "Button Clicked Billing Error" );
    editor.putInt("paymentdone", 0);
    editor.commit();
}

@Override
public void onBillingInitialized() {
    Toast.makeText(getActivity(), "Billing Initialized", Toast.LENGTH_SHORT).show();
    readyToPurchase = true;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (!bp.handleActivityResult(requestCode, resultCode, data)) {
        super.onActivityResult(requestCode, resultCode, data);
        FragmentManager fragmentManager = getFragmentManager();
        Fragment fragment = fragmentManager.findFragmentByTag("Products");
        Toast.makeText(getActivity(), "Inside On Activity Result", Toast.LENGTH_SHORT).show();
        Log.i("TAG", "Inside On Activity Result" );
        if (fragment != null)
        {
            ((QuestionPrice)fragment).onActivityResult(requestCode, resultCode, data);
        }
    }
}

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

private void purchasemade(String userid) {
    Log.i("TAG", "Inside Purchase Made" );
    Toast.makeText(getActivity(), "Inside Purchase Made", Toast.LENGTH_SHORT).show();
}
}
公共类QuestionPrice扩展片段实现View.OnClickListener、BillingProcessor.IBillingHandler{
私有静态最终字符串产品\u ID=“prod\u 00001”;
私有静态最终字符串产品_ID2=“prod_00002”;
私人内部支付;
私人字符串paymentdone;
ArrayList ArrayListOffProductId;
私有静态最终字符串许可证\u KEY=“将您的商户密钥放在此处”;
私有静态最终字符串\u ID=null;
私有静态最终字符串标记=“Askquest”;
私人计费处理器bp;
私有布尔readyToPurchase=false;
按钮购买按钮;
按钮购买按钮报告;
购买私人楼宇;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、@Nullable Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u question\u price,container,false);
buybutton=(Button)view.findViewById(R.id.buybutton);
buybuttonReport=(Button)view.findViewById(R.id.buybuttonReport);
buybutton.setOnClickListener(此);
buybuttonReport.setOnClickListener(此);
返回视图;
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
如果(!BillingProcessor.isIabServiceAvailable(getActivity())){
Toast.makeText(getActivity(),“应用内计费服务不可用,请将Android Market/Play升级到>=3.9.16版本”,Toast.LENGTH_SHORT).show();
}
bp=新计费处理器(getActivity(),许可证密钥,商户ID,此);
SkuDetails SkuDetails=bp.getPurchaseListingDetails(“产品ID”);
getActivity().setTitle(“产品”);
}
@凌驾
公共void onClick(视图v){
SharedPreferences msharedprefs=getActivity().getSharedPreferences(“SharedPreferData”,MODE\u PRIVATE);
SharedReferences.Editor=msharedprefs.edit();
开关(v.getId()){
案例R.id.buybutton:
if(bp.loadOwnedPurchasesFromGoogle()&&bp.isPurchased(产品ID)){
boolean loadOwnedPurchasesFromGoogle=bp.loadOwnedPurchasesFromGoogle();
布尔值isPurchased=bp.isPurchased(产品标识);
TransactionDetails PremiumTransactionDetails=bp.getPurchaseTransactionDetails(产品标识);
Log.i(“交易详情”、“TT详情”+PremiumTransactionDetails);
如果(已购买){
Toast.makeText(getActivity(),“您已经购买了一个问题。”,Toast.LENGTH_SHORT.show();
}否则{
Toast.makeText(getActivity(),“购买已启动”,Toast.LENGTH_SHORT.show();
采购(getActivity(),产品标识);
TransactionDetails premiumTransactionDetails2=bp.getPurchaseTransactionDetails(产品标识);
采购=bp.isPurchased(产品标识);
Log.i(“标签”、“已购买”+已购买);
如果(已购买){
Log.i(“TAG”,“恭喜!!!购买成功”);
Toast.makeText(getActivity(),“恭喜!!!购买成功”,Toast.LENGTH\u SHORT.show();
}
}
}
打破
案例R.id.BuyButton报告:
TransactionDetails premiumTransactionDetails2=bp.getPurchaseTransactionDetails(产品编号2);
Log.i(“交易详情”、“TT详情”+premiumTransactionDetails2);
if(bp.loadOwnedPurchasesFromGoogle()&&bp.isPurchased(PRODUCT_ID2))
{
boolean loadOwnedPurchasesFromGoogle=bp.loadOwnedPurchasesFromGoogle();
布尔值isPurchased=bp.isPurchased(PRODUCT_ID2);
TransactionDetails PremiumTransactionDetails=bp.getPurchaseTransactionDetails(产品编号2);
Log.i(“交易详情”、“TT详情”+PremiumTransactionDetails);
Log.i(“TAG”、“”+msharedprefs.getInt(“reportQues”、-1));
Toast.makeText(getActivity(),“您已经购买了一份报告。”,Toast.LENGTH\u SHORT.show();
}
其他的
{
Toast.makeText(getActivity(),“购买已启动”,Toast.LENGTH_SHORT.show();
采购(getActivity(),产品编号2);
已购买=bp.已购买(产品编号2);
如果(已购买)
{
Log.i(“TxnDetails:”,“TxnDetails:”+premiumTransactionDetails22.purchaseInfo.purchaseData.orderId.toString());
}
Log.i(“标签”、“已购买”+已购买);
}
打破
}
}
@凌驾
public void onProductPurchased(@NonNull String productId,@Nullable TransactionDetails){
SharedPreferences msharedprefs=getActivity().getSharedPreferences(“SharedPreferData”,MODE\u PRIVATE);
SharedReferences.Editor=msharedprefs.edit();
字符串userid=msharedprefs.getString(“userid”,null);
字符串username=msharedprefs.getString(“用户名”,null);
Toast.makeText(getActivity(),“关于购买的产品”,Toast.LENGTH_SHORT.show();
Log.i(“标签”,“购买的产品上”);
已购买=bp.已购买(产品编号2);
如果(已购买){
Toast.makeText(getActivity(),“恭喜!!!购买成功”,Toast.LENGTH\u SHORT.show();
Log.i(“标签”,“点击按钮购买的产品”);
Toast.makeText(getActivity(),”按钮单击了产品购买