태그에서 입력을 가져 와서 값을 특정 변수에 삽입하는 앱에서 계속 작업하고 있습니다. 그러나 미리 설정된 NFC 태그를 휴대 전화 가까이에두면 앱에서 태그의 정보를 얻을 수 있습니다. 대신 앱을 시작한 후 바로 충돌합니다.NFC 기능을 시작하면 내 앱이 계속 충돌합니다.
는`공용 클래스 NFCAdding는 활동을 확장 {
private static final String TAG = "MealPlan";
private EditText foodName, protValue, carbValue, fatValue, energyValue;
private Button addBreak, addLunch, addDinner;
NfcAdapter mNfcAdapter;
private boolean mResumed = false;
PendingIntent mNfcPendingIntent;
IntentFilter[] mNdefExchangeFilters;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.nfc_add);
foodName = (EditText)findViewById(R.id.nfc_food_name);
protValue = (EditText)findViewById(R.id.nfc_prot_value);
carbValue = (EditText)findViewById(R.id.nfc_carb_value);
fatValue = (EditText)findViewById(R.id.nfc_fat_value);
energyValue = (EditText)findViewById(R.id.nfc_energy_value);
addBreak = (Button)findViewById(R.id.nfc_add_breakfast);
addLunch = (Button)findViewById(R.id.nfc_add_lunch);
addDinner = (Button)findViewById(R.id.nfc_add_dinner);
mNfcPendingIntent = PendingIntent.getActivity(this, 0,
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
// Intent filters for reading a note from a tag or exchanging over p2p.
IntentFilter ndefDetected = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
try {
ndefDetected.addDataType("text/plain");
} catch (MalformedMimeTypeException e) { }
mNdefExchangeFilters = new IntentFilter[] { ndefDetected };
addBreak.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), AddItem.class);
startActivity(intent);
finish();
}
});
addLunch.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), LunchAdd.class);
startActivity(intent);
finish();
}
});
addDinner.setOnClickListener(new Button.OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent();
intent.setClass(getApplicationContext(), DinnerAdd.class);
startActivity(intent);
finish();
}
});
}
@Override
protected void onResume() {
super.onResume();
mResumed = true;
// Sticky notes received from Android
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
NdefMessage[] messages = getNdefMessages(getIntent());
byte[] payload = messages[0].getRecords()[0].getPayload();
setNoteBody(new String(payload));
setIntent(new Intent()); // Consume this intent.
}
enableNdefExchangeMode();
}
private void setNoteBody(String body) {
Editable text = foodName.getText();
text.clear();
text.append(body);
}
private void enableNdefExchangeMode() {
mNfcAdapter.enableForegroundDispatch(this, mNfcPendingIntent, mNdefExchangeFilters, null);
}
private void disableNdefExchangeMode() {
mNfcAdapter.disableForegroundDispatch(this);
}
NdefMessage[] getNdefMessages(Intent intent) {
// Parse the intent
NdefMessage[] msgs = null;
String action = intent.getAction();
if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
} else {
// Unknown tag type
byte[] empty = new byte[] {};
NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
NdefMessage msg = new NdefMessage(new NdefRecord[] {
record
});
msgs = new NdefMessage[] {
msg
};
}
} else {
Log.d(TAG, "Unknown intent.");
finish();
}
return msgs;
}
}는`당신의 로그 당 AS
logcat 로그를 공유하십시오 .. –
java.lang.RuntimeException : 활동을 시작할 수 없습니다. ComponentInfo {org.project.MealPlan/org.project.MealPlan .NFCAdding} : java.lang.ClassCastException : android.widget.TextView를 android.widget.EditText'에 캐스팅 할 수 없습니다. 죄송합니다. 저는 여기 새로 왔습니다 ... –
EditText 속성 중 하나가 레이아웃 xml의 TextView로 정의되어있는 것 같습니다. – rgrocha