2012-04-22 12 views
0

Androidアプリが間違った動作を開始したようです。アプリが間違ったアクティビティで起動する

のAndroidManifest.xmlからの重要な部分:

"MainActivity" アプリの起動時に開始された活動でなければなりません:

<activity android:name=".MainActivity" android:label="@string/app_name" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name="AnotherActivity" 
    android:label="@string/app_name"> 
</activity> 

MainActivity:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //display into log that THIS activity is started 
     Log.d("tag", "MainActivity"); 

     //start async task to install the database on first startup 
     progressDialog = ProgressDialog.show([params...]); 
     new InstallDatabaseTask().execute(this); 
} 

/** 
* 1. Installs and initializes the database. 
* 2. Opens another activity. 
*/ 
private class InstallDatabaseTask extends AsyncTask { 

     @Override 
     protected Object doInBackground(Object... params) { 
      progressDialog.show(); 

      //open database so it can be installed 
      MyOpenHelper helper = new MyOpenHelper((Context) params[0]); 
      helper.getWritableDatabase().close(); 

      //dismiss progress dialog 
      MainActivity.this.progressDialog.dismiss(); 

      //start another activity 
      Intent intent = new Intent(MainActivity.this, AnotherActivity.class); 
      ((Context)params[0]).startActivity(intent); 

      return null; 
     } 
} 

AnotherActivity:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //just make sure this activity was started 
     Log.d("tag", "another activity started"); 
    } 

しかし、ログには「別のアクティビティが開始されました」だけが表示されます。

+0

私はあなたに非同期タスクに問題があるのでクラッシュする必要があると思います –

+0

しかし、何かがクラッシュするように思える。出力にエラーがないようにしてください。しかし、タスクが実行されます。データベースがインストールされています。 –

+0

あなたは@ autobot_101 suggesstionを試してみました –

答えて

2

しかし、あなたはそうとすぐに主な活動は、それが非同期タスクを起動して、非同期タスクにあなたはそうとすぐに非同期タスクがそうであるようにライン

//start another activity 
Intent intent = new Intent(MainActivity.this, AnotherActivity.class); 
((Context)params[0]).startActivity(intent); 

の下に呼び出している作成して非同期タスクを呼び出しているあなたのOnCreateメソッドでタスクは別のアクティビティを起動します。あなたはアンドロイドが間違った活動を開始していると仮定しています。しかし、内部的にあなたは活動を開始しており、あなたの非同期は数マイクロ秒で完了しているので、間違った活動が開始されたと仮定しています。

+0

あなたは何をしたのですか? –

+0

行内: 'MyOpenHelper helper = new MyOpenHelper((Context)params [0]); helper.getWritableDatabase()。close(); ' アプリケーションがデータベースをインストールしています。その後、アクティビティが呼び出されます。それは問題ではありません。そして、アプリは "MainActivity"をログに出力しませんでした。 –

-1

メインマニフェストでは、メインアクティビティの代わりに起動しているアクティビティがデフォルトに設定されていることを確認してください。

カテゴリアンドロイド:名= "android.intent.category.DEFAULT"

 <intent-filter> 
      <action android:name="com.game.test.DIRECTOR" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 

だから、メインとして起動しません。また、マニフェスト内のインテントフィルタが正しいかどうかを確認してください。

+0

category.DEFAULTは、アイコンがAppsグリッドに表示されないようにします。お風呂の水で赤ちゃんを捨てる場合があります。 –

0

Manifestファイルで宣言したAnotherActivityに問題がありますか?

<activity 
    android:name="AnotherActivity" 
    android:label="@string/app_name"> 
</activity> 

私はドットがあるべきだと思います。以下のような

アンドロイド:名=「AnotherActivity」

+0

私は "ドット"は、アプリケーションのデフォルトのディレクトリを表していることをお勧めしますが、私は結果なしでそれを変更しました。それはまだ動作しません。 –

1

あなたがスレッドウィッヒからdoInBackground()法(および他のUIウィジェット)からプログレスダイアログにアクセスすることはできませんが、UIスレッドではありません。あなたはonPostExecute()に置くべきです。以下のような

何か:

private class InstallDatabaseTask extends AsyncTask <Void, Void, Void>{ 

    @Override 
    protected Object doInBackground(Object... params) { 
     progressDialog.show(); 

     //open database so it can be installed 
     MyOpenHelper helper = new MyOpenHelper((Context) params[0]); 
     helper.getWritableDatabase().close(); 



     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result){ 

     //dismiss progress dialog 
        MainActivity.this.progressDialog.dismiss(); 

        //start another activity 
        Intent intent = new Intent(MainActivity.this, AnotherActivity.class); 
        ((Context)params[0]).startActivity(intent); 
    } 

} 

は、私はあなたがAsyncTaskを拡張する際のパラメータを宣言する必要があると思います。

私は私がアンドロイドが正しい活動を開始していることを理解し、あなたのコードから、これはあなたの問題を解決するかどうかわからないんだけど、ヒントです...

+0

ありがとう、それを変更しましたが、あなたが言ったように、これは私の問題を解決しませんでした。 –

+0

そして、長い間、それはそのように働いていました。なぜそれがもはやなぜなのか分かりません。 –

関連する問題