2012-08-27 8 views
0

두 개의 활동 A와 B가 있습니다.공유 환경 설정 검색

B : 공유 환경 설정에서 모든 설정을 저장하는 설정 활동입니다.

A는 : 주요 활동 내가 B 활동

사용자가 처음으로 응용 프로그램을 사용하고 가까이 강제 A 활동을 시작하면 문제가에 저장된 공유 환경 설정을 검색 할 수 있습니다.

나는 ... 아직 저장 공유 된 환경 설정이 없기 때문에 생각한다

는 A 활동

public class DawaaActivity extends ListActivity implements View.OnClickListener { 

Button add; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
SharedPreferences emportPref = getSharedPreferences("dawaaData",MODE_PRIVATE); 
if (emportPref.getInt("exists", 0) == 1){ 
String dawaaList[] = {emportPref.getString("subject", null)}; 
setListAdapter(new ArrayAdapter<String>(DawaaActivity.this, 
android.R.layout.simple_list_item_1,dawaaList)); 
} 
initialaiz(); 
} 

private void initialaiz() { 

add = (Button) findViewById(R.id.button3); 
add.setOnClickListener(this); 
} 

public void onClick(View v) { 

Intent data = new Intent(DawaaActivity.this,SettingActivity.class); 
startActivity(data); 
} 
} 

는 B 활동

public class SettingActivity extends Activity implements View.OnClickListener { 
EditText et; 
EditText et1; 
Spinner list; 
TimePicker startTime; 
Button save; 
Button cancel; 
private SharedPreferences exportPref; 

protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.setting); 
initialaiz(); 
} 
private void initialaiz() { 

et = (EditText) findViewById(R.id.text); 
et1 = (EditText) findViewById(R.id.text1); 
list = (Spinner) findViewById(R.id.spinner); 
startTime = (TimePicker) findViewById(R.id.timePicker); 
save = (Button) findViewById(R.id.save); 
cancel = (Button) findViewById(R.id.cancel); 
save.setOnClickListener(this); 
cancel.setOnClickListener(this); 
} 
public void onClick(View v) { 

switch(v.getId()){ 
case R.id.save: 
save(); 
Intent transferData = new Intent(SettingActivity.this,DawaaActivity.class); 
startActivity(transferData); 
break; 
case R.id.cancel: 
finish(); 
break; 
} 
} 
private void save() { 

exportPref = getSharedPreferences("dawaaData",MODE_PRIVATE); 
SharedPreferences.Editor editor = exportPref.edit(); 
editor.putString("subject", et.getText().toString()); 
editor.putString("dosesC", et1.getText().toString()); 
editor.putString("doses", list.getSelectedItem().toString()); 
editor.putInt("hour", startTime.getCurrentHour()); 
editor.putInt("minute", startTime.getCurrentMinute()); 
editor.putInt("exists", 1); 
editor.commit(); 
Toast.makeText(SettingActivity.this,"data has been saved" ,Toast.LENGTH_SHORT).show(); 
} 

} 

나는이 문제를 해결할 수있는 방법? ??

편집 :

내가 내 레이아웃

에있는 ListView를 추가하고이 같은 클래스 편집 :

public class DawaaActivity extends Activity implements View.OnClickListener { 

ListView myList; 
SharedPreferences emportPref = getSharedPreferences("dawaaData",MODE_PRIVATE); 
String dawaaList[] = {emportPref.getString("subject", "no data yet")}; 
myList = (ListView) findViewById(R.id.ListView); 
myList.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, dawaaList)); 

을이이 로그 캣입니다 :

08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.os.Looper.loop(Looper.java:123) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-28 14:56:41.112: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-28 14:56:41.112: E/AndroidRuntime(273): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-28 14:56:41.112: E/AndroidRuntime(273): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.os.Handler.dispatchMessage(Handler.java:99) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.os.Looper.loop(Looper.java:123) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread.main(ActivityThread.java:4627) 
08-28 14:59:54.272: E/AndroidRuntime(303): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
08-28 14:59:54.272: E/AndroidRuntime(303): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:146) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.Instrumentation.newActivity(Instrumentation.java:1021) 
08-28 14:59:54.272: E/AndroidRuntime(303): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577) 
08-28 15:02:26.632: E/AndroidRuntime(331): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585) 

