声明TextView错误


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);
}

查看您的文本视图是否在主布局中,而不是在另一个布局中。你能放一些原木吗?

最新更新