0

一部のデータをチェックし、非アクティビティクラスでアラートを表示するコードがあります。しかし、アプリケーションプログラムの実行中にクラッシュし、アラートダイアログが表示されません。以下のコードを使用しました...

if( str.isEmpty() || strPort.isEmpty()){
        new AlertDialog.Builder(Mtx.getContext())
                    .setMessage("Please provide a valid String")
        .setTitle("HAT Alert !!!")
        .setCancelable(true)
        .setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton){
                return;
            }
        }).show();

Mtx.getContent()メソッドのコード

public class Mtx extends Application {
public static Context context;

@Override
public void onCreate(){
   super.onCreate();
   Mtx.context = getApplicationContext();
}

public static Context getContext(){
       return Mtx.context;
}
}

ログ猫に表示されるエラーメッセージ

10-15 12:50:33.708: E/global(329): Deprecated Thread methods are not supported.
10-15 12:50:33.708: E/global(329): java.lang.UnsupportedOperationException
10-15 12:50:33.708: E/global(329):  at java.lang.VMThread.stop(VMThread.java:85)
10-15 12:50:33.708: E/global(329):  at java.lang.Thread.stop(Thread.java:1280)
10-15 12:50:33.708: E/global(329):  at java.lang.Thread.stop(Thread.java:1247)
10-15 12:50:33.708: E/global(329):  at mediatronix.HAT.Splash$1.run(Splash.java:36)

訂正してください

ありがとう

4

4 に答える 4

2

よろしいですか、ダイアログが問題ですか?Splash.javaファイルの36行目は何ですか?スタックトレースによると、問題があるからです。

于 2012-10-15T07:38:10.980 に答える
2

使用しているアプリケーションのコンテキストを表示することはできません。AlertDialogダイアログは、そのコンテキストを使用してアクティビティのウィンドウにアタッチされ、ライフサイクル内で存続することになっています。したがって、ダイアログを表示できるようにするアクティビティのコンテキストを提供する必要があります。

別の方法として、 AndroidManifest.xmlActivityでを使用android:theme="@android:style/Theme.Dialog"してテーマとしてテーマを表示することをお勧めします。これはダイアログを操作する目的に役立ちますが、実際にはアクティビティになります。利点として、アプリケーションのコンテキストにアクセスできる限り、コード内のどこからでもアクティビティを起動できます。

詳細については、この回答をお読みください。

于 2012-10-15T07:43:00.437 に答える
2

アクティビティでNonActivityクラスを作成するときは、コンテキストをそのコンストラクターに渡します。

NonActivityClass nonActivityClass = new  NonActivityClass(this);

非アクティビティコンストラクター:

Context mContext;
public NonActivityClass(Context context){
    mContext = context;
}

次に使用します:

new AlertDialog.Builder(mContext)...NonActivityクラスで

于 2012-10-15T07:49:18.010 に答える
1

私の推測では、あなたのコンテキストはnullです...

存在しないコンテキストをフェッチしようとするのではなく、データのチェックを開始する前に、「一部のデータをチェックするコード」にコンテキストを送信できませんか?

それ以外の場合は、代わりにアラートダイアログを作成するアクティビティを作成し、そのアクティビティを「サービス」クラスから起動します。

于 2012-10-15T07:33:34.580 に答える