2

文字列をインテント エクストラとして渡しています。次のメソッドには、インテントを介して渡したい情報を含むパラメーターが渡されます。「mc」と「title」の値がトーストにあるはずのとおりであることがわかります。

 private void addProximityAlert(int id, Double latitude, Double longitude, String title, String mc) {

        Intent intent = new Intent(PROX_ALERT_INTENT);
        intent.putExtra("id", id);
        intent.putExtra("mc", mc);  
        intent.putExtra("gl", latitude);
        intent.putExtra("title", title);

        PendingIntent proximityIntent = PendingIntent.getBroadcast(Map.this, id, intent, 0);
        lm.addProximityAlert( latitude, longitude,  POINT_RADIUS,  PROX_ALERT_EXPIRATION,  proximityIntent  );

        Toast.makeText(getApplicationContext(),"INPAMAP "+intent.getStringExtra("title")+intent.getStringExtra("mc"),Toast.LENGTH_SHORT).show(); 
 }

次のクラスでは、何をしようとしても、「mc」がその値を保持するだけで、他の変数は常に null です。次のアクティビティは次のとおりです。

@Override
public void onReceive(Context context, Intent intent) {

       NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 

       Intent notificationIntent = new Intent(context, Map.class);
       PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
       Notification notification = createNotification();

       //Here I can see title is null and mc is what it should be
       Toast.makeText(context,"IN PA "+intent.getStringExtra("title")+intent.getStringExtra("mc") ,Toast.LENGTH_SHORT).show(); 

バンドルを使用してみましたが、これは機能しませんでした。mc と title が両方とも文字列であるのに、なぜ mc だけが渡されるのか完全にわかりません。mc または title のいずれかのみを渡そうとしましたが、mc のみが null ではありません。それらが addproximityAlert メソッドに渡される順序と、エクストラとして追加される順序を変更しようとしましたが、オプションがありません。SOに来る前にこれらの問題を自分で理解できるように、Eclipseで適切にデバッグする方法を実際に知りたいのですが、多くの時間的プレッシャーにさらされています。

私の問題が何であるかを理解する方法についてアドバイスをいただければ幸いです。ありがとうございます。

4

2 に答える 2

4

PendingIntent.FLAG_UPDATE_CURRENTメソッドでフラグを設定する必要がありPendingIntent.getXXXます。

PendingIntent.getBroadcast(Map.this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

問題は、PendingIntent.getXXX意図をキャッシュし、以前に作成されたインスタンスを更新せずに返すことができることです。FLAG_UPDATE_CURRENTインテントの更新を強制します。より詳細な説明は公式ドキュメントにあります。

于 2013-03-17T16:29:43.613 に答える
1

デバッガーを使用して問題を把握したい場合は、それが最善の方法です。Eclipseで機能する方法は、コードの実行を停止して変数を確認するブレークポイントを設定することです。これらは、任意の行番号の横にある左側のバーを右クリックして設定できます。次に、[デバッグ]をクリックします。これは、Project->debugから実行できます。プロジェクトを右クリックして、[デバッグ]->[Androidアプリケーション]を選択することもできます。これで、アプリが実行されてブレークポイントに達すると、デバッグモードに移行します。ここでブレークポイントをシフトできます。各ポイントの変数値を参照してください。

これに加えて、値のセット全体をリストとして渡してみましたか?次のようなものです。親アクティビティの1つから呼び出されたアクティビティにArrayListを渡すことができます。サンプルは次のとおりです。

ArrayList<TYPE> value = new ArrayList<TYPE>();
// populate the list
value.add(CALUE);
Intent intent = new Intent(CurrentActivity.this,TargetActivity.class);
intent.putExtra("arraylist", value);
startActivity(intent);

ターゲットクラスでは、次のようにリストを取得できます。

// Call in in OnCreate()
// TYPE can be String, Double etc.
ArrayList<TYPE> list=(ArrayList<TYPE>)getIntent().getSerializableExtra("arraylist");

2つのことのいずれかが役立つことを願っています。

于 2013-03-17T15:42:53.687 に答える