마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

List<> 값을 toString 할 때,

0 추천

 

public class MainActivity extends AppCompatActivity {

    private EditText editText;
    private Button button;
    private RecyclerView recyclerView;

    private ArrayList<String> arrayList;

    private AdapterActivity adt;
    private List<List_Data> list;
    private List_Data list_data;
    private LinearLayoutManager layoutManager;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(activity_main);

        editText = (EditText)findViewById(R.id.editText);
        button = (Button)findViewById(R.id.button);
        recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

        list = new ArrayList<>();
        arrayList = new ArrayList<>();

        adt = new AdapterActivity(this, list, R.layout.chat_room_list);
        layoutManager = new LinearLayoutManager(MainActivity.this);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setFocusable(false);

        recyclerView.setAdapter(adt);


        try
        {
            SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);

            int size = sharedPreferences.getInt("size", 0);

            for(int i = 0; i<size; i++)
            {
                list_data = new List_Data(sharedPreferences.getString("num"+i, null));

                list.add(list_data);

                Log.i("List-size", String.valueOf(list.size()));
                Log.i("List-text", String.valueOf(list_data));

                adt.notifyDataSetChanged();

            }
        }
        catch(Exception e)
        {
            Log.i("ERROR", e.toString());
        }


        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String text = editText.getText().toString();

                list_data = new List_Data(text);

                list.add(list_data);
                arrayList.add(text);

                adt.notifyDataSetChanged();
            }
        });
    }

    public String toString()
    {
        Log.i("toString", "Start");

        return list.toString();
    }

    public void onPause()
    {

        super.onPause();

        String text = "";

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
        SharedPreferences.Editor editor = sharedPreferences.edit();

        editor.putInt("size", list.size());

        for(int i = 0; i<list.size(); i++)
        {
            editor.putString("num"+i, list.get(i).toString());
        }

        Log.i("arrayList-size2", String.valueOf(list.size()));
        Log.i("List-text2", String.valueOf(list));


        editor.commit();

    }
}

 

객체에 담긴 값을 toString하면 저장된 본래의 값이 아니라 com.foo.MyType@2f92e0f4  이런식으로  

출력이 되는데 검색해보니 이를 막으려면 toString을 override 해줘여 한다던데요 위 코드에서와 같이 toString() 메소드 안에 Log를 찍어보았는데, 실행이 안되고 있습니다..;

 

어떻게하면 toString을 오버라이딩 해줘서 List 내에 값을 제대로 받을 수 있을까요???

 

알파고 (4,320 포인트) 님이 2017년 11월 13일 질문

1개의 답변

+1 추천
 
채택된 답변
Java에서는 toString을 override하기 위해서는 List<T>나 ArrayList<T>를 extend하는 클래스를 새로 만들어서 toString을 override해야 합니다.

그게 아니라면 for(T t : ArrayList<T>) 처럼 for, forEach 문을 통해서 내부 요소들을 각각 .toString하는 방법이 있겠죠
minor (13,710 포인트) 님이 2017년 11월 14일 답변
알파고님이 2017년 11월 14일 채택됨
헤매다가 답변 해주신 것 보고선 제가 구현한 List <List_Data> 가 생각나서

List_Data 클래스 안에다가 toString을 만들어줬더니 제대로 작동하네요!

답변 감사드립니다.
...