2

編集済み;

私のアプリケーションはAndroidエミュレーターで正常に動作します。これで、PCとandroid-x86VMでAndroidアプリを実行するためのクライアントである「Bluestacks」に.apkをインストールしました。ボタンを押して次のアクティビティに進むと、クラッシュまたは再起動の両方が発生します。

メインアクティビティのみにインストール済みアイコンが表示されていることを確認した後、アプリケーションを起動し、次のアクティビティへのインテントにリンクされたボタンを押すとすぐに、メインアクティビティがbluestacksで再起動し、VMでクラッシュエラーが発生します。

この動作は、Androidエミュレーターでは表示されません。これの理由は何でしょうか?

AndroidManifest:

....
<application
    android:name="MainApplication"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".activities.MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".activities.NewAuditActivity"
        android:label="@string/title_activity_index" >
       <intent-filter>
           <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
....

主な活動では、これを行います。

public void viewNewAudits(View view) {

    Intent intent = new Intent(this, NewAuditActivity.class);
    TextView auditorView = (TextView) findViewById(R.id.MainViewAuditor);
    intent.putExtra("auditor", auditorView.getText());
    startActivity(intent);
}

xmlビューでクリックされたボタンは、onclick:"viewNewAudits"メソッドを正しく呼び出します。

アプリケーションが次のアクティビティに進まない理由は何でしょうか?androidエミュレーターがアプリを実行しているため、クラッシュの原因となる可能性のあるエラー/例外を見つけることができません。

編集:

VBox VMでログを検索したところ、adblogcatコマンドを試してみました。VMからいくつかのログを見つけましたが、SQLite例外が発生します。2番目のアクティビティで、DBとquerymanagerのインスタンス化を開始するため、これは理にかなっています。ただし、奇妙なことに、sqliteexceptionは構文エラーです。SQLite構文が別のエミュレーターで異なる方法はありますか?logcatログの短い部分:

I/ActivityManager( 2039): Starting activity: Intent { cmp=..../.activ
ities.NewAuditActivity (has extras) }
I/Database( 2797): sqlite returned: error code = 1, msg = near ",": syntax error

D/AndroidRuntime( 2797): Shutting down VM
W/dalvikvm( 2797): threadid=1: thread exiting with uncaught exception (group=0xb
5891290)
E/AndroidRuntime( 2797): FATAL EXCEPTION: main
E/AndroidRuntime( 2797): java.lang.RuntimeException: Unable to start activity Co
mponentInfo{.....activities.NewAuditActivity}: androi
d.database.sqlite.SQLiteException: near ",": syntax error: , while compiling: IN
SERT INTO Criteria (auditTemplateId, code, requirement, MOE, description) VALUES
('145', '.A.25(a)', 'Facility, size and segregation', '1.8-2.7 exhibit 5-2.3', ...... *more of the same inserts with a lot of comma's
4

2 に答える 2

1

Androidエミュレーターまたは実際のデバイスでアプリを提案します。または、サードパーティツールのバグに時間を費やすことになります。エミュレーターで正常に動作する場合は、使用しているBluestacksクライアントにバグがある可能性があります...実際のデバイスで試してください...

エミュレーターは、開発者ごとにデバイスがない場合に非常に役立ちます。エミュレーターを使用して、基本的なUIとアプリケーションのフローを確認できます。

ピクセルパーフェクトUI、パフォーマンス、ロケーションベースの機能、ネットワーク接続ベースの機能をチェックするには、実際のデバイスを使用する必要があります。等..

そのため、機能をリリースする前に実際のデバイスでテストすることが重要です。

編集1:次のリンクには、エミュレーターと実際のデバイスに関する非常に興味深い議論もあります。

Androidエミュレーターと実際のデバイス

EDIT2:NewAuditActivityクラスでは、auditorinの値intent extranullまたは?の場合にケースを処理していますかempty string

于 2012-11-15T08:08:57.887 に答える
0

..ため息..

他のエミュレーターには、コードに影響を与えなかった少し古いバージョンのandroidが含まれていたようですが、少し古いバージョンのSQLiteDBを使用していました。これにより、データベースに複合挿入クエリを入力しようとしたときにエラーが発生しました。これは私の問題をここのものと同じにします:挿入時のSQLiteエラー

追加情報:このビデオは、既存のエミュレーターの代わりに、virtualboxでandroid-x86プロジェクトをセットアップする方法を非常に明確に示しています:http ://www.youtube.com/watch?v = fFCan01I6QQ

このデバイスのログを確認できるようにするには、ビデオに示されているようにadbを使用できますが、今回は次を使用します:'adb-s<エミュレーターのシリアル番号>logcat'。これにより、完全なlogcatログがコマンドラインに出力されます。

Bluestacksも。このクライアントはいかなる種類のエラーも表示せず、通知なしにアプリケーションを完全にリセットするだけです。このソフトウェアを使用する際には、この点に注意する必要があるかもしれません。

于 2012-11-16T10:31:48.667 に答える