2013-11-07 5 views
-3

Я - андроид-новичок, я пытаюсь использовать этот код в основах наследования, чтобы получить сообщение из функции void function A и сделать его показанным, но я не могу ... показать мне это сообщение java.lang.nullpointerexeption .. . это треска класса а и основной деятельности ... и спасибо:вызов внешнего метода в android?

A.java:

public class A extends Activity { 

    public void showA(){ 
     Toast.makeText(this, "Class A", Toast.LENGTH_SHORT).show(); 
    } 
} 

MainActivity.java:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button show_a=(Button)findViewById(R.id.Show_A); 

     show_a.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       try{ 
        A c=new A(); 
        c.showA(); 
       } 
       catch(Exception e){ 
        Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 
    } 
+0

Опубликовать код showA() функция. –

+0

Я думаю, что ваша проблема заключается в том, что контекст класса A равен нулю. – jzafrilla

+0

. Вам нужно вставить свою стеклу в случае, если вам нужна помощь, и если вы посмотрите в свою трассу, вы можете найти, где проблема. Тогда вы можете научиться решать проблему, например, эту ссылку: http://stackoverflow.com/questions/16004891/why-getapplicationcontext-in-constructor-of-activity-throws-null-pointer-excep – dilix

ответ

2

Pass Контекст от деятельности:

A c=new A(getApplicationContext()); 
       c.showA(); 

Изменение класса А:

public class A { 

Context c; 
public A(Context c) { 
    this.c=c; 
} 

public void showA(){ 
    Toast.makeText(c, "Class A", Toast.LENGTH_SHORT).show(); 
} 

}

0

попытка изменить класс а :

public class A{ 
    public void showA(Context ctx){ 
    Toast.makeText(ctx, "Class A", Toast.LENGTH_SHORT).show(); 
} 

}

public class MainActivity extends Activity{ 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

Button show_a=(Button)findViewById(R.id.Show_A); 

show_a.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     try{ 
      A c=new A(); 
      c.showA(MainActivity.this); 
     } 
     catch(Exception e){ 
      Toast.makeText(getApplicationContext(), e+"", Toast.LENGTH_LONG).show(); 
     } 
    } 
}); 

}}

0

Вы создаете операцию А неправильным способом. Деятельность управляется Android, поэтому вы не создаете Activity, вы уведомляете систему о запуске Activity. И способ уведомления Android использует Intents.

Intent myIntent = new Intent(this, A.class); 
startActivity(myIntent); 

Тогда вы могли бы показать Тост в onResume вашей A Activity.

@Override 
public void onResume(){ 
    super.onResume(); 
    showA(); 
} 

Или вы могли бы изменить класс А, как @imperator_sp сказал

0

Ну что вы здесь делаете это хорошо в соответствии с Java, но когда дело доходит до андроид, это не является хорошей практикой. Что вы можете сделать здесь, не продлевают класса А с Activity и просто заменить метод showA() с одной указанной ниже:

public static void showA(Context context, String text){ 
    Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); 
} 

и вызвать этот метод из любого места вы хотите, как это: -

showA(this, "Class A"); 
Смежные вопросы