新しいアクティビティnullpointerexception
-
30-09-2019 - |
質問
初心者の問題があります。これが私の状況です:
メインアクティビティから新しいアクティビティを開始したいと思います。新しいアクティビティを起動するコードは、別のクラスファイルにあります。私は間違った議論に合格しているようで、新しいアクティビティを起動しようとするときにnullpointerexceptionになります。新しいアクティビティは、メインアクティビティクラスファイルにコードを配置すると正常に起動します。したがって、2番目のアクティビティとマニフェストは問題ありません。これが私のコードのサンプルです:
私が2番目のクラスを導入する私の主なアクティビティクラスで(これが私の主なアクティビティです。それが問題に関連しているとは思わないので、残りを省略しました):
Tester mytest = new Tester();
mytest.test(this);
私の2番目のクラスファイル(これはアクティビティではありません。アクティビティにインスタンス化されたクラスです):
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);
}
}
):}
クリックを実行すると、StartActivityでnullpointerexceptionを受け取ります。誰もが私を啓発してくれませんか?私はコンテキストを間違って使用していると確信しています。
解決
アクティビティは始まっています 意図. 。読んでください Androidアプリケーションの基礎 最初に、HelloWorldアプリを試してみてください:)
私はあなたがあなたの個別のテスタークラスをいつでも使用することを理解しました;)だから私はあなたをそこに順応させ、助けようとしています。
初めに、 しないでください アクティビティからクラスを継承させます。これはあなたを助けません。なぜなら、この呼び出しにはおそらく有効なコンテキストがないからです。活動はどういうわけかを実装します テンプレートパターン, 、次のような重要な方法を提供します onCreate(...)
, onPause(...)
など、Android OSによってインスタンス化されます。
それでもクラスを使用したい場合は、コンテキストに合格する必要があります。とにかく、おそらく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.findViewByid(R.id.myButton)
)またはそれを動的に作成し、それをビューに関連付けます onCreate(...)
あなたの活動の(おそらくインフレーターを使用しています)。