2015-12-28 4 views
1

Так что я новичок в java и использую чей-то открытый исходный код для разработки Android. Я хочу использовать переменный цвет в этой программе в другом действии. Я попытался изменить void на int и затем вернуть цвет в конце кода, но это не имеет значения, и код не работает. Я смущен, потому что void не возвращает ничего, но int возвращает целое число. Мой вопрос в том, как я могу получить значение цвета переменной из этого кода и либо сохранить его в другой переменной, либо сделать сам цвет переменной, чтобы я мог использовать ее в других действиях моего приложения для Android. Вот мой код:Как изменить метод void для возврата значения в Java

public void onPreviewFrame(byte[] data, Camera camera) { 

     try { 
      Camera.Size previewSize = camera.getParameters().getPreviewSize(); 
      int height = previewSize.height; 
      int width = previewSize.width; 

      ColorModelConverter converter = new ColorModelConverter(height, width); 
      int[] pixels = converter.convert(data, this.colorFormat); 

      int color = pickColor(pixels, height, width); 
      updateColorData(color); 

      Log.i("FRAME PREVIEW", "Color updated"); 
     } catch (RuntimeException oops) { 
      // Do nothing, exception is thrown because onPreviewFrame is called after camera is released 
      Log.i("FRAME PREVIEW", "RuntimeException thrown into onPreviewFrame"); 
     } 
    } 

Также здесь ссылка GitHub для всего проекта, если это делает разницу: https://github.com/adlebzelaznog/colometer

+1

При смене 'void' в' int', затем добавьте оператор 'return' также в методе, который возвращает значение. – YoungHobbit

+0

'onPreviewFrame' - это обратный вызов от' android.hardware.Camera.PreviewCallback'. Не знаете, как вам удалось изменить 'void' на' int', и ваш код все еще работает – Jay

ответ

0

Измените метод возвращения типа в int, так что подпись читает public int onPreviewFrame(byte[] data, Camera camera).

Затем, в конце вашего блока try, после Log.i("FRAME PREVIEW", "Color updated");, напишите return color;.

Наконец, в конце всего метода напишите return -1;, чтобы представить ошибку.

3

Я предполагаю, что проблема заключается в том, что onPreviewFrame является унаследованным методом, который вызывается системой/каркасом, а не вами (при условии, что он упоминается здесь: http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html).

В этом случае я бы сохранил подпись так же, а затем сохранил значение, например. общие предпочтения, чтобы вы могли получить доступ к значению цвета в других частях приложения (http://developer.android.com/reference/android/content/SharedPreferences.html).

Ваш код будет выглядеть примерно так:

public void onPreviewFrame(byte[] data, Camera camera) { 

     try { 
      Camera.Size previewSize = camera.getParameters().getPreviewSize(); 
      int height = previewSize.height; 
      int width = previewSize.width; 

      ColorModelConverter converter = new ColorModelConverter(height, width); 
      int[] pixels = converter.convert(data, this.colorFormat); 

      int color = pickColor(pixels, height, width); 
      updateColorData(color); 

      storeColorInSharedPreferences(color); //save variable here 

      Log.i("FRAME PREVIEW", "Color updated"); 
     } catch (RuntimeException oops) { 
      // Do nothing, exception is thrown because onPreviewFrame is called after camera is released 
      Log.i("FRAME PREVIEW", "RuntimeException thrown into onPreviewFrame"); 
     } 
    } 

public void storeColorInSharedPreferences(int color) 
{ 
    //Logic to store color in Shared Preferences 
    //Something like this: (not tested!) 
    SharedPreferences shared = getSharedPreferences("com.myapp.sharedpreferences", MODE_PRIVATE); 
    SharedPreferences.Editor editor = shared.edit(); 
    editor.putInt("PREVIEW_KEY", color); 
    editor.commit(); 
} 

Тогда в другой деятельности, вы можете получить значение, как это:

SharedPreferences shared = getSharedPreferences("com.myapp.sharedpreferences", MODE_PRIVATE); 
int color = (shared.getInt("PREVIEW_KEY", 0)); 

Пример взят из: Get Android shared preferences value in activity/normal class

+0

Что вы подразумеваете под логикой для хранения цвета? –

+0

Я добавил пример кода - см. Более подробное объяснение того, как получить значение там, где оно вам нужно в вашем приложении: http://stackoverflow.com/questions/2614719/how-do-i-get-the- sharedpreferences-from-a-preferenceactivity-in-android – Dyrborg

+0

@NikhilGopal - этот ответ помог вам? – Dyrborg

Смежные вопросы