final TextView nt=(TextView)findViewById(R.id.notify);
它表示返回null,但是它是在R.java和main中并且有文本。我不知道出了什么问题,有什么帮助吗?
错误:
""=(No explicit return value)
使用NT的公共void:
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);
}
答案 0 :(得分:1)
在使用setContentView()
之前,您需要在onCreate()
方法中致电findViewById()
。这是一个这样做的例子......
@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
,如果不是,那就不会编译。从您所说的内容来看,似乎您的问题源于您在nt
中创建单独的onCreate()
变量。将您的代码更改为以下内容(我已经删除了不重要的部分)。
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
获得的内容。
答案 1 :(得分:1)
我假设您声明了一个声明为TextView nt
的字段。
在onCreate
方法中,创建另一个(本地)变量nt,将TextView存储在此局部变量中,而不是存储在全局字段中。
改变这个:
final TextView nt=(TextView)findViewById(R.id.notify);
进入这个:
nt = (TextView) findViewById(R.id.notify);
答案 2 :(得分:0)
您只能在致电findViewById()
后使用setContentView()
。
答案 3 :(得分:0)
在nt
方法之外声明onCreate()
变量。您将其声明为局部变量,因此没有其他方法可以看到它。
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);
}
答案 4 :(得分:0)
查看您的textview是否在您的主要布局中而不在另一个中。你可以把一些日志放好吗?