2017-02-13 5 views
1

내 프로젝트의 사용자 Firebase 데이터베이스. 그것으로 나는 다음과 같은 방법으로 DB frmo 데이터를 읽어,이 방법은 내가 IntentService에서 호출 할서비스 및 인터페이스

public void getSoftwareRecords() { 
     final List<Software> softwareList = new ArrayList<>(); 
     databaseReference = firebaseDatabase.getReference("software"); 
     getSoftwareRecordsListener = new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 
       for (DataSnapshot snapshot : dataSnapshot.getChildren()) { 
        softwareList.add(snapshot.getValue(Software.class)); 
       } 
       Log.d(TAG, "Software from server count: " + softwareList.size()); 
       onSoftwareTransactionListener.onSuccessSyncListOfSoftware(softwareList); 
      } 

      @Override 
      public void onCancelled(DatabaseError databaseError) { 
       Log.e(TAG, "Cant read software list from database: " + databaseError.getDetails()); 
       // TODO describe error #102 for documentation 
       onSoftwareTransactionListener.onFailureSyncListOfSoftware("Ohh."); 
      } 
     }; 
     databaseReference.addValueEventListener(getSoftwareRecordsListener); 

후. u 알림에 따라 반환 값 = void가 없습니다. 그래서, 질문은 어떻게 사용자 서비스와 인터페이스를 함께 할 수 있습니까?

서비스 (내가 그것을 사용하고 싶었로) :

public class ReadSoftwareListService extends IntentService implements Database.OnSoftwareTransactionListener { 
    private static final String TAG = ReadSoftwareListService.class.getSimpleName(); 
    public static final String ACTION = "..."; 
    public static final String RESULT_CODE = "RESULT_CODE"; 
    public static final String RESULT_VALUE = "RESULT_VALUE"; 

    private Intent in; 

    public ReadSoftwareListService() { 
     super("ReadSoftwareListService"); 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 
     in = new Intent(ACTION); 
     Log.d(TAG, "ReadSoftwareListService:: onHandleIntent"); 
     Database database = new Database(com.google.firebase.database.FirebaseDatabase.getInstance()); 
     database.getSoftwareRecords(); // <- this is a method from code above. 

    } 

    @Override 
    public void onSuccessSyncListOfSoftware(List<Software> softwareList) { 
     Log.d(TAG, "ReadSoftwareListService:: onSuccessSyncListOfSoftware"); 
     Bundle bundle = new Bundle(); 
     bundle.putInt(RESULT_CODE, Activity.RESULT_OK); 
     in.putExtras(bundle); 
     // bundle.putSerializable(RESULT_VALUE, softwareList); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(in); 
    } 

    @Override 
    public void onFailureSyncListOfSoftware(String message) { 
     Log.d(TAG, "ReadSoftwareListService:: onFailureSyncListOfSoftware"); 
     Bundle bundle = new Bundle(); 
     bundle.putInt(RESULT_CODE, Activity.RESULT_CANCELED); 
     bundle.putString(RESULT_VALUE, message); 
     in.putExtras(bundle); 
     LocalBroadcastManager.getInstance(this).sendBroadcast(in); 
    } 

그리고 리시버 : 당신이 정말로 여기 IntentService를 사용하고자하는 경우

public final BroadcastReceiver softwareListReceiver = new BroadcastReceiver() { 

     @Override 
     public void onReceive(Context context, Intent intent) { 
      Log.d(TAG, "softwareListReceiver:: onReceive"); 
      Bundle bundle = intent.getExtras(); 
      int resultCode = bundle.getInt(RESULT_CODE); 
      if (resultCode == Activity.RESULT_OK) { 
       Log.d(TAG, "RESULT CODE == OK"); 

//    softwareListAdapter.updateData(bundle.getParcelableArrayList(RESULT_VALUE)); 
      } else { 
       Log.d(TAG, "RESULT CODE == CANCEL: " + bundle.getString(RESULT_VALUE)); 
      } 
     } 
    }; 

답변

0

, 당신이 콜백으로 ResultReceiver를 추가 갈 수 있습니다. 예 : -

Intent intentService = new Intent(context, YourIntentService.class); 
intentService.putExtra(StockService.REQUEST_RECEIVER_EXTRA, new ResultReceiver(null) { 
    @Override 
    protected void onReceiveResult(int resultCode, Bundle resultData) { 
     if (resultCode == StockService.RESULT_ID_QUOTE) { 
      ... 
     } 
    } 
}); 
startService(intentService); 

은 또는 당신 인터페이스 매개 변수의 하나로서를 전달하여 사용자 정의 AsyncTask를를 사용할 수 있습니다.

희망이 도움이됩니다.

참고 : 마음에 드시면 투표하십시오.