在我的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抱怨其中一个:
方法getText(int)未定义 对于DatabaseManager类型
我已经确定我肯定会在该文件中导入android.content.Context。如果我确切地告诉它在哪里找到getText:
此行的多个标记
的方法getText(int)未定义
- 无法对非静态方法getText(int)进行静态引用 来自类型Context - 类型DatabaseManager
我确定我犯了一个明显的n00b错误,但我看不到它!感谢您的帮助:如果任何其他代码段有用,请告诉我。
答案 0 :(得分:2)
那是因为getText是Context
的方法。如果导入Context类并不重要;重要的是你从一个Context 调用该方法(例如,Activity类是一个Context(它继承了Context))。
在这种情况下,我建议的是创建一个返回所需上下文的Application类。 Here I explain how to do it。之后,您可以执行以下操作:
public final String LOG_NAME = (String) App.getContext().getText(R.string.app_name_nospaces);
答案 1 :(得分:0)
根据您使用的“文件”类型,您可以定义使用的TAG。
例如,当我创建一个应用程序时,我喜欢为我的Activity类创建一个基类...
假设我的应用程序名为'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");
}
为onCreate()
调用SomeActivity
时,输出将为...
com.mydomain.Wibble.SomeActivity Entered onCreate()...
com.mydomain.Wibble.SomeActivity SomeText
...当为onCreate()
调用SomeOtherActivity
时,输出将为......
com.mydomain.Wibble.SomeOtherActivity Entered onCreate()...
com.mydomain.Wibble.SomeOtherActivity SomeOtherText
两个活动都不需要通过显式字符串来了解细节,并且包名称是前缀的。显然它只会在某些情况下起作用,但我发现它很有用。