final TextView nt=(TextView)findViewById(R.id.notify);
它说这返回null,但indead它在R.java和main中,并带有文本。我不知道出了什么问题,有什么帮助吗?
错误:
""=(No explicit return value)
使用NT:的公共无效
public void addNotification() {
if (nt.getText()==("yes")) {
NotificationManager notifier = (NotificationManager)this.
getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.icon4;
Notification notification = new Notification(icon, "Easy Settings Has Started", System.currentTimeMillis());
Intent toLaunch = new Intent(this, EasySettings.class);
PendingIntent contentIntent =
PendingIntent.getActivity(this, 0, toLaunch, 0);
notification.setLatestEventInfo(this, "Easy Settings", "Click to quickly access Easy Settings.", contentIntent);
notification.flags |= Notification.FLAG_FOREGROUND_SERVICE;
notification.flags |= Notification.DEFAULT_SOUND;
notifier.notify(0x007, notification);
} else {
if (nt.getText()==("no")) {
//do nothing
}
}
}
OnCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final TextView nt=(TextView)findViewById(R.id.notify);
try {
checkSB();
} catch (SettingNotFoundException e) {
e.printStackTrace();
}
checkRing();
checkWifi();
checkBt();
AdView adview = (AdView)findViewById(R.id.adView);
AdRequest re = new AdRequest();
re.setTesting(false);
adview.loadAd(re);
}
在使用findViewById()
之前,需要在onCreate()
方法中调用setContentView()
。这里有一个这样做的例子。。。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set this to whatever your layout is
setContentView(R.layout.main);
// Now you can call the activity's findViewById() method...
TextView nt = (TextView)findViewById(R.id.notify);
}
编辑nt
变量与addNotification()
方法不在同一范围内。通过使其成为类成员或将其传递到addNotification()
方法中来解决此问题。
此外,要比较字符串,实际上应该使用.equals()
而不是==
。==
检查它是否是同一个对象,而.equals()
将匹配两个字符串之间的文本。
编辑(再次(
我假设您已经在类级别上有了nt
——如果没有,就不可能编译。根据您所说的,您的问题似乎源于您在onCreate()
中创建了一个单独的nt
变量。将代码更改为以下内容(我去掉了不重要的部分(。
public class YourActivity extends Activity {
private TextView nt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Do not create a new instance, use the one you have...
nt = (TextView)findViewById(R.id.notify);
// Do whatever you were doing...
}
public void addNotification() {
// This *should* work...
if (nt.getText().equals("yes")) {
// Do whatever you were doing...
}
else if (nt.getText().equals("no")) {
// Do nothing...
}
}
}
如果这还不能让你开始,那么我不确定问题是什么。如果这不能解决你的问题,你应该发布你从logcat
中得到的内容。
我假设您已经声明了一个声明为TextView nt
的字段。
在onCreate
方法中,创建另一个(本地(变量nt,将TextView存储在此本地变量中,而不是全局字段中。
更改此项:
final TextView nt=(TextView)findViewById(R.id.notify);
进入这个:
nt = (TextView) findViewById(R.id.notify);
只有在调用setContentView()
之后才能使用findViewById()
。
在onCreate()
方法之外声明nt
变量。您将其声明为局部变量,因此没有其他方法能够看到它
TextView nt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
nt=(TextView)findViewById(R.id.notify);
try {
checkSB();
} catch (SettingNotFoundException e) {
e.printStackTrace();
}
checkRing();
checkWifi();
checkBt();
AdView adview = (AdView)findViewById(R.id.adView);
AdRequest re = new AdRequest();
re.setTesting(false);
adview.loadAd(re);
}
查看您的文本视图是否在主布局中,而不是在另一个布局中。你能放一些原木吗?