0

这是一个关于 Eclipse SDK 在为 Android 应用程序编写一些 JAVA 代码时使用的语法的问题。

我是一名嵌入式微控制器工程师,主要习惯于使用 Assembler(很久以前)和 C 进行编程。我是 C++ 和 JAVA 的新手,为了帮助我编写代码,我一直在使用 developer.android 的组合.com 获取背景信息,stackoverflow.com 获取真实世界示例,并发现它们非常有用。

所以,我编写代码来做我想做的事情没有问题,因为我一直都在这样做,但我发现很难理解编写 Android 应用程序所使用的语法。

例如,要访问 GPS,我的代码行之一是这样读取的:

LocationManager locationManager = (LocationManager)
this.getSystemService(Context.LOCATION_SERVICE);

但可以缩短为:

LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);

我更喜欢第二个版本,但为什么有些例子写得像第一个例子?两者似乎都工作正常。我见过其他使用“类”看起来更加复杂的示例。

其次,这不是做一件非常简单的事情的复杂方法吗:

Toast.makeText(getBaseContext(),"Hello World",Toast.LENGTH_SHORT).show();

为什么不:

Toast("Hello world");

现在我写代码的时间是过去的四倍。

4

4 回答 4

0

欢迎来到 Android 和 Java 编程的世界。由于您来自汇编语言背景,我的建议是:习惯更多的打字。:)

关于第一个代码片段:首先,this.调用的限定符getSystemService()是多余的;你可以放弃它。LOCATION_SERVICE其次,您可以通过静态导入名称来消除限定符。将类似这样的内容添加到编译单元的导入中:

import static android.content.Context.LOCATION_SERVICE;

或者,如果您不介意命名空间污染:

import static android.content.Context.*;

关于第二个片段:出于架构原因,Toast最终需要将弹出窗口与某些应用程序上下文相关联。工厂方法的第一个参数makeToast是使这成为可能的原因。(顺便说一句,您只需要getContext(),而不是getBaseContext()。您还可以将上下文存储在字段中。)至于第三个参数 - 可以makeText说,可以提供具有默认显示时间的工厂方法版本,但是Android 没有提供这一点,所以你也被第三个参数困住了。您可以再次通过静态导入来避免限定符LENGTH_SHORT. 最后,工厂方法只返回一个Toast对象。您现在还不需show()要这样做;它可能会被隐藏起来并在未来展示。分开创建是很好的设计Toast对象从把它放在屏幕上的动作。

于 2012-07-18T17:27:12.933 回答
0
  1. this这是一种随处可见的初学者 OOP 风格。它在您的第二个示例中暗示,第二个示例是更常见的样式。

  2. 现在,这与一些工程有关。是的,您的第二个简短示例可能已经实现(除了这Toast是一个类,而不是一个函数,但类似的事情会起作用),但它会排除您可能想做的许多重要事情。AToast可能不是一个轻量级的对象;你可能想要缓存它。这就是为什么你首先得到一个实例,makeText然后才调用show它。该Toast实例还将具有您需要控制的完整生命周期,但无法通过您的简单示例来控制。该实例可能会进行进一步的配置等。简而言之,这是有原因的,这在Hello, world代码中并不明显。

于 2012-07-18T17:03:16.903 回答
0

我会尽量以最简单的方式和尽我所能来解释这些事情。

1 、 “ .this”指的是Java中的当前对象。" .this" 专门指向当前对象访问它自己的该类的实例变量成员。

2.使用“this”只是更具体。

3.现在在Toast的情况下,它需要“ context”参数指向它将显示Toast的Activity。(即在哪个Activity上)

4.如果您不在 Anonymous 类中,则可以使用“this”,或者如果您在 Anonymous 类中,则使用“ Your_Activity_Name.this”代替上下文。

5. getBaseContext, getApplicationContext都喜欢全局访问Application的各个部分。

6.我总是喜欢Your_Activity_Name.this在上下文中的地方。上下文表示将在其上显示 Toast 的 Activity。是的,活动中没有 Toast(String s)方法。

于 2012-07-18T17:40:58.117 回答
0

演员表后的换行符只是为了防止台词过长。

对此:

Toast.makeText(getBaseContext(),"Hello World",Toast.LENGTH_SHORT).show();

...就像你说的那样写它很简单,除了不做同样的事情。基本上,那条线是

  1. 寻找最外层放置图形的地方
  2. 设置要显示的文本,并设置一些格式或类似的
  3. 然后展示它。

你想把它们分开,因为你并不总是写到最外面的世界,你可能想,例如,制作几个不同的文本块,show90或者hide()以后再做。(例如,考虑一条错误消息和一条成功消息。您喜欢构建它们一次,然后显示/隐藏您不需要的那些。)

现在,如果您可以定义您想要的上下文并且永远不想弄乱可见性,那么您可以创建一个功能来做到这一点。

于 2012-07-18T16:54:53.910 回答