Перечисление android, повторяющееся без выключателя - PullRequest
0 голосов
/ 08 июня 2011

У меня есть Enums с номером исключения и описанием.Я передаю номер исключения MessageHandler.И тогда я хочу обработать их и показать сообщение пользователя с описанием ошибки.Каков наилучший способ перебора результатов без использования конструкции переключателя?

У меня есть несколько решений, но я не уверен, что лучше для Android.

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 июля 2011

На самом деле существует довольно простой способ сделать это и сделать это так, чтобы это не зависело от конкретного enum. Я столкнулся с этой проблемой, когда хотел использовать enum s для заполнения различных частей пользовательского интерфейса.

Вот небольшой пример кода, чтобы показать вам, как я это сделал:

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();
}
}
0 голосов
/ 10 июня 2011
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);
}
}   
...