Java Android:定义日志名时引用字符串资源
在我的Android应用程序中,我想在多个文件中使用单个变量作为日志名。目前,我在每个文件中分别指定它,例如Java Android:定义日志名时引用字符串资源,java,android,Java,Android,在我的Android应用程序中,我想在多个文件中使用单个变量作为日志名。目前,我在每个文件中分别指定它,例如 public final String LOG_NAME = "LogName"; Log.d(LOG_NAME, "Logged output); 我试过这个: public final String LOG_NAME = (String) getText(R.string.app_name_nospaces); 虽然这在我的大多数文件中都有效,但Eclipse抱怨其中一个文件:
public final String LOG_NAME = "LogName";
Log.d(LOG_NAME, "Logged output);
我试过这个:
public final String LOG_NAME = (String) getText(R.string.app_name_nospaces);
虽然这在我的大多数文件中都有效,但Eclipse抱怨其中一个文件:
方法getText(int)未定义
对于DatabaseManager类型
我已经确定我正在该文件中导入android.content.Context。如果我告诉它在哪里可以找到getText:
该行有多个标记-无法对非静态方法getText(int)进行静态引用 从类型上下文
-类型DatabaseManager的方法getText(int)未定义
我肯定我犯了一个非常明显的n00b错误,但我就是看不出来!感谢所有帮助:如果有任何其他代码片段需要帮助,请告诉我。这是因为getText是
上下文的一种方法。导入上下文类并不重要;重要的是从上下文调用该方法(例如,活动类是上下文(它继承上下文))
在这种情况下,我建议创建一个返回所需上下文的应用程序类。之后,您可以执行以下操作:
public final String LOG_NAME = (String) App.getContext().getText(R.string.app_name_nospaces);
根据所使用的“文件”类型,可以定义所使用的标记
例如,当我创建一个应用程序时,我喜欢为我的活动类创建一个基类
假设我的应用程序名为“Wibble”,我的包名为com.mydomain.Wibble
…我创建基本活动如下
package com.mydomain.Wibble
public class WibbleActivity extends Activity {
final protected String TAG = this.getClass().getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// I'll explain how this next line works later
android.util.Log.d(TAG, "Entered onCreate()...");
}
}
现在假设我导出一个活动,如下所示
package com.mydomain.Wibble
public class SomeActivity extends WibbleActivity {
@Override
protexted void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Don't Log "Entered onCreate()..." - WibbleActivity does it for me
android.util.Log.d(TAG, "SomeText");
}
}
然后我得到另一个活动
package com.mydomain.Wibble
public class SomeOtherActivity extends WibbleActivity {
@Override
protexted void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Don't Log "Entered onCreate()..." - WibbleActivity does it for me
android.util.Log.d(TAG, "SomeOtherText");
}
当为SomeActivity
调用onCreate()
时,输出将是
com.mydomain.Wibble.SomeActivity Entered onCreate()...
com.mydomain.Wibble.SomeActivity SomeText
com.mydomain.Wibble.SomeOtherActivity Entered onCreate()...
com.mydomain.Wibble.SomeOtherActivity SomeOtherText
…但是,当为SomeOtherActivity
调用onCreate()
时,输出将是
com.mydomain.Wibble.SomeActivity Entered onCreate()...
com.mydomain.Wibble.SomeActivity SomeText
com.mydomain.Wibble.SomeOtherActivity Entered onCreate()...
com.mydomain.Wibble.SomeOtherActivity SomeOtherText
这两个活动都不需要通过显式字符串知道细节,并且包名是前缀。显然,它只在某些情况下有效,但我发现它很有用。谢谢,这似乎很有效,我觉得我更好地理解了现在发生的事情。它唯一不起作用的地方是应用程序类本身:我以为我可以在那里使用getText(因为它是一个上下文),但是我得到了一个NullPointerException。有什么建议吗?由于这个问题,它开始工作了:事实证明,在onCreate之前,资源是不可访问的,所以我将我的日志名设置为静态的,而不是最终的,并将其设置在onCreate中,而不是在声明中。