2012-04-12 7 views
1

私はさまざまな方法を試していて、ヌルポインタ例外を取得しています。ノンアクティビティクラスからメインアクティビティを呼び出す

シナリオ:アクティビティ1は開始時にロードされ、テーブル内の行数が0の場合はActivity2を呼び出します。行数が0でコールがdbハンドラから取得された場合、Activity1に戻ります。データベースハンドラクラスで :

if(num ==0){ 
     Activity1 bs1 = new Activity1(); 
     Context context = bs1.getApplicationContext(); 
     Intent intent = new Intent();// 
     intent.setClass(context, Activity1.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 

    } 

Activity1のonCreate()

int num = db.numOfRows(); 
    if(num==0){ 
     setContentView(R.layout.main); 
    } else {  
     startActivity(new Intent(this, Activity2.class));// 
    } 

Activity2のonCreate()事前に

 super.onCreate(savedInstanceState); 
     setContentView(R.layout.moreprojects); 
     populateRows(); 

感謝。

+0

どのオブジェクトがヌルですか? – DNRN

+0

@DNRN、afaics、context。この時点では、bs1にはアプリケーション・コンテキストがありません。 – njzk2

答えて

1

新しいアクティビティを呼び出すためにコンストラクタを使用しないでください。以下を参照してください。

Context context = bs1.getApplicationContext(); 
Intent intent = new Intent(); 
intent.setClass(context, MainActivity.class); 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //required to launch from non-activity 
context.startActivity(intent); 
+0

コンテキストでコンテキストポインタがNULLになっています。context = bs1.getApplicationContext(); – Denis

+0

だからあなたの** bs1 **は* null *であることを意味します。これを最初に修正し、それがうまくいくことを願ってください。 – waqaslam

+0

これは私があまり理解していないことです。ここで私は言及を忘れたシナリオです。私には2つのアクティビティと1つの非アクティビティクラスがあります。アクティビティ1とアクティビティ2をそれぞれ呼びます。アクティビティ2は、表に行がない場合にロードしてアクティビティ1を呼び出す必要があります。この呼び出しは、アクティビティ1をロードするために非アクティビティクラスから呼び出されます。 – Denis

3

自分でアクティビティクラスをインスタンス化しないでください。この方法で起動してください:

Intent i = new Intent(context, MainActivity.class); 
context.startActivity(i); 
+1

実際、Waqasの答えはより正確です。 –

+0

ありがとうございます。私は両方を試みた。残念ながら、問題はコンテキスト変数を得ることです。彼のコードでは、Context context = bs1.getApplicationContext();でnullポインタがスローされます。 – Denis

0

アクティビティがまだ開始されていないコンテキストからアクティビティを開始することはできません。あなたの場合、解決策はありません。あなたは、あなたの活動を開始するために、PendingIntentで通知を送ることを検討したいかもしれません

関連する問題