2016-05-30 5 views
0

Original code is here NotificationUtils.javaКак я могу получить значение класса из другого класса

Я хочу, чтобы получить значение метода RoomID от activeroom.java. Я думаю, я могу использовать getClass(). getMethod(). ?
Таким образом, этот код в NotficationUtils.java и попытаться получить строковое значение метода «isRoomId» от ActivityRooms.java

public static boolean isAppIsInBackground(Context context,String chatRoomId) { 
      boolean isInBackground = true; 
      ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
      if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) { 
       List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
       for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
        if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { 
         for (String activeProcess : processInfo.pkgList) { 
          if (activeProcess.equals(context.getPackageName())) { 

рядом, если(), я определяю метод м и я хочу получить значение методы "isRoomId" от «активного класса.

       try { 
            Method m = activeProcess.getClass().getMethod("isRoomId",null); 

            if (chatRoomId.equals(m.toString())) 
            { 
             isInBackground = false; 

            } 
           } catch (NoSuchMethodException e) { 
            e.printStackTrace(); 
           } 

ActivityRoom.java попал isRoomId метод.

public static String chatRoomId; 
    chatRoomId = intent.getStringExtra("chat_room_id"); 

     public static String isRoomId() 
       { 

        return chatRoomId; 
       } 
+0

Просто создайте 'isRoomId()' static и вызовите 'ActivityRoom.isRoomId()' всякий раз, когда вам это нужно. – TychoTheTaco

+0

если я создаю isRoomId() как статический метод. я могу использовать так. Метод m = activeProcess.getClass(). getMethod ("isRoomId", null); –

+0

Да, вы можете использовать его именно так. Проверьте ответ redflar3 для получения более подробного объяснения. – TychoTheTaco

ответ

1

isRoomId() метод класс ActiveRoom не является статическим методом. Следовательно, вам нужно создать экземпляр класса, а затем вызвать метод этого объекта.

Если значение, возвращаемое isRoomId, не зависит от состояния объекта класса ActiveRoom, вы можете сделать это статическим методом, как показано ниже. После этого вы можете вызвать этот метод из вашего NotficationUtils.java

Метод

public static String isRoomId() 
{ 
    String chatRoomId="6";   
    return chatRoomId; 
} 

Invokation

ActiveRoom.isRoomId() 

Если логика, что вы собираетесь писать в isRoomId() это зависит от состояния объекта, то необходимо получить соответствующую ссылку на объект в вашем классе NotificationUtil и вызвать метод для этого объекта.

+0

если я создаю isRoomId() как статический метод. я могу использовать так. Метод m = activeProcess.getClass(). getMethod ("isRoomId", null); –

+0

вы можете просто использовать 'ActiveRoom.isRoomId()' –

+0

'getMethod()' является частью отражения api. если вы вообще должны его использовать, 'getMethod()' вернет объект типа 'Method'. Затем вам нужно 'invoke()' метод с требуемыми параметрами. ИМО, которая сложна для вашего случая использования. –