2012-04-24 77 views
0

我是Android新手,我只是想將兩個雙打從一個活動傳遞給另一個活動。這個問題已經以幾種不同的方式在這個網站上被問過幾次,但是關於我的實現的一些事情正在導致我的應用程序強制關閉。我認爲我的問題可能與我試圖傳遞變量的活動中的「savedInstanceState」捆綁包有關。我顯然忽略了很多代碼,但是我包含了使用Bundle的所有地方。Android-使用意圖在活動之間傳遞變量時遇到問題

[編輯] - 我發現一個糟糕的編程解決方案,我需要做的事情。我將公共靜態變量放在接收類中,並從發送類訪問它們。我意識到這是不好的編程,但它做我想要的。感謝所有試圖幫助的人。我將繼續努力以正確的方式做到這一點。

沒有i.putExtra行和涉及Bundle額外的任何行,它工作正常。下面的代碼:

int lat = 0; 
int lon = 0; 
private void createNote() { 
    Intent i = new Intent(this, NoteEdit.class); 
    i.putExtra("lat", lat); 
    i.putExtra("lon", lon); 
    startActivityForResult(i, ACTIVITY_CREATE); 
} 

這是我給他們的活動:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle extra = getIntent().getExtras(); 
    int lat = extra.getInt("lat"); 
    int lon = extra.getInt("lon"); 

mRowId = (savedInstanceState == null) ? null : (Long) savedInstanceState.getSerializable(NotesDbAdapter.KEY_ROWID); 
    if (mRowId == null) { 
     Bundle extras = getIntent().getExtras(); 
     mRowId = extras != null ? extras.getLong(NotesDbAdapter.KEY_ROWID) : null; 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    saveState(); 
    outState.putSerializable(NotesDbAdapter.KEY_ROWID, mRowId); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    saveState(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    populateFields(); 
} 

private void saveState() { 
    String title = mTitleText.getText().toString(); 
    String body = mBodyText.getText().toString(); 
    String lattitude = mLatText.getText().toString(); 
    String longitude = mLonText.getText().toString(); 
    String date = mDateText.getText().toString(); 
    String time = mTimeText.getText().toString(); 

    if (mRowId == null) { 
     long id = mDbHelper.createNote(title, body, lattitude, longitude, date, time); 
     if (id > 0) { 
      mRowId = id; 
     } 
    } else { 
     mDbHelper.updateNote(mRowId, title, body, lattitude, longitude, date, time); 
    } 
} 
+1

什麼錯誤是你的應用程序獲得強制關閉......以及在哪一行? – 5hssba 2012-04-24 05:20:45

+0

@raju是對的:如果你想要任何準確的建議,你必須包含一個logcat跟蹤。 – Femi 2012-04-24 05:34:11

+0

你確定你傳遞一個float並檢索一個整數是正確的嗎? – GAMA 2012-04-24 06:54:33

回答

0

這是你應該如何傳遞值。

Bundle bundle = new Bundle(); 
bundle.putString("str1", str1); 
bundle.putInt("int1", int1); 
bundle.putDouble("double1", double1); 
Intent i = new Intent(this, Activity2.class); 
i.putExtras(bundle); 
startActivityForResult(i); 

這是你如何讓他們在接下來的活動

int int1 = getIntent().getExtras().getInt("int1") 
String str1 = getIntent().getExtras().getString("str1") 
double double1 = getIntent().getExtras().getDouble("double1") 

這是否清楚你的疑惑?

+0

我這樣做了,但仍然強制關閉。我試着每次添加一行然後運行它,並且我發現我可以創建一個Bundle並向它添加變量,但是當我添加i.putExtras(bundle)時,它強制關閉。你有什麼想法,爲什麼會導致問題? – Elliott 2012-04-24 06:45:42

+0

然後我認爲如果你在這裏發佈logcat條目會更好。這可能會讓我們知道錯誤的來源。 logcat顯示什麼錯誤?空指針? – drulabs 2012-04-24 08:21:12

+0

是的先生/女士,它實際上是一個空指針。 04-24 15:57:32.162:E/AndroidRuntime(631):java.lang.RuntimeException:無法啓動活動ComponentInfo {com.meh.tabbedlayout/com.meh.tabbedlayout.NoteEdit}:android.database.CursorIndexOutOfBoundsException :索引0請求,大小爲0 – Elliott 2012-04-24 15:58:16

0

的看起來不錯,你的問題是什麼地方別的。 嘗試設置的意圖之前添加打印,以確保您的關鍵和價值是什麼,你真的認爲他們是

0
int name = getIntent().getExtras().getInt(key); 

要調用startActivityforresult。所以儘量讓捆在onActivityResultoncreate。您可以覆蓋這個onActivityResult

  • 我認爲這是問題嘗試使用this.you獲取捆綁將獲得這個新變量的值。
相關問題