写给MifareUltralight时有例外

时间:2015-12-08 06:45:16

标签: java android nullpointerexception nfc mifare

尝试在Android上编写MifareUltralight NFC标签时出现异常。 logcat中显示的错误是:

java.lang.NullPointerException: Attempt to invoke virtual method 'void    android.view.View.setVisibility(int)' on a null object reference at   
    .MainActivity.getTagInfo(MainActivity.java:124) 
    com.mynfctest.MainActivity.resolveIntent(MainActivity.java:106)
    com.mynfctest.MainActivity.onNewIntent(MainActivity.java:98) 

如何解决此错误?

写方法:

public static boolean writeOnMifareUltralight(Context _context, Tag tag, String pageData, int i) {
    MifareUltralight mifare = null;

    int size=pageData.length();
    try {
        mifare = MifareUltralight.get(tag);
        mifare.connect();
        mifare.writePage(i, pageData.getBytes(Charset.forName("US-ASCII")));
    } catch (Exception ex) {
        ex.printStackTrace();
        Log.d("skm", ex.getMessage());
        // return false;
    } finally {
        try {
            mifare.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    return true;
}

从我的活动调用的写方法:

switch (mifareUlTag.getType()) {
    case MifareUltralight.TYPE_ULTRALIGHT:
        boolean result=NFCHammer.writeOnMifareUltralight(this,tag,tvName.getText().toString(),4);

        if(result){
            findViewById(R.id.incProgressBar).setVisibility(View.GONE);
            Intent Callintent = new Intent(this, HomeActivity.class);
            Callintent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
            startActivity(Callintent);
            finish();
            overridePendingTransition(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
        }
        else{
            findViewById(R.id.incProgressBar).setVisibility(View.GONE);
            CommonTask.createToast("Tap The card again!!!", this, Color.RED);
        }
        break;
}

1 个答案:

答案 0 :(得分:0)

正如异常所解释的那样,您在setVisibility对象引用上调用方法null

  

java.lang.NullPointerException:尝试在空对象引用上调用虚方法'... setVisibility(int)'

换句话说,在代码的某处,你有这样的:

object.setVisibility(...);

就像变量objectnull一样,并没有引用真实对象。

异常的堆栈跟踪进一步告诉您,在MainActivity.java文件的第124行发生了异常,更具体地说,在名为getTagInfo的方法中发生了异常:

  

at .MainActivity.getTagInfo(MainActivity.java:124)

由于您没有透露足够的代码来验证问题是否来自您发布的那些代码段,我们只能推测问题来自将视图R.id.incProgressBar的可见性设置为{的两行。 {1}}:

GONE

如果是这种情况,则findViewById(R.id.incProgressBar).setVisibility(View.GONE); 返回findViewById(R.id.incProgressBar),表示在活动的当前视图层次结构中未找到视图null