Переменная из строки [duplicate]

Посмотрите на этот пример:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope,$http) {

    var getJoke = function(){
        return $http.get('http://api.icndb.com/jokes/random').then(function(res){
            return res.data.value;  
        });
    }

    getJoke().then(function(res) {
        console.log(res.joke);
    });
});

Как вы можете видеть, getJoke возвращает разрешенное обещание (оно разрешено при возврате res.data.value). Таким образом, вы ждете, пока запрос $ http.get не будет завершен, а затем выполнится console.log (res.joke) (как обычный асинхронный поток).

Это plnkr:

http://embed.plnkr.co/XlNR7HpCaIhJxskMJfSg/

137
задан Jonik 18 February 2014 в 19:09
поделиться

6 ответов

Это будет что-то вроде:

R.drawable.resourcename

Убедитесь, что вы не импортировали пространство имен Android.R, поскольку оно может запутать Eclipse (если это то, re использование).

Если это не работает, вы всегда можете использовать метод контекста getResources ...

Drawable resImg = this.context.getResources().getDrawable(R.drawable.resource);

Если this.context инициализируется как Activity, Service или любой другой подкласс Context.

Обновление:

Если это ваше имя, класс Resources (возвращенный getResources()) имеет getResourceName(int) метод и getResourceTypeName(int)?

Обновление 2:

Класс Resources имеет этот метод:

public int getIdentifier (String name, String defType, String defPackage) 

Который возвращает целое число имя указанного ресурса, тип & amp; пакет.

118
ответ дан Rabid 5 September 2018 в 09:44
поделиться
292
ответ дан Artyom 5 September 2018 в 09:44
поделиться

в дополнение к @lonkly solution

  1. см. отражения и доступность поля
  2. ненужные переменные

метод:

/**
 * lookup a resource id by field name in static R.class 
 * 
 * @author - ceph3us
 * @param variableName - name of drawable, e.g R.drawable.<b>image</b>
 * @param с            - class of resource, e.g R.drawable.class or R.raw.class
 * @return integer id of resource
 */
public static int getResId(String variableName, Class<?> с)
                     throws android.content.res.Resources.NotFoundException {
    try {
        // lookup field in class 
        java.lang.reflect.Field field = с.getField(variableName);
        // always set access when using reflections  
        // preventing IllegalAccessException   
        field.setAccessible(true);
        // we can use here also Field.get() and do a cast 
        // receiver reference is null as it's static field 
        return field.getInt(null);
    } catch (Exception e) {
        // rethrow as not found ex
        throw new Resources.NotFoundException(e.getMessage());
    }
}
0
ответ дан ceph3us 5 September 2018 в 09:44
поделиться

Я бы предложил вам использовать мой метод для получения идентификатора ресурса. Это намного эффективнее, чем метод getIdentidier (), который медленный.

Вот код:

/**
 * @author Lonkly
 * @param variableName - name of drawable, e.g R.drawable.<b>image</b>
 * @param с - class of resource, e.g R.drawable.class or R.raw.class
 * @return integer id of resource
 */
public static int getResId(String variableName, Class<?> с) {

    Field field = null;
    int resId = 0;
    try {
        field = с.getField(variableName);
        try {
            resId = field.getInt(null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resId;

}
11
ответ дан cricket_007 5 September 2018 в 09:44
поделиться
int resourceID = 
    this.getResources().getIdentifier("resource name", "resource type as mentioned in R.java",this.getPackageName());
22
ответ дан DaveShaw 5 September 2018 в 09:44
поделиться

Я нашел этот класс очень полезным для обработки ресурсами. Он имеет некоторые определенные методы для работы с размерами, цветами, рисунками и строками, такими как этот:

public static String getString(Context context, String stringId) {
    int sid = getStringId(context, stringId);
    if (sid > 0) {
        return context.getResources().getString(sid);
    } else {
        return "";
    }
}
0
ответ дан Diego Malone 5 September 2018 в 09:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: