在Android编程中使用实用类

10

我对公用类有一点想法,但在使用时有些疑虑。

如果我在应用程序中使用公用类,那么在我的主 Activity 中使用该类时,我是否需要创建该类的对象,还是可以直接导入该类到主 Activity 中?

如果我的表述不够清晰,我很抱歉。

简而言之,我想要搞清楚的是,如何在我的主 Activity 中使用公用类?

谢谢, 大卫


另一个答案:https://dev59.com/BlHTa4cB1Zd3GeqPU9JR#4158902 - Ebrahim Byagowi
7个回答

14

这主要取决于你的实用工具类执行的操作。但是,大多数情况下,如果你创建一个实用工具类,你会希望创建静态方法并在不创建实例的情况下调用它们:

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

然后,在您的活动上:

MyUtilities.foo("baz");

当然,有些情况下你可能需要创建一个实用工具类的实例。例如,如果你已经创建了一个全局适配器,它将被所有的 ListViews 使用。


这是我使用的,对于大多数情况来说似乎是最简单的实现方式。 - Joshua Pinter
更好的方法是将类声明为 final 并添加一个 private 构造函数。 - jt-gilkeson
尽管将类设置为final并不推荐。但如果您想要扩展这个类呢? - karthik prasad

10

这很大程度上取决于您所指的实用程序类型。有以下几种:

1)实现静态方法的实用类。在这种情况下,您只需使用类名直接调用它们。

2)不是静态的实用类方法--需要创建并可能初始化该类的实例,然后使用该实例调用这些方法。

3)可以通过 Context 访问的实用程序类。然后,您可以调用 getApplicationContext() ,然后就可以get访问实用程序类。


3
  public final class Utils
  {
    private Utils() 
    {
    }

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

通常是一个只有静态方法的类(可能带有私有构造函数并标记为抽象/最终以防止实例化/子类化)。它的存在仅是为了使其他类更易于使用 - 例如,提供一堆静态方法来处理字符串值,执行String本身不支持的额外操作。
实用程序类通常不对您控制的类进行操作,否则您通常会将行为直接放在该类中。从OO角度来看,它们不是非常整洁,但仍然非常有用。
由Jon Skeet回答的答案

1
如果你的实用类中的方法是静态的,那么你可以从主活动中调用它们。例如:
int i = Utility.RandInt();

如果它们不是静态的,那么你必须创建一个对象:
Utility u = new Utility();
int i = u.randInt();

0
如果您的实用程序类是在应用程序中创建的,则可以通过首先在应用程序类中创建一个 getMethod,然后进行以下操作来引用它:
Application mc = (Application) context.getApplicationContext();

mc.getUtilityClass().SomeMethod()


-2

我不知道你的确切问题是什么。但这里有一段代码,我在我的活动中使用了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();

抱歉,这并没有回答问题。 - Hasan

-3

公共类 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;
}

}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接