Я пишу приложение на основе NFC, которое сканирует тег NFC с URL-адресом. После проверки тега приложение должно извлекать информацию из базы данных и отображать ее в ListView.Недопустимый символ в полезной нагрузке UDEF URI
Ошибка возникает при сканировании тега NFC.
Error in http connection java.lang.IllegalArgumentException: Illegal character in scheme at index 0: ??http://abc.com/~090123/get_items.php
LogCat показывает некоторые странные ??
символы перед http://
.
Я пишу URL-адрес в теге, используя следующий код:
private boolean writeTag(Tag tag) {
byte[] uriField = "http://abc.com/~090123/get_items.php".getBytes(Charset.forName("US-ASCII"));
byte[] payload = new byte[uriField.length + 1];
System.arraycopy(uriField, 0, payload, 1, uriField.length);
NdefRecord uriRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
NdefRecord.RTD_URI, new byte[0], payload);
NdefMessage message = new NdefMessage(new NdefRecord[] { uriRecord});
// ....
}
Я получаю умысел тега NFC, как это:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.content_display);
Intent intent = getIntent();
if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
NfcAdapter.EXTRA_NDEF_MESSAGES);
if(rawMsgs != null) {
NdefMessage msg = (NdefMessage) rawMsgs[0];
GetData getData = new GetData(this);
getData.execute(new String(msg.getRecords()[0].getPayload()));
}
}
}
И я извлечения информации из используя следующий код:
protected BufferedReader doInBackground(String... params) {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try {
HttpClient httpclient = new DefaultHttpClient();
for (int i = 0; i < params.length; i++)
{
HttpPost httppost = new HttpPost(params[i]);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
}
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
Log.e("Input Stream", "Input Stream:" + is);
BufferedReader myReader = new BufferedReader(new InputStreamReader(is));
return myReader;
}
У меня есть фильтр намерений для предыдущих записей NDEF, таких как t его:
<activity
android:name=".DisplayContentActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.nfc.action.NDEF_DISCOVERED" />
<data
android:host="abc.com"
android:pathPrefix="/~090123/get_items.php"
android:scheme="http" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
Любая помощь будет принята с благодарностью.
Привет, я попытался добавить код URI Identifier, как это: байт [] полезная нагрузка = новый байт [uriField. длина + 1]; полезная нагрузка [0] = 0x03; System.arraycopy (uriField, 0, полезная нагрузка, 1, uriField.длина); Я все еще получаю ту же ошибку. – Sujal
@Sujal Главное, чтобы байт кода идентификатора включался в полезную нагрузку при чтении. Я обновил ответ на примере. – Kapep
Спасибо большое! Это решило проблему. – Sujal