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

firebase를 이용해서 image listview 를 하고싶습니다.

0 추천

main 액티비티

public class MainActivity extends AppCompatActivity {

    ListView listView;
    FirebaseDatabase database;
    DatabaseReference ref;
    ArrayList<String> list;
    ArrayAdapter<String> adapter,adapter2;
    SpringAdapter adapter3;
    Spring spring;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spring = new Spring();
        listView = (ListView)findViewById(R.id.listview);
        database = FirebaseDatabase.getInstance();
        ref = database.getReference("Spring");
        list = new ArrayList<>();
        adapter3 = new SpringAdapter(this, R.layout.layout,list);
       // adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);

        listView.setAdapter(adapter3);

        ValueEventListener eventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot ds: dataSnapshot.getChildren()){
                    String lip = ds.child("Lip").getValue(String.class);
                    list.add(lip);
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        };
        ref.addListenerForSingleValueEvent(eventListener);
    }
리스트 갖고오는 java 
public class Spring {

    private String Lip;

    public Spring() {
    }

    public Spring(String lip) {
        this.Lip = lip;
    }

    public String getLip() {
        return Lip;
    }

    public void setLip(String lip) {
        Lip = lip;
    }
 
어뎁터
public class SpringAdapter extends BaseAdapter {

    private LayoutInflater inflater;
    private ArrayList<Spring> springs = null;
    private  int layout;
    Context context;

    public SpringAdapter(Context context, int layout, ArrayList<String> list) {
        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.layout = layout;
        this.springs = springs;
    }

    @Override
    public int getCount() {
        return springs.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){
            convertView = inflater.inflate(layout,parent,false);
        }

        Spring spring = springs.get(position);
        ImageView imageView = (ImageView)convertView.findViewById(R.id.img);
        Picasso.with(context).load(springs.get(position).getLip()).into(imageView);

        return convertView;
}
 
어뎁터 getcount() 부분에서
Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference 
에러가 납니다.. 해결방안이 있을까요
 
kimHyun (120 포인트) 님이 2018년 6월 7일 질문

1개의 답변

0 추천

어댑터 부분의 리스트 null 초기화부분 때문이 아닐까요? 초기화하신 이유가 리스트내에 쓰레기값을 없애기 위함이신거 같은데 어댑터는 연결역할을 하는것인데 초기화를 하는게 이상한듯 싶네요. 리스트 쓰레기값을 없애기 위한 부분은 액티비티내에서 list.add 이전에 list.clear()메소드를 쓰시면 될것같네요. 도움이 되길 바랍니다 화이팅!

idontknow (6,380 포인트) 님이 2018년 6월 12일 답변
idontknow님이 2018년 6월 12일 수정
...