2012-09-12 4 views
1

여기에 아주 구체적인 문제가 있습니다. NFC 칩에 메시지를 보내도록 앱을 작성했지만 버튼을 누르면 계속 충돌합니다. Eclipse에서 사용하는 편집기는 오류나 경고를주지 않으므로 코드에 오류가 없습니다.맞춤형 NFC 앱이 계속 충돌합니다.

매우 이상한 점은 모든 코드가 들어있는 try/catch 블록에도 불구하고 작동이 중단된다는 것입니다.

응용 프로그램 태그 작가 (프로세스 com.harold.tag.writer)가 예기치 않게 중지했습니다 NFC가 잘 작동을 사용할 수 있지만, "쓰기"를 눌러 경우는 실행 및 검사 부분은 응용 프로그램 충돌을합니다.

너희들이 나를 도와 줄 수 있니?

다른 정보가 필요하면 문의하십시오.

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; 

수입품 분명히 응용 프로그램의 나머지와 함께 내보낼 수 없습니다 : 난 내 문제는이 라인에 달려 있음을 발견했다. 구아바 9가 내 빌드 경로에 포함되어 있지만 그 트릭을하지 않습니다 ... 내 응용 프로그램에서 Charsets 및 바이트 가져 오기를 어떻게 포함합니까 ???

EDIT : SOLVED !!

guavalib.jar 파일을 기본 android-sdk에서 프로젝트의 lib 폴더로 추가하는 것이 트릭입니다.

+0

로그캣 오류가 있습니까? – Neil

+0

외관상으로는 그렇습니다 ... 저는 방금 테스트 도구에 aLogCat을 설치했습니다. Guava에서 빌린 Charsets과 Bytes는 앱과 함께 내보내지지 않습니다 .- 다음 문제 : 어떻게해야합니까? ? –

+0

'libs' 폴더에이 항아리를 추가해보십시오. 아직 실행하지 않았다면 시도하십시오. – martijno

답변

0

guavalib.jar 파일을 기본 android-sdk에서 프로젝트의 lib 폴더에 추가하는 것이 트릭입니다.

관련 문제