声明TextView错误

时间:2011-05-30 17:02:43

标签: android textview

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

5 个答案:

答案 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是否在您的主要布局中而不在另一个中。你可以把一些日志放好吗?