我已经使用volley实现了对JSON数据的网络调用。起初它工作正常,但现在重复列表中的数据项。在第七个列表项之后重复这些项目。如何解决错误?
ListView数据
的Item1 项目2 .. Item7 项目1 项目2 ....
它不断重复JSON数组的大小
JsonObjectRequest jo = new JsonObjectRequest(Request.Method.GET, url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
pDialog.dismiss();
pDialog = null;
try {
JSONArray ja = jsonObject.getJSONArray("resultset"); // id, title, content, guid
for (int i = 0; i < ja.length(); i++) {
JSONObject jo = ja.getJSONObject(i);
SearchListItem ri = new SearchListItem();
ri.setId(jo.getInt("id"));
ri.setTitle(jo.getString("title"));
ri.setContent(jo.getString("content"));
listy.add(ri);
}
} catch (JSONException ex) {
Toast.makeText(getApplicationContext(), "json ex" + ex.getMessage(), Toast.LENGTH_SHORT).show();
ex.printStackTrace();
}
searchAdapter.notifyDataSetChanged();
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
pDialog.dismiss();
pDialog = null;
Log.d(TAG, "!!!! ERROR " + volleyError.getMessage());
}
});
//Toast.makeText(ListActivity.this, jo.toString().toCharArray(), Toast.LENGTH_SHORT).show();
AppController.getInstance().addToRequestQueue(jo);
//适配器
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.o.R;
import com.o.SearchListItem;
import java.util.List;
public class SearchListAdapter extends BaseAdapter {
Context context;
List<SearchListItem> items;
//ImageLoader imageLoader = AppController.getInstance().getImageLoader();
public SearchListAdapter(Context context, List<SearchListItem> items)
{
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return items.indexOf(getItem(position));
}
class ViewHolder
{
TextView txtTitle;
TextView txtContent;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);// creates the objects of all views
if(convertView == null)
{
convertView = inflater.inflate(R.layout.style_row, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView.findViewById(R.id.txtAbout);
holder.txtContent = (TextView) convertView.findViewById(R.id.txtDetail);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
try {
SearchListItem rowItem = (SearchListItem) getItem(position);
holder.txtTitle.setText(rowItem.getTitle());
holder.txtContent.setText(rowItem.getContent().substring(0,20));
}
catch (Exception e){
//Toast.makeText(SearchListAdapter.this,e.printStackTrace(),Toast.LENGTH_SHORT).show();
}
return convertView;
}
}
答案 0 :(得分:1)
您尚未在视图上设置标记,请执行convertview.setTag(holder)...
if(convertView == null)
{
convertView = inflater.inflate(R.layout.style_row, null);
holder = new ViewHolder();
holder.txtTitle = (TextView) convertView.findViewById(R.id.txtAbout);
holder.txtContent = (TextView) convertView.findViewById(R.id.txtDetail);
convertView.setTag(holder)
}
您的代码似乎很好,问题可能是您在服务器上的代码中多次请求并且ArrayList listy 在jsonRequest的onResponse方法中多次填充,或者您的服务器可能返回多个条目,发布的代码似乎没有错。