1

ボタンが押されたときに、アクティビティ 1 の EditText ボックスからアクティビティ 2 に数値を渡そうとしています。アクティビティ 2 でアクション バー ボタンが押されたときに、トーストまたはダイアログ ボックスに数値を表示します。インテントを設定し、機能すると思われるものをコーディングしましたが、毎回 activity2 がクラッシュしているようです。変数をフェッチするコード行を挿入します。うまくいけば、誰かが私が間違っている場所を見ることができるでしょう。変数内でデータを渡すのはかなり簡単な作業であることはわかっています。
どんな助けでも大歓迎です。

Activity1:

public class activity1 extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.screen_settings);
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

final EditText inputTxt1 = (EditText) findViewById(R.id.conPhoneNum);    
Button saveBtn1 = (Button) findViewById(R.id.btnSave1);


  saveBtn1.setOnClickListener(new View.OnClickListener() {
       @Override
       public void onClick(View view) {
          String phoneNum1 = inputTxt1.getText().toString();
          savenum1(phoneNum1);

  Intent passIntent = new Intent();
  passIntent.putExtra("phoneNum", phoneNum1);

    }
    });
}


public void savenum1(String phoneNum1) {

AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);

dlgAlert.setMessage("Saved " + phoneNum1);
dlgAlert.setPositiveButton("OK", null);
dlgAlert.setCancelable(true);

dlgAlert.setPositiveButton("Ok",
    new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int which) {
          //dismiss the dialog  
        }
    });    
dlgAlert.create().show();
}
}

アクティビティ 2:

public class Activity2 extends Activity {

      //This is the line that stops the activity from running
String conPhoneNum = getIntent().getExtras().getString("phoneNum");


@SuppressLint("CutPasteId")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

ActionBar actionBar = getActionBar();
actionBar.hide();
actionBar.show();
actionBar.setCustomView(R.layout.actionbar_custom_view_home);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
 }


public boolean onCreateOptionsMenu1(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return true;
}





@Override  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.menu_load:
     Toast toast= Toast.makeText(this, conPhoneNumber, Toast.LENGTH_SHORT);
      toast.setGravity(Gravity.CENTER, 0, -100);
          toast.show();
      break;

         default:
             break;
             }
    return true;
    } 
 }

LogCat 情報:

07-31 15:51:50.135: E/AndroidRuntime(779): FATAL EXCEPTION: main
07-31 15:51:50.135: E/AndroidRuntime(779): java.lang.RuntimeException: Unable to start activity     ComponentInfo{com.cam.data /com.cam.data.Activity2}: java.lang.NullPointerException
 07-31 15:51:50.135: E/AndroidRuntime(779):     at     android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at     android.app.ActivityThread.handleLaunchActivity     (ActivityThread.java:2135)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at android.app.ActivityThread.access$700    (ActivityThread.java:140)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at android.app.ActivityThread$H.handleMessage     (ActivityThread.java:1237)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at android.os.Handler.dispatchMessage     (Handler.java:99)
07-31 15:51:50.135: E/AndroidRuntime(779):  at android.os.Looper.loop(Looper.java:137)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at android.app.ActivityThread.main    (ActivityThread.java:4921)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at java.lang.reflect.Method.invokeNative(Native Method)
07-31 15:51:50.135: E/AndroidRuntime(779):  at java.lang.reflect.Method.invoke(Method.java:511)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-31 15:51:50.135: E/AndroidRuntime(779):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-31 15:51:50.135: E/AndroidRuntime(779):  at dalvik.system.NativeStart.main(Native Method)
07-31 15:51:50.135: E/AndroidRuntime(779): Caused by: java.lang.NullPointerException
07-31 15:51:50.135: E/AndroidRuntime(779):  at com.cam.data.Activity2.onCreate(Activity2.java:66)
 07-31 15:51:50.135: E/AndroidRuntime(779):     at android.app.Activity.performCreate(Activity.java:5206)
07-31 15:51:50.135: E/AndroidRuntime(779):  at     android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
07-31 15:51:50.135: E/AndroidRuntime(779):  at      android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)

更新 1: conPhoneNum = getIntent().getExtras().getString("phoneNum");まだアクティビティがクラッシュしています。.getExtras()削除するとクラッシュすることはありませんが、データも表示されないことがわかりました。これがアプリをクラッシュさせる理由についての何らかの指標であるかどうかはわかりませんか? 多分誰かが助けることができます

更新 2:
これに関する単なる更新です。私はこれを廃棄し、いつでも任意のアクティビティで使用できるグローバル クラスで定義されたグローバル変数を使用することになりました。もちろん、絶対に変数を渡す必要がない限り、この種のことを行うにははるかに優れた方法のようです。
他の人がこの問題に遭遇した場合に備えて、誰かがそれが機能しない理由を解決できれば明らかに良いでしょう

4

3 に答える 3

2

これを交換

  Intent passIntent = new Intent();
  passIntent.putExtra("phoneNum", phoneNum1);  

  Intent passIntent = new Intent(Activity1.this,Activity2.class);
  passIntent.putExtra("phoneNum", phoneNum1);
  startActivity(passIntent);

Activity2 に入るには:

conPhoneNumクラスメンバーとして宣言する

  String conPhoneNum ;

onCreate

  conPhnoneNum = getIntent().getExtras().getString("phoneNum");

それで

  Toast toast= Toast.makeText(this, conPhoneNumber, Toast.LENGTH_SHORT);
于 2013-07-31T14:24:55.577 に答える
0

これを動かして

String conPhoneNum = getIntent().getExtras().getString("phoneNum");

onCreate()または少なくとも初期化

String conPhoneNum; 


@SuppressLint("CutPasteId")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

conPhoneNum = getIntent().getExtras().getString("phoneNum");  // here

ActionBar actionBar = getActionBa

getIntent()nullが作成される前に返されるActivityため、前に呼び出してはいけません。

于 2013-07-31T14:23:23.307 に答える
0

最初のアクティビティで:

Intent passIntent = new Intent();
passIntent.putExtra("phoneNum", phoneNum1);
startActivity(intent)

2 番目のアクティビティでは、次のようになります。

super.onCreate(savedInstanceState);
//this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
String conPhoneNum = getIntent().getExtras().getString("phoneNum");
于 2013-07-31T14:24:30.183 に答える