public class NfcActivity extends Activity {
private Thread t;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
array_id=new ArrayList<String>();
mNote = (TextView) findViewById(R.id.note2);
check=(TextView)findViewById(R.id.check);
}
@Override
protected void onResume() {
super.onResume();
if (NfcAdapter.ACTION_NDEF_DISCOVERED.contentEquals(getIntent().getAction())) {
NdefMessage[] messages = getNdefMessages(getIntent());
byte[] payload = messages[0].getRecords()[0].getPayload();
setNoteBody(new String(payload));
setIntent(new Intent());
}
}
protected void onNewIntent(Intent intent)
{
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction()))
{
NdefMessage[] msgs = getNdefMessages(intent);
setNoteBody(new String(msgs[0].getRecords()[0].getPayload()));
}
}
private NdefMessage[] getNdefMessages(Intent intent) {
NdefMessage[] msgs = null;
String action = intent.getAction();
if (NfcAdapter.ACTION_TECH_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 {
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, "알려지지 않은 인텐트.");
finish();
}
return msgs;
}
private void setNoteBody(String string) {
// mNote.setText(string);
num = string;
TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myNumber = mTelephonyMgr.getLine1Number();
mNote.setText(num + "/" + myNumber);
t = new Thread (new Runnable() {
@Override
public void run() {
try{
String ret=""; //xml에서 받아온 TEXT를 임시로 받는 변수
String rss = SERVER_ADDRESS + "/xmlTest/"; //서버의 rss 파일이 있는 위치 (xml파일)
String tagname=""; //xml의 태그네밈을 위한 변수
XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //xmlPullparser를 위한 준비과정.
factory.setNamespaceAware(true); //xml의 네임페이스 허용
XmlPullParser xpp = factory.newPullParser();
URL url = new URL(SERVER_ADDRESS+"/xmlTest/insert2.php?"+"num="+URLEncoder.encode(num,"UTF-8"));
url.openStream();
URL server = new URL(rss + "insert.xml"); //php문이 실행이 되면 mysql과 연동되어 그 결과를 xml파일로 생성하는데 그 생성된 파일이 insert.xml 파일
InputStream is = server.openStream(); //xml파일연결
xpp.setInput(is, "UTF-8"); //엔코딩 방식 설정
int eventType = xpp.getEventType(); //이벤트 타입 얻어오기 예르들어 <start> 인지 </start> 인지 구분하기 위한.
while(eventType != XmlPullParser.END_DOCUMENT) { // xml이 끝날때까지 계속 돌린다.
if(eventType == XmlPullParser.START_TAG) {
tagname=xpp.getName(); //태그를 받아온다.
}
else if(eventType==XmlPullParser.TEXT){
if(tagname.equals("num")){
ret=xpp.getText(); //id 태그에 해당되는 TEXT를 임시로 저장
}
}else if(eventType==XmlPullParser.END_TAG){
//태그가 닫히는 부분에서 임시 저장된 TEXT를 Array에 저장한다.
tagname=xpp.getName();
if(tagname.equals("num")){
array_id.add(ret);
}
}
eventType = xpp.next();
}
//check.setText(array_id.get(0).toString());
}// try문 끝
catch(Exception e){
e.getMessage();
} //catch문 끝
xmlHandler.sendEmptyMessage(0);
} });
t.start();
}
Handler xmlHandler=new Handler(){
public void handleMessage(Message msg){
if(msg.what==0){
for(int i=0; i<array_id.size();i++){
if(array_id.get(i).toString()==num){
check.setText("login success");
break; //로그인이 성공하면 탈출
}
else {
check.setText("No User");
}
}
array_id.clear(); //저장된 id를 모두다 지워야 한다.
}
}
};
}
onResume에 넣어도 쓰레드가 안돌아가는데
이유를 모르겠습니다.