【问题标题】:Card.io usage in android. Displaying Credit card number and Expiry dateCard.io 在 Android 中的使用。显示信用卡号和到期日
【发布时间】:2013-06-13 15:25:29
【问题描述】:

我正在做一个 android 应用程序,应用程序读取 16 位信用卡号和到期日期并显示它。为此,我正在使用 Card.io。 应用不断扫描卡,但onActivityResult函数没有调用显示卡号和到期日期。

我的代码如下

import io.card.payment.CardIOActivity;
import io.card.payment.CreditCard;
import org.my.scanExample.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SlidingDrawer;
import android.widget.TextView;

public class MyScanActivity extends Activity
{
// You MUST register with card.io to get an app token. Go to https://card.io/apps/new/
private static final String MY_CARDIO_APP_TOKEN = "0ac6f74xxxxxxxbefe74e92c7eca"; // My Token number

final String TAG = getClass().getName();

private Button scanButton;
private TextView resultTextView;

private int MY_SCAN_REQUEST_CODE = 100; // arbitrary int

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    resultTextView = (TextView)findViewById(R.id.resultTextView);
    scanButton = (Button)findViewById(R.id.scanButton);

    resultTextView.setText("card.io library version: " + CardIOActivity.sdkVersion() + "\nBuilt: " + CardIOActivity.sdkBuildDate());
}

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

    if (CardIOActivity.canReadCardWithCamera(this)) {
        scanButton.setText("Scan a credit card with card.io");
    }
    else {
        scanButton.setText("Enter credit card information");
    }
}

public void onScanPress(View v) {
    // This method is set up as an onClick handler in the layout xml
    // e.g. android:onClick="onScanPress"

    Intent scanIntent = new Intent(this, CardIOActivity.class);

    // required for authentication with card.io
    scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN, MY_CARDIO_APP_TOKEN);

    // customize these values to suit your needs.
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: true
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_ZIP, false); // default: false

    // hides the manual entry button
    // if set, developers should provide their own manual entry mechanism in the app
    scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); // default: false

    // MY_SCAN_REQUEST_CODE is arbitrary and is only used within this activity.
    startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);

}

// 这里没有调用 OnActivityResult。

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

    String resultStr;
    if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
        CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);

        // Never log a raw card number. Avoid displaying it, but if necessary use getFormattedCardNumber()
        resultStr = "Card Number: " + scanResult.getRedactedCardNumber() + "\n";

        // Do something with the raw number, e.g.:
        // myService.setCardNumber( scanResult.cardNumber );

        if (scanResult.isExpiryValid()) {
            resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n"; 
        }

        if (scanResult.cvv != null) { 
            // Never log or display a CVV
            resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n";
        }

        if (scanResult.zip != null) {
            resultStr += "Zip: " + scanResult.zip + "\n";
        }
    }
    else {
        resultStr = "Scan was canceled.";
    }
    resultTextView.setText(resultStr);

}
}

请帮忙..

【问题讨论】:

    标签: android


    【解决方案1】:

    也许我错过了它,但我没有发现代码有任何问题。问题可能出在您的 XML 中,所以我想我会让您轻松一些。扫描完成后将用户发送到另一个活动。将此复制到适当的位置。创建一个新的 xml.file 并查看它是否有效。如果你有任何问题告诉我。这对我来说很好用。

    private Button scanButton;    
    
    }                   
    @Override
    protected void onResume() {
    super.onResume();
    
    
    if (CardIOActivity.canReadCardWithCamera(this)) {
    scanButton.setText("Charge");
    }
    else {
    scanButton.setText("Charge");
    }
    }
    final String TAG = getClass().getName();
    private int MY_SCAN_REQUEST_CODE = 100; // arbitrary int            
    
    
    public void onScanPress(View v) {
    // This method is set up as an onClick handler in the layout xml
    // e.g. android:onClick="onScanPress"
    
    Intent scanIntent = new Intent(this, CardIOActivity.class);                 
    
    // required for authentication with card.io
    scanIntent.putExtra(CardIOActivity.EXTRA_APP_TOKEN, MY_CARDIO_APP_TOKEN);
    //Talking points
    // customize these values to suit your needs.
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_EXPIRY, true); // default: true
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_CVV, false); // default: false
    scanIntent.putExtra(CardIOActivity.EXTRA_REQUIRE_ZIP, false); // default: false
    
    // hides the manual entry button
    // if set, developers should provide their own manual entry mechanism in the app
    scanIntent.putExtra(CardIOActivity.EXTRA_SUPPRESS_MANUAL_ENTRY, false); // default: false
    
    // MY_SCAN_REQUEST_CODE is arbitrary and is only used within this activity.
    startActivityForResult(scanIntent, MY_SCAN_REQUEST_CODE);
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    
    String resultStr;
    if (data != null && data.hasExtra(CardIOActivity.EXTRA_SCAN_RESULT)) {
    CreditCard scanResult = data.getParcelableExtra(CardIOActivity.EXTRA_SCAN_RESULT);
    
    // Never log a raw card number. Avoid displaying it, but if necessary use getFormattedCardNumber()   ,FYI-getRedactedCardNumber displays partial number.
    resultStr = "Card: " + scanResult.getRedactedCardNumber() + "\n";
    
    // Do something with the raw number, e.g.:
    // myService.setCardNumber( scanResult.cardNumber );
    
    if (scanResult.isExpiryValid()) {
    
    
    final TextView xx =(TextView)findViewById(R.id.storeview);
    String twox = xx.getText().toString();
    
    
    Intent intent= new Intent(MyScanActivity.this,WhateverNewActivityYouWant.class)
    //Adds the redacted card number
    .putExtra("Card Number",resultStr)
    startActivity(intent);
    finish();
    
    
    resultStr += "Expiration Date: " + scanResult.expiryMonth + "/" + scanResult.expiryYear + "\n"; 
    }
    if (scanResult.cvv != null) { 
    // Never log or display a CVV
    resultStr += "CVV has " + scanResult.cvv.length() + " digits.\n";
    }
    if (scanResult.zip != null) {
    resultStr += "Zip: " + scanResult.zip + "\n";
    }
    }
    else {
    resultStr = "Scan was canceled.";
    }
    resultTextView.setTag(resultStr);
    
    
    
    
        }}
    

    在你想要使用意图的 WhatNewActivityYouWant.class 中

    Intent iscool = getIntent();
        if (iscool.getCharSequenceExtra("Card Number") != null) {
        final TextView setmsg = (TextView)findViewById(R.id.resultTextView);
        setmsg.setText(iscool.getCharSequenceExtra("Card Number"));             
        }  
    

    whatevernewactivityyouwant.xml

    <TextView
        android:id="@+id/resultTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:textSize="16sp" />
    

    【讨论】:

    • 谢谢。我的代码对我有用。问题在于相机的质量和亮度。
    猜你喜欢
    • 2011-08-08
    • 2013-07-22
    • 2013-01-29
    • 2017-05-05
    • 2015-07-21
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-24
    相关资源
    最近更新 更多