findViewById()为ListView返回null

时间:2018-01-25 22:47:16

标签: android listview

我在网上看过几个例子,但是在将数据发送到ListView时仍然存在一些问题。

这是使用JSON数据创建的HashMap

HashMap<String, String> googleRestaurantAPI = new HashMap<String, String>();
googleRestaurantAPI.put("place_name", placeName);
googleRestaurantAPI.put("vicinity", address);

这是我的Adapter

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

import com.foodapp.foodapp.R;

import java.util.ArrayList;
import java.util.Map;

public class MyAdapter extends BaseAdapter {
    private final ArrayList mData;

    public MyAdapter(Map<String, String>map){
        mData = new ArrayList();
        mData.addAll(map.values());
    }
    @Override
    public int getCount(){
        return mData.size();
    }
    @Override
    public Map.Entry<String, String> getItem(int position){
        return (Map.Entry) mData.get(position);
    }
    @Override
    public long getItemId(int position){
        return 0;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final View result;
        if (convertView == null) {
            result = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_list, parent, false);
        } else {
            result = convertView;
        }

        Map.Entry<String, String> item = getItem(position);
        ((TextView) result.findViewById(android.R.id.text1)).setText(item.getKey());
        ((TextView) result.findViewById(android.R.id.text2)).setText(item.getValue());
        return result;
    }
}

在我的布局XML中,我有:

    <TextView
        android:id="@android:id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

主要代码:

mListView = (ListView) findViewById(R.id.list);

MyAdapter adapter = new MyAdapter(googleRestaurantAPI);                
mListView.setAdapter(adapter);

当我设置Adapter时,它会显示ListView为空的错误,即使它是从JSON打印数据。可能是什么问题?

2 个答案:

答案 0 :(得分:0)

MapHashMap是不同的类型。你可以尝试一下

public MyAdapter(HashMap<String, String>map){
    mData = new ArrayList();
    mData.addAll(map.values());
}

ArrayList<HashMap<String, String>> mData;

答案 1 :(得分:0)

 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapte‌​‌​r)' on a null object reference

这意味着mListView为空。您尚未正确初始化mListView

  

我做到了。 mListView = (ListView) findViewById(R.id.list);

这与您的XML不符。要么改变:

  • android:id="@android:id/list"android:id="@+id/list"(推荐)
  • findViewById(R.id.list)findViewById(android.R.id.list)(不推荐)