0

あるアクティビティから別のアクティビティにデータを送信する必要がある Android プロジェクトを開発しています。しかし、あるアクティビティから別のアクティビティにデータを送信しているとき、あるアクティビティから別のアクティビティにデータを送信していません。

other からデータを受け取るコードの一部は次のとおりです。

Intent intent=getIntent();
String str,str1;
str=intent.getExtras().getString("phoneno"); 
Log.d("completre", "complete"); 
phonePhoneno.setText(str);

Log.d("complete","complete1");



if(intent.getExtras()==null) {
    txtMessage.setText("u duffer write program properly");
} else {
    str1=intent.getExtras().toString();
    txtMessage.setText(str1);
    Log.d("complete","complete2");
}   

他のアクティビティからデータを送信するために使用しているコードの一部は次のとおりです。

if(v.getId()==R.id.main_act) {
    String str=txtText.getText().toString();
    Intent intent=new Intent(getApplicationContext(), MainActivity.class);
    intent.putExtra("username",str);
    intent.putExtra("phoneno", phoneno);
    startActivity(intent);
} 

ボタンをクリックしてデータを受信しようとすると、強制終了します。

このプロジェクトでは、電話番号を読んでいる最初の活動に2つの活動があります。ans は、将来のために保存するためだけに 2 番目のアクティビティに送信します。2番目のアクティビティには、音声認識システムによってテキストを追加する編集テキストがあり、その後、データ電話番号と編集テキストフィールドの両方を、2番目のアクティビティから1番目のアクティビティに、上記のボタンをクリックして送信しています(コードの2番目の部分) )。電話番号を送信していますが、テキストコンテンツを編集していません(推測)。完了ボタンをクリックすると(最初のアクティビティの両方のフィールドに入力します)、電話番号フィールドに電話番号を追加しますが、メッセージは追加しません。

アプリが閉じられなかったときの最新のログ猫

  04-13 13:33:46.206: I/TextToSpeech(834): Sucessfully bound to com.svox.pico
04-13 13:33:46.206: W/TextToSpeech(834): speak failed: not bound to TTS engine
04-13 13:33:47.005: I/TextToSpeech(834): Connected to ComponentInfo{com.svox.pico/com.svox.pico.PicoService}
04-13 13:33:47.125: E/test(834): hhhhhhhhhhhhhhhhh
04-13 13:33:47.125: I/Choreographer(834): Skipped 174 frames!  The application may be doing too much work on its main thread.
04-13 13:33:47.575: I/Choreographer(834): Skipped 69 frames!  The application may be doing too much work on its main thread.
04-13 13:33:56.535: W/IInputConnectionWrapper(834): showStatusIcon on inactive InputConnection
04-13 13:33:56.535: I/Choreographer(834): Skipped 174 frames!  The application may be doing too much work on its main thread.
04-13 13:33:56.975: D/dalvikvm(834): GC_CONCURRENT freed 127K, 9% free 3017K/3288K, paused 37ms+5ms, total 108ms
04-13 13:34:00.274: V/(834): Got a contact result: content://com.android.contacts/data/3
04-13 13:34:00.674: V/(834): Got phone no : (986) 743-561
04-13 13:34:00.914: I/Choreographer(834): Skipped 164 frames!  The application may be doing too much work on its main thread.
04-13 13:34:01.244: I/Choreographer(834): Skipped 37 frames!  The application may be doing too much work on its main thread.
04-13 13:34:05.494: I/Choreographer(834): Skipped 139 frames!  The application may be doing too much work on its main thread.
04-13 13:34:05.974: I/Choreographer(834): Skipped 60 frames!  The application may be doing too much work on its main thread.
04-13 13:34:12.965: I/TextToSpeech(834): Sucessfully bound to com.svox.pico
04-13 13:34:12.965: W/TextToSpeech(834): speak failed: not bound to TTS engine
04-13 13:34:13.065: I/TextToSpeech(834): Connected to ComponentInfo{com.svox.pico/com.svox.pico.PicoService}
04-13 13:34:13.155: E/test(834): hhhhhhhhhhhhhhhhh
04-13 13:34:13.155: I/Choreographer(834): Skipped 35 frames!  The application may be doing too much work on its main thread.
04-13 13:34:14.425: I/Choreographer(834): Skipped 308 frames!  The application may be doing too much work on its main thread.
04-13 13:34:15.235: I/Choreographer(834): Skipped 95 frames!  The application may be doing too much work on its main thread.
04-13 13:34:16.265: I/Choreographer(834): Skipped 31 frames!  The application may be doing too much work on its main thread.
 04-13 13:34:20.025: D/completre(834): complete
 04-13 13:34:20.035: D/AndroidRuntime(834): Shutting down VM
 04-13 13:34:20.035: W/dalvikvm(834): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
 04-13 13:34:20.085: E/AndroidRuntime(834): FATAL EXCEPTION: main
 04-13 13:34:20.085: E/AndroidRuntime(834): java.lang.NullPointerException
 04-13 13:34:20.085: E/AndroidRuntime(834):     at com.example.sms.MainActivity.onClick(MainActivity.java:322)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.view.View.performClick(View.java:4204)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.view.View$PerformClick.run(View.java:17355)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.os.Handler.handleCallback(Handler.java:725)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.os.Handler.dispatchMessage(Handler.java:92)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.os.Looper.loop(Looper.java:137)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at android.app.ActivityThread.main(ActivityThread.java:5041)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at java.lang.reflect.Method.invokeNative(Native Method)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at java.lang.reflect.Method.invoke(Method.java:511)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 04-13 13:34:20.085: E/AndroidRuntime(834):     at dalvik.system.NativeStart.main(Native Method)

