我想提出一个观点:
为了控制它,我在我的班级变量中制作了JSON,这是我的活动:
public class KategoriNomorPolis extends ListActivity{
ListView lv_epolicy;
ArrayAdapter<String> adapter;
List<String> list = new ArrayList<String>();
String[][] c = new String[10][10];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.epolicy_list_polis);
adapter=new ArrayAdapter<String>(this,R.layout.list_item);
kategori_epolicy();
}
private void kategori_epolicy(){
String result=ListPolis.json_kategori;
JSONArray array=null;
try{
array= new JSONArray(result);
for (int i=0;i<array.length();i++){
JSONObject object = array.getJSONObject(i);
c[i][0] = object.getString("id_kategori");
c[i][1] = object.getString("kategori");
// adapter.insert(object.getString("kategori"), i);
System.out.println("yuhuuu");
}
lv_epolicy=(ListView)findViewById(android.R.id.list);
KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, array);
lv_epolicy.setAdapter(adapter);
lv_epolicy.setCacheColorHint(Color.TRANSPARENT);
}catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
我不知道为什么我的适配器没有显示任何内容,我已经使用lv_epolicy=(ListView)findViewById(android.R.id.list);
声明了我的列表视图,没有任何反应,这是我的KategoriEpolicyAdapter:
public class KategoriEpolicyAdapter extends BaseAdapter{
Context context;
JSONArray array;
int count;
public KategoriEpolicyAdapter(Context context, JSONArray array){
this.context = context;
this.array = array;
this.count = array.length();
}
public int getCount() {
// TODO Auto-generated method stub
return count;
}
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
public View getView(int position, View contentView, ViewGroup arg2) {
// TODO Auto-generated method stub
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
contentView = inflater.inflate(R.layout.epolicy_kategori, null);
ImageView img_epolicy = (ImageView)contentView.findViewById(R.id.img_epolicy);
TextView text_kategori = (TextView)contentView.findViewById(R.id.text_kategori);
String result=ListPolis.json_kategori;
try {
JSONObject object = array.getJSONObject(position);
text_kategori.setText(object.getString("kategori"));
System.out.println("bisa ga ya? ");
switch(position){
case 0:
img_epolicy.setImageResource(R.drawable.pp_icon);
break;
case 1:
img_epolicy.setImageResource(R.drawable.tertanggung_icon);
break;
case 2:
img_epolicy.setImageResource(R.drawable.dataasuransi_icon);
break;
case 3:
img_epolicy.setImageResource(R.drawable.manfaat_icon);
break;
case 4:
img_epolicy.setImageResource(R.drawable.inventaris_icon);
break;
case 5:
img_epolicy.setImageResource(R.drawable.status_icon);
break;
case 6:
img_epolicy.setImageResource(R.drawable.rekening_icon);
break;
}
} catch (Exception e) {
// TODO: handle exception
}
return contentView;
}
我希望有人可以告诉我,我的错是什么......
答案 0 :(得分:1)
您正在添加json数组的数组。不要添加json数组,在列表中添加内容并添加列表代替数组。
KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, array);
看起来应该是这样的:
KategoriEpolicyAdapter adapter = new KategoriEpolicyAdapter(KategoriNomorPolis.this, list);
最好看看这个适配器
公共类TestListAdapter扩展了ArrayAdapter {
private LayoutInflater mInflater=null;
private HttpImageManager mHttpImageManager=null;
private ArrayList<SeedObject> listData=null;
public TestListAdapter(Activity context,ArrayList<SeedObject> list, List<Uri> uris) {
super(context, 0, uris);
mInflater = context.getLayoutInflater();
this.listData=list;
mHttpImageManager = ((TestApplication) context.getApplication()).getHttpImageManager();
}
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null || convertView.getTag() == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.custom_row, null);
holder.url = (TextView) convertView.findViewById(R.id.text_List);
holder.city = (TextView) convertView.findViewById(R.id.text_city);
holder.image = (ImageView) convertView.findViewById(R.id.image_List);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
final Uri uri = getItem(position);
ImageView imageView = holder.image;
if(uri != null){
Bitmap bitmap = mHttpImageManager.loadImage(new HttpImageManager.LoadRequest(uri, imageView));
if (bitmap != null) {
// image download now compress and set on Image view
bitmap = Bitmap.createScaledBitmap(bitmap, 60, 60, true);
imageView.setImageBitmap(bitmap);
}
else if(position %2== 0){
imageView.setImageResource(R.drawable.greenseed_new);
}
else{
imageView.setImageResource(R.drawable.grayseed_new);
}
}
//set the seed name
holder.url.setText(listData.get(position).getTitle());
String distance =listData.get(position).getDistance();
return convertView;
}
private static class ViewHolder {
ImageView image;
TextView city;
TextView url;
}
}
答案 1 :(得分:0)
两件事。
首先,你有没有理由使用JSONArray和JSONObject?虽然我不是百分之百确定这一点,但我认为你不能用JSONArray支持你的适配器。我认为BaseAdapter只接受常规Java数组或List对象(或List的子类之一)。如果不需要,最好不要使用JSON对象。如果您确实需要使用JSONArray,请查看this link。它将向您展示如何将JSONArray解析为可在适配器中使用的Java数组。
其次,我认为覆盖getView()
方法中的try / catch块可能是另一个问题。你有它捕获所有异常,但它没有输出任何东西让你知道如果抛出一个异常。因此,您的代码可能无法在被覆盖的getView()
中正确执行。将System.out.println()
和printStackTrace()
添加到catch代码块,再次运行代码,看看它是否打印出来。
答案 2 :(得分:0)
首先,通过调试检查您的数组是否为null。
然后,您可以尝试实现适配器的getItem()
方法。
public Object getItem(int index) {
return array.get(index);
}
在getView()
方法上,不要直接从数组中获取jsonObject。使用getItem()
方法。
顺便说一下,你实现的适配器会占用太多内存。你必须小心getView方法。如果它不为空,请尝试使用contentView
。