08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) :에서 ndroid.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 08- 28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android .os.Handler.dispatchMessage (Handler.java:99) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.os.Looper.loop (Looper.java:123) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.app.ActivityThread.main (ActivityThread.java:4627) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : com.android.internal에서 .os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : com.android.intern al.os.ZygoteInit.main (ZygoteInit.java:626) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.content.ContextWrapper.getSharedPreferences (ContextWrapper.java:146) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.app.Instrumentation.newActivity (Instrumentation.java:1021) 08-28 15 : 02 : 26.632 : E/AndroidRuntime (331) : android.app. ActivityThread.performLaunchActivity (ActivityThread.java:2577)

+4

logcat 오류를 게시 하시겠습니까? –

답변

2

문제는 아마 여기에 있습니다 :

String dawaaList[] = {emportPref.getString("subject", null)}; 
setListAdapter(new ArrayAdapter<String>(DawaaActivity.this, 
android.R.layout.simple_list_item_1, dawaaList)); 

당신은 어떤 대상이없는 경우 null을 취득한 다음 어딘가에서 nullpointer를 얻습니다.

if (dawaaList[] == null) { 
    new String[]{"No subjects"}; 
} 

하고, 도움을 요청 로그 캣을 게시하시기 바랍니다 :

이 같은 경우는 null를 널 (null)를 확인하거나 뭔가를 초기화하려고합니다.

편집 :

귀하는이 방법으로 처리 할 수 ​​있습니다

그냥 레이아웃

<ListView 
     android:id="@+id/myListView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     /> 

에있는 ListView를 추가하고 활동에 채 웁니다을

setContentView(R.layout.main); 
    ListView listView = (ListView) findViewById(R.id.myListView); 
    SharedPreferences pref = getSharedPreferences("dawaaData", MODE_PRIVATE); 
    String items = pref.getString("subject", "item1,item2,item3"); 
    String[] listItems = items.split(","); 
    listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, listItems)); 

구분 기호로 쉼표를 선택했습니다. SharedPreferences는 배열을 저장할 수 없습니다. Set 및 pref.getStringSet (api 11에서)을 사용하거나 목록을 직렬화해야합니다 (json o anything).

+0

A 버튼 레이아웃을 추가하고 A 액티비티에서 ListActivity의 public 클래스를 확장합니다. DawaaActivity extends ListActivity는 View.OnClickListener { '를 구현하지만 사용하지 않고 A 레이아웃의 공유 환경 설정 내용을 어떻게 표시 할 수 있습니까? ListActivity –

+0

ListActivity를 사용하는 대신 일반 Activity 내에서 ListView를 사용할 수 있습니다. :) – Enrichman

+0

나에게 그 일을 보여주는 예를 줄 수 있겠습니까? –

0

처음으로 값을 초기화하지 않았기 때문에 App A가 닫힙니다. 가장 간단한 방법은 (의 Throwable t) 시도 캐치로 된 SharedPreferences의 값을 읽을 수있는 코드를 래핑하는 것입니다

0

이 두 가지 기능이 문제를 해결할 수는, 먼저 하나는 당신이 값을

public void saveSharedPreference() { 
     SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", 
       MODE_WORLD_READABLE); 
     SharedPreferences.Editor prefsEditor = myPrefs.edit(); 
     prefsEditor.putString(stringname, stringvalue); 
     prefsEditor.commit(); 
    } 

그리고 당신의 B의 활동을 저장할 클래스 A, 검색 CAL해야합니다 환경 설정을 저장하는 것입니다, 당신은해야 LoadPreferences 함수 호출

private void LoadPreferences() { 
     SharedPreferences sharedPreferences = this.getSharedPreferences(
       "myPrefs", MODE_WORLD_READABLE); 
     String yourvariable= sharedPreferences.getString(name, "0"); // it will take 0 as default value if variable is empty and you can set you own default value } 
+0

이 부분에서 OP가 잘못되어 있지 않기 때문에 문제가 해결되지 않습니다. – nkr