我有Enception编号和描述的枚举。我将异常号传递给MessageHandler。 然后我想处理它们并显示带有错误描述的用户消息。 在不使用开关构造的情况下,对结果进行迭代的最佳方法是什么?
我有几个解决方案,但我不确定哪个更适合Android。
谢谢。
答案 0 :(得分:1)
实际上有一种相当直接的方式,并且以不依赖于特定enum
的方式执行此操作。当想要使用enum
来填充UI的不同部分时,我遇到了这个问题。
以下是一些示例代码,向您展示我是如何做到的:
public int enumPosition(Enum<?> lookingFor, Enum<?>[] lookingIn)
{
for (int i = 0; i < lookingIn.length; i++)
{
if (lookingIn[i].getValue().equals(lookingFor.getValue()))
{
//Found Answer
}
}
}
当然,根据您的需要,有很好的方法可以设置enum
以便更好地访问和搜索,这就是我的意思:
public enum ExampleEnum
{
firstValue("#1", 1),
secondValue("#2", 2),
thirdValue("#3", 3);
private final String id;
private final int somethingUseful;
ExampleEnum(String id, int usefulValue)
{
this.id = id;
this.somethingUseful = usefulValue;
}
public String getValue() { return id; }
public int getSomethingUseful () { return somethingUseful; }
public static ExampleEnumfromString(String text)
{
if (text != null)
{
for (ExampleEnumt : ExampleEnum.values())
{
if (text.equalsIgnoreCase(t.id))
{
return t;
}
}
}
//Usually best to throw an exception here
return ExampleEnum.firstValue;
}
//Useful for passing to adapters
public static String[] getValues()
{
String[] vals = new String[ExampleEnum.values().length];
int i = 0;
for (ExampleEnumt : ExampleEnum.values())
{
vals[i] = t.getValue();
i++;
}
return vals;
}
@Override
public String toString()
{
return getValue();
}
}
答案 1 :(得分:0)
import java.util.HashMap;
import java.util.Map;
import android.content.Context;
import android.content.res.Resources;
import com.cyberneticscore.voliastatis.R;
public enum ExceptionEnums {
NO_ERROR(1),
CONNECTION_ERROR(2),
LOGIN_ERROR (3),
SSL_ERROR (4),
WRONG_DATE (5),
INTERRUPTED (6),
CLIENT_PROTOCOL_ERROR(7),
UNKNOWN_HOST_ERROR(8),
IO_ERROR (9),
XPATHER_ERROR(10);
private static final Map<Integer, String> map = new HashMap<Integer, String>();
private static Context context;
private static Resources reso;
public static void getContext(Context _context)
{
context =_context;
reso = context.getResources();
}
private int pos;
public static void putMapValues(){
//static{
map.put(NO_ERROR.getPos(), reso.getString(R.string.exceptions_no_error));
map.put(CONNECTION_ERROR.getPos(), reso.getString(R.string.exceptions_connection_error));
map.put(LOGIN_ERROR.getPos(), reso.getString(R.string.exceptions_login_error));
map.put(SSL_ERROR.getPos(), reso.getString(R.string.exceptions_ssl_error));
map.put(WRONG_DATE.getPos(), reso.getString(R.string.exceptions_wrong_date));
map.put(INTERRUPTED.getPos(), reso.getString(R.string.exceptions_interrupted));
map.put(CLIENT_PROTOCOL_ERROR.getPos(), reso.getString(R.string.exceptions_client_protocol_error));
map.put(UNKNOWN_HOST_ERROR.getPos(), reso.getString(R.string.exceptions_unknown_host_error));
map.put(IO_ERROR.getPos(), reso.getString(R.string.exceptions_io_error));
map.put(XPATHER_ERROR.getPos(), reso.getString(R.string.exceptions_xpather_error));
}
ExceptionEnums(int pos){
this.pos = pos;
}
public int getPos(){
return pos;
}
public static String getErrorDescription(int position_number){
return map.get(position_number);
}
}