Объявление ошибки TextView - PullRequest
0 голосов
/ 30 мая 2011
final TextView nt=(TextView)findViewById(R.id.notify);

В нем говорится, что это возвращает нуль, но в действительности это находится в R.java и главном и имеет текст с этим. Я понятия не имею, что не так, любая помощь?

Ошибка:

""=(No explicit return value)

Public void, использующий 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);
}

Ответы [ 5 ]

1 голос
/ 30 мая 2011

Вам необходимо вызвать 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 голос
/ 30 мая 2011

Полагаю, вы объявили поле, объявленное TextView nt.

В вашем методе onCreate вы создаете другую (локальную) переменную nt, сохраняя TextView в этой локальной переменной, а не в глобальном поле.

Изменить это:

final TextView nt=(TextView)findViewById(R.id.notify);

в это:

nt = (TextView) findViewById(R.id.notify);
0 голосов
/ 30 мая 2011

Посмотрите, находится ли ваш текстовый вид в вашем основном макете, а не в другом. А можешь поставить какой нибудь лог, пожалуйста?

0 голосов
/ 30 мая 2011

Объявите переменную 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);
}
0 голосов
/ 30 мая 2011

Вы можете использовать findViewById() только после того, как позвонили setContentView().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...