ここには非常に具体的な問題があります。メッセージを NFC チップに送信するアプリを作成しましたが、ボタンを押すとクラッシュし続けます。私が使用している Eclipse エディターは、エラーや警告を表示しないため、コードのエラーではありません。
私が非常に奇妙だと思うのは、すべてのコードを含むtry
/catch
ブロックにもかかわらずクラッシュすることです。起動して NFC が有効になっているかどうかを確認する部分は問題なく動作しますが、[書き込み] を押すとアプリがクラッシュします。
アプリケーション Tag Writer (プロセス com.harold.tag.writer) が予期せず停止しました。
ここで私を助けてもらえますか??
他の情報が必要な場合は、お問い合わせください。
package com.harold.tag.writer;
import java.util.Locale;
import android.app.Activity;
import android.content.Intent;
import android.nfc.NdefMessage;
import android.nfc.NdefRecord;
import android.nfc.NfcAdapter;
import android.nfc.Tag;
import android.nfc.tech.Ndef;
import android.nfc.tech.NdefFormatable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.common.base.Charsets;
import com.google.common.primitives.Bytes;
public class Main extends Activity implements OnClickListener {
EditText etUser;
Button bWrite;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initialise();
}
private void initialise(){
nfcsettings();
etUser = (EditText)findViewById(R.id.etTag);
bWrite = (Button)findViewById(R.id.bWrite);
bWrite.setOnClickListener(this);
}
public void onClick(View v) {
try
{
//initialize nfc part
nfcsettings();
Intent intent = this.getIntent();
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
writeTag(tag);
}
catch (Exception e){
Toast.makeText(getBaseContext(), "Button clicking", Toast.LENGTH_SHORT).show();
}
}
private void writeTag(Tag tag){
try
{
nfcsettings();
Locale locale = Locale.ROOT;
final byte[] langBytes = locale.getLanguage().getBytes(Charsets.US_ASCII);
final byte[] textBytes = etUser.toString().getBytes(Charsets.UTF_8);
final int utfBit = 0;
final char status = (char)(utfBit + langBytes.length);
final byte[] data = Bytes.concat(new byte[] {(byte) status}, langBytes, textBytes);
NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_TEXT, new byte[0], data);
NdefRecord[] records = {record};
NdefMessage message = new NdefMessage(records);
Ndef ndef = Ndef.get(tag);
if (ndef != null) {
ndef.connect();
ndef.writeNdefMessage(message);
} else {
NdefFormatable format = NdefFormatable.get(tag);
if (format != null) {
format.connect();
format.format(message);
}
}
}
catch (Exception e)
{
//Display toast when there is a write error
Toast.makeText(getBaseContext(), "Tag write unsuccessful.", Toast.LENGTH_SHORT).show();
}
}
private void nfcsettings(){
if(!NfcAdapter.getDefaultAdapter(this).isEnabled()){
Toast.makeText(getApplicationContext(), "Please activate NFC and press Back to return to the application!", Toast.LENGTH_LONG).show();
startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
}
}
編集:私の問題はこれらの行にあることがわかりました:
import com.google.common.base.Charsets;
import com.google.common.primitives.Bytes;
上記のインポートは、アプリの残りの部分と一緒にエクスポートされないようです。ビルド パスに Guava 9 が含まれていますが、それではうまくいきません。アプリに Charsets と Bytes のインポートを含めるにはどうすればよいですか?
編集:解決しました!!
結局のところ、guavalib.jar ファイルをデフォルトの android-sdk からプロジェクトのlib
フォルダーに追加するとうまくいきます。