Использование служебных классов в программировании Android - PullRequest
8 голосов
/ 14 октября 2010

У меня есть небольшое представление о Классах утилит с небольшим сомнением по требованию.

Если я использую класс Utility в своем Приложении, чем использовать этот класс в моей основной Деятельности, нужно ли мне создавать объектиз этого класса, или я могу напрямую импортировать этот класс в моей основной деятельности?

Извините, если я не имею ясного смысла.

В двух словах, все, что я хочу прояснить, это то, что в основном, как я могу использовать служебный класс в моей основной деятельности?

Спасибо, Дэвид

Ответы [ 7 ]

12 голосов
/ 14 октября 2010

Это в основном зависит от того, что делает ваш служебный класс.Но в большинстве случаев, если вы создаете класс Utility, вы захотите создать статические методы и вызывать их, не создавая экземпляр:

class MyUtilities{
    public static String foo(String bar){
        return bar.toUppercase;
    }
}

Затем в своей деятельности:

MyUtilities.foo("baz");

Конечно, есть случаи, когда вы захотите создать экземпляр класса Utility.Например, если вы создали глобальный адаптер, который будет использоваться всеми вашими ListViews.

9 голосов
/ 14 октября 2010

Это сильно зависит от того, какую утилиту вы имеете в виду.Существуют

1) служебные классы, которые реализуют статические методы.В этом случае вы просто вызываете их напрямую, используя имя класса

2) методы служебных классов, которые не являются статичными - требуется создание и, возможно, инициализация экземпляра этого класса.Затем экземпляр используется для вызова этих методов.

3) служебные классы, к которым можно получить доступ через Context.затем вы можете вызвать getApplicationContext () и затем вы можете get получить доступ к служебным классам

2 голосов
/ 23 июля 2015
  public final class Utils
  {
    private Utils() 
    {
    }

    public static void makeToast(Context context, String text){
        Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
    }
 }

Обычно это класс, имеющий только static methods (возможно, с закрытым конструктором и помеченный abstract/final для предотвращения instantiation/subclassing).. Он существует только для упрощения использования других классов - например, предоставляя кучуstatic methods для работы со значениями String, выполняя дополнительные действия, которые сама String не поддерживает.

Классы утилит обычно не operate on classes контролируют, иначе вы 'Я обычно ставлю behaviour directly в этом class. Они не terribly neat in OO terms,, но все же могут быть очень полезны.

как , на которые ответил Джон Скит

1 голос
/ 14 октября 2010

Если методы в вашем классе утилит статичны, вы можете вызывать их из своей основной деятельности.Например:

int i = Utility.RandInt();

Если они не статичны, вам нужно создать объект:

Utility u = new Utility();
int i = u.randInt();
0 голосов
/ 23 сентября 2016

открытый класс Utils {

public static boolean isNetworkAvailable(Context context) {
    ConnectivityManager connectivityManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager
            .getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

public static void unlockScreenOrientation(Activity activity) {
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

public static void lockScreenOrientation(Activity activity) {
    int currentOrientation = activity.getResources().getConfiguration().orientation;
    if (currentOrientation == Configuration.ORIENTATION_PORTRAIT)
    {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
    else
    {
        activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
}
// Get Http Post response
@Nullable
public static String getHttpResponse(String url, List<NameValuePair> nameValuePairs) {
    HttpClient httpClient = new DefaultHttpClient();

    HttpPost httpPost = new HttpPost(url);
    UrlEncodedFormEntity entity;
    try {
        entity = new UrlEncodedFormEntity(nameValuePairs);
        httpPost.setEntity(entity);
        HttpResponse response = httpClient.execute(httpPost);

        HttpEntity resEntity = response.getEntity();
        String res =  EntityUtils.toString(resEntity);
        return res;
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return null;
}

public static void CopyStream(InputStream is, OutputStream os) {
    final int buffer_size=1024;
    try
    {
        byte[] bytes=new byte[buffer_size];
        for(;;)
        {
            int count=is.read(bytes, 0, buffer_size);
            if(count==-1)
                break;
            os.write(bytes, 0, count);
        }
    }
    catch(Exception ex){}
}

public static JSONObject getJsonObjectFromXmlResponse(String xmlString) {
    JSONObject objectJson = new JSONObject();
    //JSONArray arrayJson = new JSONArray();

    XmlPullParser parser = Xml.newPullParser();
    try {
        parser.setInput(new StringReader(xmlString));
        int eventType = parser.getEventType();

        while (eventType != XmlPullParser.END_DOCUMENT) {
            String name;
            switch (eventType) {
                case XmlPullParser.START_TAG:
                    name = parser.getName();
                    if (name.equalsIgnoreCase("string")) {
                        String yourValue = parser.nextText();
                        //arrayJson = new JSONArray(yourValue);
                        objectJson = new JSONObject(yourValue);
                    }
                    break;
            }
            eventType = parser.next();
        }
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return objectJson;
}

}

0 голосов
/ 14 октября 2010

Я не знаю, каков ваш точный вопрос.Но вот код, в котором я использовал класс Utility в своей деятельности.AnimationUtil используется для загрузки анимации в ImageView.

    ImageView waitImg   = (ImageView) findViewById(R.id.ImageView02);

    Animation waitAnim  = AnimationUtils.loadAnimation(this, R.anim.wait_rotate);

    waitImg.startAnimation(waitAnim); 
    waitAnim.cancel();
    waitAnim.reset();
0 голосов
/ 14 октября 2010

Если ваш класс утилит создан в вашем приложении, то вы можете обратиться к нему, сначала создав getMethod в классе приложения, а затем набрав

Приложение mc = (Приложение) context.getApplicationContext ();

mc.getUtilityClass (). SomeMethod ()

...