ここでさらに言及したいのは、編集テキストのコンテンツを設定していないというメッセージを記録せずに 2 番目のアクティビティからメインに戻り、コンテンツの 2 番目の部分に示すように最初のアクティビティに送信しようとしたことです。機能したコード...理想的には、編集テキストにデータがないため、強制的に閉じる必要があります..その時点で強制的に閉じない理由がわかりませんでした。

4

3 に答える 3

1

わかりました、少し掘り下げた後、問題が何であるかがわかりました...

この問題は、 の値とは何の関係もありませんBundle

問題は、呼び出された上で呼び出そうとしていることsetText()です。このフィールドは、 のメソッドで初期化されたことはありません。getText()EditTextphonePhonenoonCreateMainActivity

したがって、これを修正するには、 for内でを正しいものNullPointerExceptionに初期化してください。これで問題ありません ;-)phonePhonenoEditTextmain.xmlMainActivity

たぶん、このように初期化する必要がありますか?

phonePhoneno = (EditText) findViewById(R.id.phonenofromcontact);

知らない?

正直なところ、タイプまたは「オートコンプリート」の間違いのように見えます:P

ちょっとしたアドバイス: コードをクリーンアップしてくださいException

于 2013-04-13T14:24:46.220 に答える
0

デビッド・マンパールは、あなたが何か間違ったことをしたと言うのは正しいです。つまり、インテントでどこが変更されたかを意味します。意図が役に立たない場合は、別の方法を使用できます。データを別のアクティビティに渡す方法は他にもあります。

例えば:

  1. 共有設定

  2. ただし、Application オブジェクトは別の方法であり、複数のアクティビティで同じ状態を処理する場合 (どこでも get/put する必要があるのではなく)、またはプリミティブや文字列よりも複雑なオブジェクトを処理する場合の方が簡単な場合があります。アプリケーションを拡張し、そこで必要なものを設定/取得し、getApplication() を使用して (同じアプリケーション内の) 任意のアクティビティからアクセスできます。

または、Activity の onCreate メソッドで Intent からデータを取得してみてください

于 2013-04-13T15:29:16.003 に答える