2012-04-24 2 views
0

Android가 처음인데 한 활동에서 다른 활동으로 두 개의 double을 전달하려고합니다. 이 질문은 여러 다른 방법으로이 사이트에서 여러 번 여러 번 질문을 받았지만 구현 방법에 따라 앱이 강제 종료됩니다. 내 문제는 변수를 전달하려고하는 활동 내 "savedInstanceState"번들로있을 수 있습니다 생각합니다. 분명히 많은 코드를 생략했지만 번들이 사용되는 모든 장소가 포함되었습니다.Android - 인 텐트를 사용하여 활동 간 문제 전달 변수

[편집] - 내가해야 할 일에 대해 잘못된 프로그래밍 솔루션을 발견했습니다. 나는 public static 변수를받는 클래스에 넣고, 보내는 클래스에서 그것들에 접근한다. 나는 이것이 나쁜 프로그래밍이라는 것을 알고 있지만, 나는 그것이 원하는 것을 해낸다. 도움을 주려고하는 모든 사람들에게 감사드립니다. 나는 이것을 올바른 방법으로 계속하려고 노력할 것입니다.

i.putExtra 행과 번들 Ext를 포함하는 모든 행이 없으면 정상적으로 작동합니다.

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

+0

@raju가 맞습니다. 정확한 제안이 필요하면 logcat 추적을 포함시켜야합니다. – Femi

+0

float를 전달하고 정수를 검색하는 것이 맞습니까? – GAMA

답변

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

나는 이것을했으나 여전히 강제로 닫혔다. 나는 한 번에 한 줄씩 추가하고 나서 그것을 실행하려고 시도했다. 그리고 번들을 만들고 변수를 추가 할 수 있다는 것을 발견했다.하지만 i.putExtras (번들)를 추가하면 강제로 닫힌다. 그게 왜 문제를 일으키는 지 아십니까? – Elliott

+0

그러면 logcat 항목을 여기에 게시하면 더 좋습니다. 그것은 우리에게 오류의 위치에 대한 단서를 줄 수 있습니다. 어쨌든 logcat에 어떤 오류가 있습니까? 널 포인터 ?? – drulabs

+0

예 sir/mam, 실제로 널 포인터입니다. 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

0

(가) 괜찮 은데, 당신이 문제는 다른 곳이다. 키와 값은 당신이 정말로 그들은 당신이하지 oncreate에서 우선은이 onActivityResult을 무시할 수 onActivityResult에 번들을 받고 시도 .SO startActivityforresult를 호출

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

생각 무엇을 확인하기 위해 의도를 설정하기 전에 인쇄를 추가하십시오

  • 나는 이것이 새로운 변수에 값을 가져올 this.you를 사용하여 번들을 얻는 것이 좋습니다 문제라고 생각합니다.
관련 문제