2013-12-09 2 views
2

주 활동에서 화면의 변수 sbprint에 데이터가 저장된 것처럼 보일 수 있습니다. 가변적 인 sbprint는 블루투스 데이터를 버퍼링하는 백그라운드 활동에서 얻습니다. 데이터를 다른 클래스의 화면에 표시하려고합니다. 문제는 데이터가 항상 실시간 모드에서 내 블루투스 모듈의 스트림 때문에 직렬화를 사용할 수 없다는 것입니다. 나는 데이터에서 내 UI를 업데이트하는 핸들러를 사용 here백그라운드 프로세스에서 다른 활동으로 데이터를 전달하는 방법

에 따라 코드는 참고 버퍼 : 나는 핸들러 내부 공유 환경 (이 MainActivity.java 안에)

h = new Handler() { 
      public void handleMessage(android.os.Message msg) { 
       switch (msg.what) { 
       case RECIEVE_MESSAGE:             // if receive massage 
        byte[] readBuf = (byte[]) msg.obj; 
        String strIncom = new String(readBuf, 0, msg.arg1);     // create string from bytes array 
        sb.append(strIncom);            // append string 
        int endOfLineIndex = sb.indexOf("\r\n");       // determine the end-of-line 
        if (endOfLineIndex > 0) {           // if end-of-line, 
         String sbprint = sb.substring(0, endOfLineIndex);    // extract string 
         sb.delete(0, sb.length());          // and clear 
         txtArduino.setText("Data from Arduino: " + sbprint);   // update TextView 

         SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
         SharedPreferences.Editor editor = logPreferences.edit(); 
         String textLog = txtArduino.getText().toString(); 
         editor.putString("log", textLog); 
         editor.commit(); 

        } 
        //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); 
        break; 
       } 
      }; 
     }; 

가 H 핸들러는 메시지 개체를 얻을 수를 얻을 수 난 그냥 위와 같이 핸들러를 사용하여 다른 클래스에서 나의 새로운 화면에 변수 sbprint을 통과 할 방법이 명령에 블루투스 문서를 기반으로 ConnectedThread 클래스,

h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();  // Send to message queue Handler 

내 질문은,에서.

여기에 다른 데이터를 전달받은 데이터가 있습니다.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_datalog); 

     tvDatalog = (TextView) findViewById(R.id.tvDatalog); 

     SharedPreferences logPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     String text = logPreferences.getString("log", "null"); 
     tvDatalog.setText(text+"\r\n"); 
    } 

주를 제안 내가 공유 환경 설정에서 가져와 변수 버퍼의 데이터를 전달합니다 내 MainActivity에서 데이터를 가지고 있지만, 내 MainActivity가 다른 클래스에 화면 변경으로 정지 내부 작동 내 AsyncTask를 보인다. 백그라운드 활동을 두 클래스 모두에서 어떻게 작동시킬 수 있습니까? 내 화면을 다른 곳으로 바꿀 때마다 백그라운드 활동이 항상 작동한다는 것을 의미합니다.

+1

잘 모르겠지만 데이터를 공유 환경 설정에 저장하고 애플리케이션의 어느 위치에서든지 검색 할 수 있습니다. 직렬화를 사용하면 앱이 너무 느려지므로 사용하지 마십시오. – Hesam

+0

예, 알고 있습니다. 공유 환경 설정에 대한 권장 링크는 무엇입니까? –

+0

최고의 참고 자료는 Android 문서입니다. 다음 링크를 참조하십시오. http://developer.android.com/training/basics/data-storage/shared-preferences.html – Hesam

답변

1

제대로 이해하면 인터페이스를 사용하는 것이 좋습니다. Handler을 포함하는 Activity의 인터페이스를 정의 할 수 있습니다. 그런 다음 원하는 Class에 인터페이스를 구현할 수 있습니다.

+0

미안 해요, 그냥 인터페이스 일을 들었습니다. 의도와 같이 데이터를 전달하는 다른 방법입니까? 왜 나는 인터페이스를 사용하고 싶습니까?덕분에 –

+0

인터페이스의 용도 중 하나는이 경우 원하는 콜백 (즉, onClickListener()와 같은 리스너)을 만드는 것입니다. 자세한 설명은 링크를 참조하십시오. http://docs.oracle.com/javase/tutorial/java/concepts/interface.html – Emmanuel

관련 문제