마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 쓰레드 질문입니다.

0 추천

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에 넣어도 쓰레드가 안돌아가는데
 
이유를 모르겠습니다.
henker (150 포인트) 님이 2014년 3월 31일 질문

1개의 답변

+1 추천
break point 를 직접 잡아보세요

실제 동작 되는데 어디서 오류가 나는지 이벤트가 들어오는지 확인 하시려면 말이죠.

 

http://www.youtube.com/watch?v=JqHYbm9e05A
aucd29 (218,390 포인트) 님이 2014년 3월 31일 답변
답변 감사합니다.
AVD에서 NFC 기능을 실행하지 못해 확인을 못하겠습니다. ㅠ
...