2013-02-15 6 views
0

다음 작업을 수행해야하는 앱을 만듭니다.
- 시작되었을 때 스플래시/정보 활동이 표시됩니다.
은 - 다음 활동에서 체크 박스와 같은 이름의 목록을 보여줍니다
- 응용 프로그램을 종료하고 다시 열 때, 이전에 추가 된 이름이 저장되고 표시되어야합니다 - 사용자는 글고 치기를 통해 & 추가 버튼을 (리스트가 동적으로 업데이트)
새로운 이름을 추가 할 수 있습니다 목록에.안드로이드, 앱을 다시 열 때 ArrayList 저장

public class StartActivity extends Activity implements OnClickListener { 
Typeface face; 
TextView tvStartIntrotext; 
Button bStartStart; 

ArrayList<String> names = new ArrayList<String>(); 

String NAMESFILE = "names_file"; 
FileOutputStream fos; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.startactivity); 

    face = Typeface.createFromAsset(getAssets(), "andalemono.ttf"); 
    bStartStart = (Button) findViewById(R.id.bStartStart); 
    bStartStart.setTypeface(face); 
    tvStartIntrotext = (TextView) findViewById(R.id.tvStartIntrotext); 
    tvStartIntrotext.setTypeface(face); 
    bStartStart.setOnClickListener(this); 

    try { 
     fos = openFileOutput(NAMESFILE, Context.MODE_PRIVATE); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     names.add("Name Name"); 
     oos.writeObject(names); 
     oos.close(); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.startactivity, menu); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    Intent startIntent = new Intent(StartActivity.this, Choose.class); 
    startActivity(startIntent); 
} 
} 

읽고 지금까지 내 다른 활동이 있습니다 표시하려면 :
내가 저장하고 제대로 내 정보를로드 할 수 있는지 만 확인 설정에 내 startingactivity에서의 ArrayList로 내 목록을 시도했습니다

public class Choose extends Activity implements OnClickListener { 

String NAMESFILE = "names_file"; 
FileInputStream fis; 

Button bChooseChoose, bChooseAdd; 
Typeface face; 
TextView tvChoosePick; 
EditText etChooseAddnew; 
LinearLayout llMain; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    overridePendingTransition(R.anim.slideinright, R.anim.slideoutleft); 
    setContentView(R.layout.choose); 


    face = Typeface.createFromAsset(getAssets(), "andalemono.ttf"); 
    bChooseChoose = (Button) findViewById(R.id.bChooseChoose); 
    bChooseChoose.setTypeface(face); 
    bChooseChoose.setOnClickListener(this); 
    bChooseAdd = (Button) findViewById(R.id.bChooseAdd); 
    bChooseAdd.setTypeface(face); 
    bChooseAdd.setOnClickListener(this); 
    tvChoosePick = (TextView) findViewById(R.id.tvChoosePick); 
    tvChoosePick.setTypeface(face); 
    etChooseAddnew = (EditText) findViewById(R.id.etChooseAddnew); 
    etChooseAddnew.setTypeface(face); 
    etChooseAddnew.setBackgroundResource(R.color.white1); 
    etChooseAddnew.setHintTextColor(color.greytext); 
    llMain = (LinearLayout) findViewById(R.id.llMain); 


    try { 
     fis = openFileInput(NAMESFILE); 
     ObjectInputStream ois = new ObjectInputStream(fis); 
     ArrayList<Object> names = (ArrayList<Object>) ois.readObject();    

     ois.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    for (int i = 0; i < names.size(); i++) { 
     CheckBox cbb = new CheckBox(this); 
     cbb.setText(names.get(i)); 
     cbb.setTypeface(face); 
     cbb.setTextSize(16); 
     llMain.addView(cbb); 
    } 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()){ 
    case R.id.bChooseChoose: 

     break; 
    case R.id.bChooseAdd: 

        /*This button for adding new list name*/ 

     break; 
    } 

    } 
} 

이 시점에서 나는 하나의 오류는 내 for-loop에서 "setText"입니다. 목록에 올바르게 표시되도록 열어 둔 파일로부터 정보를 얻는 방법을 아직 모릅니다. for 루프는 fileInput/Output이 사용되지 않을 때 작동합니다.
안드로이드 프로그래밍에 익숙하지 않기 때문에 제가 시도 할 수있는 어떤 지침이든지 도움이 될 것입니다. :)
Thx!

답변

0

names 변수는 try-catch 블록 내부에 선언 된 변수이므로 외부에서 액세스 할 수 없습니다.

List<Object> names; 
try { 
    fis = openFileInput(NAMESFILE); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    names = (ArrayList<Object>) ois.readObject();    
    ois.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
    names = Collections.emptyList(); 
} 

UPDATE 그리고 문자열이 아닌 cbb.setText(names.get(i))names.get(i) 때문에 당신은 사용할 수 없습니다 : 그냥 블록에서 선언을 이동합니다. 그것은 객체입니다 (문자열을 NAMESFILE에 저장하면 실제로 String이어야합니다).
당신은 문자열에 두 경우 모두가 할 수 있습니다

cbb.setText((String)names.get(i)) 

또는 toString 방법을 사용하여 답변

cbb.setText(names.get(i).toString()) 
+0

감사합니다! 후속 질문 : 내가 처음 변수를 선언 한 이후로 이름 변수에 문제가 있다고 생각합니다. 이것은 내가 다시 생각하는 "이름"을 만들도록 도왔다. 그러나, 두 번째 활동에서 "setText"오류가 남아 있습니다. 이는 출력/입력이 작동하는지 확인하는 나의 방법입니다.). 이것을 확인하는 쉬운 방법이 있습니까? – bakatuna

+0

@bakatuna 정확히 어떤 오류가 발생합니까? –

+0

TextView 유형의 setText (CharSequence) 메소드는 인수 (Object)에 적용 할 수 없습니다 - 메시지입니다. – bakatuna

관련 문제