Новая активность nullpointerexception - PullRequest
       15

Новая активность nullpointerexception

3 голосов
/ 03 сентября 2010

У меня проблема новичков.Вот моя ситуация:

Я хочу начать новый вид деятельности с основного вида деятельности.Код для запуска нового действия находится в отдельном файле класса.Кажется, я передаю неправильные аргументы, и я пытаюсь запустить новое действие.Новое действие запускается нормально, когда я помещаю код в основной файл класса действий, поэтому второе действие и манифест в порядке.Вот пример моего кода:

В моем основном учебном классе, где я инстанцирую второй класс (ЭТО МОЯ ОСНОВНАЯ ДЕЯТЕЛЬНОСТЬ. Я ПУСТАЛ ОТДЫХАТЬ, ПОТОМУ ЧТО Я НЕ ДУМАЮ, ЧТО ЭТО ОТНОСИТСЯ К ПРОБЛЕМЕ):

Tester mytest = new Tester();
mytest.test(this);

В моем файле второго класса (ЭТО НЕ ДЕЯТЕЛЬНОСТЬ; ЭТО КЛАСС, КОТОРЫЙ УСТАНАВЛИВАЕТСЯ В ДЕЯТЕЛЬНОСТИ):

public class Tester extends Activity {
     Intent myIntent;
     public void test (Context context) {
               myIntent = new Intent (Intent.ACTION_VIEW);
               myIntent.setClass(context, newActivity.class);
               thebutton.setOnClickListener(
            new OnClickListener() {  
                public void onClick(View v) { 
                    startActivity(myIntent);
                }  
            }       
        ):}

Когда я выполняю щелчок, я получаю nullpointerexceptionна стартовой.Может ли кто-нибудь объяснить мне это, пожалуйста? Я уверен, что я неправильно использую контекст.

1 Ответ

4 голосов
/ 03 сентября 2010

Действия начинаются с Intents .Пожалуйста, сначала прочтите Основы приложений Android и попробуйте приложение Hello World:)

Я понял, что вы будете использовать свой отдельный класс Tester любой ценой;), поэтому я пытаюсь адаптировать ипомочь вам там.

Прежде всего, не позволяет вашему классу наследовать от Activity.Это не поможет вам, потому что у этих вызовов, вероятно, не будет никакого действительного контекста.Activity каким-то образом реализует шаблон шаблона , предоставляя вам метод ключа, такой как onCreate(...), onPause(...) и т. Д., И создается в ОС Android.

Если вы все еще хотите использовать класс, выдолжны пройти в контексте.Возможно, вы стремитесь к некоторой структуре паттернов MVC / MVP, в любом случае.

public class Tester {
    private Context context;
    public Tester(Context context){
        this.context = context;
    }

    public void test () {
       final Intent myIntent = new Intent(context, NewActivity.class);

       //guess this comes from somewhere, hope through a findViewById method
       thebutton.setOnClickListener(
              new OnClickListener() {  
                public void onClick(View v) { 
                    context.startActivity(myIntent);
                }  
              }       
        )};
    }
}

Это было бы предлагаемое решение с моей стороны.Проблема, которую я до сих пор вижу, заключается в , как вы извлекаете кнопку в этом test() методе.Для того чтобы эта работа работала должным образом, вы должны извлечь ее из некоторого класса View (с view.findViewByid(R.id.myButton)) или создать ее динамически и связать с представлением во время onCreate(...) вашей Деятельности (возможно, с помощью Inflater).

...