android enum迭代没有开关

时间:2011-06-08 07:43:28

标签: android enums iteration

我有Enception编号和描述的枚举。我将异常号传递给MessageHandler。 然后我想处理它们并显示带有错误描述的用户消息。 在不使用开关构造的情况下,对结果进行迭代的最佳方法是什么?

我有几个解决方案,但我不确定哪个更适合Android。

谢谢。

2 个答案:

答案 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);
}
}