2011-07-05 2 views
2

EditText의 ArrayLists (ArrayOne, ArrayTwo 및 ArrayThree)를 내부 저장소에 저장하려고합니다. 논평대로, 그것은 그것이 저장을 시도하는 것을 분명히 보여 주지만, 나는 그 후에 또 다른 TOAST를 얻지 못한다. "저장 완료"또는 오류가 표시되지 않는 이유에 대한 도움이 필요합니다. 당신이 일반 예외를 잡아 스택 트레이스를 인쇄 출력 할 수있는 단지 디버깅 목적 -Android 내부 개체 저장소

public void save(Context c) 
{ 
    String fileName; 
    Toast.makeText(this, "Attempting Save", Toast.LENGTH_SHORT).show();//THIS SHOWS 
    if(semester.getText().toString().length() == 0) 
    { 
     Toast.makeText(c, "Please enter a filename", Toast.LENGTH_SHORT).show(); 
    } 
    else 
    { 
     fileName = "test.dat"; 
     FileOutputStream fos = null; 
     ObjectOutputStream oos = null; 
     try 
     { 
      fos = this.openFileOutput(fileName, Context.MODE_PRIVATE); 
      oos = new ObjectOutputStream(fos); 
      oos.writeObject(ArrayOne); 
      oos.writeObject(ArrayTwo); 
      oos.writeObject(ArrayThree); 
      Toast.makeText(c, "Save Completed", Toast.LENGTH_SHORT).show(); //THIS NEVER SHOWS 
     } 
     catch (FileNotFoundException e) 
     { 
      Toast.makeText(c, "Could not find " + fileName + " to save.", Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     finally 
     { 
      try 
      { 
       if (oos != null) 
        oos.close(); 
       if (fos != null) 
        fos.close(); 
      } 
      catch (Exception e) 
      { /* do nothing */ } 
     } 
    } 
} 
+0

안녕하세요 당신은 디버깅을 시도 했습니까? "찾을 수 없음"을 표시합니까 ?? – PedroAGSantos

+0

디버깅을 시도했지만 "저장 시도 중"이 아무것도 표시되지 않습니다. 코드가 어디서 나왔는지 모르겠습니다. – Andrew

+0

디버깅을 시도하십시오. 디버그하면 다른 사람의 도움없이이 문제를 해결할 수 있습니다. 그냥 코드가 어디로가는 추적하고 :) 완료 –

답변

2

문제는 글고 클래스는

직렬화되지 않는 것입니다 "Serializable"을 구현하여 EditText에없는 객체로 쓸 수 있습니다.

기본 클래스가 여전히 예외를 throw하기 때문에 클래스를 확장하고 직렬화 가능 태그를 추가 할 수 없습니다.

나는 당신이 자신의 클래스를 통해 데이터를 직렬화하거나 다른 방법으로 무엇을 하려는지 저장하는 것이 좋습니다.

+0

난 EditText의 텍스트를 포함하는 문자열의 ArrayList를 만들 수 ... 문자열은 serializable입니까? 고마워요 – Andrew

+0

@Andrew - 네 기본 형식은 잘 직렬화해야합니다. 문자열을 직렬화 할 수 있습니다. – Idistic

+0

좋아, 어딘가에서 "내 클래스를 통해 데이터를 직렬화하는 방법"을 설명 할 수 있겠습니까? – Andrew

0

나는 오류가 만 FileNotFound 및 IOException가 잡고 있기 때문에 첫 번째 시도 블록에서 섭취 한 존재라고 생각합니다.

가이 도움이된다면 내가 할 것입니다 :

 
java.io.File file = new java.io.File("/sdcard/mystorage/ArrayOne.bin"); 
ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(file))); 
out.writeObject(obj); 
out.close(); 

최저

-serkan

0

아무것도 "저장하려고하면"다음에 표시하지 않는 경우이 블록에 일부 예외를 받고 누구 요

catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

그리고 당신은 어떤 토스트에도 보이지 않습니다. 또한 당신은 당신을 제외하고 아무것도하지 않고 이런 식으로 여기에있을 수 있습니다

catch (Exception e) 
     { /* do nothing */ } 

대신 메시지를 토스트의 .. debbugging에 대한 로그 캣을 사용하려고, 사용하기 쉽고, 또한 당신은 토스트 코드를 삽입 할 필요가 없습니다 귀하의 코드입니다. 어떻게 될지 말해봐. 디버깅과 예외 : IOException을 printStackTrace에에에 중단 점을 넣어 검사가

catch (IOException e 
{ 
    e.printStackTrace(); 
} 

클래스를 사용한다는 것을 당신에게 말할 경우