我在网上看过几个例子,但是在将数据发送到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打印数据。可能是什么问题?
答案 0 :(得分:0)
Map
和HashMap
是不同的类型。你可以尝试一下
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.ListAdapter)' 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)
(不推荐)