для имени изображения, как I_A_Mok сказал, что я взял только:
- android_security
- penetration_testing
- red_team
- lf
- the_art_of_exploitation
- web_application_hacker
- lbh
- bhp
Итак, у меня было два решения:
Метод с Context: [117 ]
public static Integer[] getIds(Context context, String[] str) {
Integer[] bookID = new Integer[str.length];
for (int i = 0; i < str.length; i++) {
bookID[i] = context.getResources().getIdentifier(str[i], "drawable", context.getPackageName());
}
return bookID;
}
Или без контекста (этот подход быстрее, чем первый Получение ресурсов в Android ):
public static Integer[] getIds(String[] str) {
Integer[] bookID = new Integer[str.length];
try {
for (int i = 0; i < str.length; i++) {
Class res = R.drawable.class;
Field field = res.getField(str[i]);
int drawableId = field.getInt(null);
bookID[i] = drawableId;
}
} catch (Exception e) {
Log.e("MyTag", "Failure to get drawable id.", e);
e.printStackTrace();
}
return bookID;
}
и вот полный код
[113 ]
}
Спасибо.
Прежде всего , вы используете оператор ==
для сравнения двух указателей на объекты (типа NSString *
). Таким образом, возвращается истина, когда указатели одинаковы, а не когда строки имеют одинаковое содержимое. Если вы хотите сравнить, являются ли две строки одинаковыми, вы должны использовать isEqualToString:
или isEqual:
( isEqual:
является более общим, поскольку он работает для всех типов объектов).
Во-вторых, сравните:
возвращает 0
( NSOrderSame
), если они одинаковы, и 1
( NSOrderedDescending
), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).
isEqualToString:
или isEqual:
( isEqual:
является более общим, поскольку он работает для всех типов объектов).
Во-вторых, сравните:
возвращает 0
( NSOrderSame
), если они одинаковы, и 1
( NSOrderedDescending
), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).
isEqualToString:
или isEqual:
( isEqual:
является более общим, поскольку он работает для всех типов объектов).
Во-вторых, сравните:
возвращает 0
( NSOrderSame
), если они одинаковы, и 1
( NSOrderedDescending
), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).
isEqual:
( isEqual:
является более общим, поскольку он работает для всех типов объектов).
Во-вторых, compare:
возвращает ] 0
( NSOrderSame
), когда они одинаковы, и 1
( NSOrderedDescending
), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).
isEqual:
( isEqual:
является более общим, поскольку он работает для всех типов объектов).
Во-вторых, compare:
возвращает ] 0
( NSOrderSame
), когда они одинаковы, и 1
( NSOrderedDescending
), когда первое больше второго. Фактически, он возвращает 1 только , когда они разные (в частности, когда первое больше второго).
При сравнении двух идентичных строк compare
вернет NSOrderedSame
, что равно 0. Он также может вернуть NSOrderedAscending
, -1 , и NSOrderedDescending
, 1.
Вы можете предпочесть использовать isEqualToString
, который возвращает YES или NO.
Оператор == при применении к объектам проверяет, равны ли указатели.
Вы должны использовать метод -compare
или один из его спутников - compare: options:
- compare: options: range:
или -compare: options: range: locale:
, которые возвращают NSComparisonResult
( NSOrderAscending
, NSOrderSame
, NSOrderDescending
)
Если вам просто нужно сравнение на равенство, вы можете использовать -StringE232To ], который возвращает значение
BOOL
.
if ([returnedString isEqualToString:@"thisString"])
NSLog(@"Equal");
else
NSLog(@"Not Equal");