Listview只检索一行

时间:2013-07-08 06:38:16

标签: android android-listview

我有一个关于ListView的问题:它应该显示5行,但它只检索一行。

ListView已在活动的onCreate方法(doveDormire = (ListView)findViewById(R.id.listadovedormire))中声明。 这是我为listview设置适配器的方法:

public void caricaListView() {

    url="***";


    final ArrayAdapter<TutteRicettiveClasse> adapter = new TutteRicettiveVicineAdapterWithImage(
            this);

    Myonclicklistneer myclickListener = new Myonclicklistneer();


    doveDormire.setAdapter(adapter);

    new DownloadTutteRicettiveVicineAsyncTask(adapter, url, this).execute();
    doveDormire.setOnItemClickListener(myclickListener);
}

TutteRicettiveClasse:

public class TutteRicettiveClasse extends StrutturaClasse{

}

StrutturaClasse:

public class StrutturaClasse {
private String nome;

private String immagine;

private String indirizzo;

private String numerocivico;

private String comune;

private String cap;

private String latitudine;

private String longitudine;

private Double distanza;

private String ID;

private String ServiziOfferti;

private String Feature;

public Double getDistanza() {
    return distanza;
}

public void setDistanza(Double distanza) {
    this.distanza = distanza;
}

public String getLatitudine() {
    return latitudine;
}

public void setLatitudine(String latitudine) {
    this.latitudine = latitudine;
}

public String getLongitudine() {
    return longitudine;
}

public void setLongitudine(String longtitudine) {
    this.longitudine = longtitudine;
}

public String getComune() {
    return comune;
}

public void setComune(String comune) {
    this.comune = comune;
}

public String getCap() {
    return cap;
}

public void setCap(String cap) {
    this.cap = cap;
}

public String getNumerocivico() {
    return numerocivico;
}

public void setNumerocivico(String numerocivico) {
    this.numerocivico = numerocivico;
}

public String getIndirizzo() {
    return indirizzo;
}

public void setIndirizzo(String indirizzo) {
    this.indirizzo = indirizzo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getImmagine() {
    return immagine;
}

public void setImmagine(String immagine) {
    this.immagine = immagine;
}

public String getID() {
    return ID;
}

public void setID(String iD) {
    ID = iD;
}

public String getServiziOfferti() {
    return ServiziOfferti;
}

public void setServiziOfferti(String serviziOfferti) {
    ServiziOfferti = serviziOfferti;
}

public String getFeature() {
    return Feature;
}

public void setFeature(String feature) {
    Feature = feature;
}

}

这是AsyncTask:

public final class DownloadTutteRicettiveVicineAsyncTask extends
    AsyncTask<Void, TutteRicettiveClasse, Void> {

private final ArrayAdapter<TutteRicettiveClasse> adapter;

String url;
Context ctx;
private ProgressDialog progressDialog;

public DownloadTutteRicettiveVicineAsyncTask(
        ArrayAdapter<TutteRicettiveClasse> adapter, String url, Context ctx) {
    this.adapter = adapter;
    this.url = url;
    progressDialog = new ProgressDialog(ctx);
}

@Override
protected void onPreExecute() {
    super.onPreExecute();
    progressDialog.setMessage(progressDialog.getContext().getString(
            R.string.attendereprego));
    progressDialog.setCancelable(true);

    progressDialog.show();
}

@Override
protected Void doInBackground(Void... params) {

    try {

        JSONObject obj = getJSONObject(url);
        JSONArray jsonArray = obj.getJSONArray("struttura");
        latitudini = new ArrayList<String>();
        longitudini = new ArrayList<String>();
        nomi = new ArrayList<String>();
        immagini = new ArrayList<String>();
        indirizzi = new ArrayList<String>();
        comuni = new ArrayList<String>();
        idtipologia = new ArrayList<String>();
        idstruttura = new ArrayList<String>();
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            TutteRicettiveClasse t = new TutteRicettiveClasse();
            t.setNome(jsonObject.getString("Nome").replace(
                    "apostrofoandroid", "'"));
            t.setIndirizzo(jsonObject.getString("Indirizzo"));
            t.setNumerocivico(jsonObject.getString("NumeroCivico"));
            t.setComune(jsonObject.getString("Comune"));
            t.setCap(jsonObject.getString("CAP"));
            t.setImmagine(jsonObject.getString("immagine"));
            t.setLatitudine(jsonObject.getString("Latitudine"));
            t.setLongitudine(jsonObject.getString("Longitudine"));
            t.setDistanza(jsonObject.getDouble("distanza"));
            t.setID(jsonObject.getString("ID"));
            t.setFeature(jsonObject.getString("Feature"));

            publishProgress(t);
        }
    } catch (IOException ignored) {
    } catch (JSONException ignored) {
    }
    return null;

}

@Override
protected void onProgressUpdate(TutteRicettiveClasse... values) {
    for (TutteRicettiveClasse a : values) {
        adapter.add(a);
    }

}

@Override
protected void onPostExecute(Void v) {


    progressDialog.hide();
}

private static JSONObject getJSONObject(String url) throws IOException,
        MalformedURLException, JSONException {
    HttpURLConnection conn = (HttpURLConnection) new URL(url)
            .openConnection();

    InputStream in = conn.getInputStream();

    try {
        StringBuilder sb = new StringBuilder();
        BufferedReader r = new BufferedReader(new InputStreamReader(
                new DoneHandlerInputStream(in)));
        for (String line = r.readLine(); line != null; line = r.readLine()) {
            sb.append(line);
        }
        return new JSONObject(sb.toString());
    } finally {
        in.close();
    }
}
}

最后是适配器:

 import com.androidquery.AQuery;
 import android.content.Context;
 import android.graphics.Bitmap;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.widget.ImageView;
 import android.widget.TextView;

 public class TutteRicettiveVicineAdapterWithImage extends
    ArrayAdapter<TutteRicettiveClasse> {

String Feature;

public TutteRicettiveVicineAdapterWithImage(Context context) {
    super(context, R.layout.elementolistastrutture, R.id.nome);
}

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


    AQuery aq = new AQuery(getContext());
    convertView = super.getView(position, convertView, parent);
    TutteRicettiveClasse t = getItem(position);


    TextView nome = (TextView) convertView.findViewById(R.id.nome);
    String Nome = t.getNome();
    nome.setText(Nome);
    TextView indirizzo = (TextView) convertView
            .findViewById(R.id.indirizzo);
    String Indirizzo = t.getIndirizzo();
    String Numerocivico = t.getNumerocivico();
    if (Numerocivico.equals(" ")) {
        indirizzo.setText(Indirizzo);
    } else {
        indirizzo.setText(Indirizzo + ", " + Numerocivico);
    }
    TextView CAP = (TextView) convertView.findViewById(R.id.cap);
    String Cap = t.getCap();
    CAP.setText(Cap);
    TextView Comune = (TextView) convertView.findViewById(R.id.comune);
    String COmune = t.getComune();
    Comune.setText(COmune);

    TextView Distanza = (TextView) convertView.findViewById(R.id.distanza);
    Double DIstanza = t.getDistanza();

    Distanza.setText(DIstanza + " km");

    Feature = t.getFeature();

    ImageView image = (ImageView) convertView.findViewById(R.id.image);
    String url = t.getImmagine();

    Bitmap preset = aq.getCachedImage(url);
    Bitmap placeholder = aq.getCachedImage(R.drawable.cache);

    if (preset == null) {

        if (aq.shouldDelay(position, convertView, parent, url)) {
            aq.id(image).image(placeholder, 0);
        } else {
            aq.id(image).image(url, true, true, 0, 0, placeholder,
                    AQuery.FADE_IN, 0);
        }

    } else {
        image.setImageBitmap(preset);
    }


    return convertView;
}
}

在调试模式下,我注意到适配器不会改变位置的值:

TutteRicettiveClasse t = getItem(position);

位置始终为0.检索到的Json对象是一个包含5个元素的数组,所以我真的不明白为什么它不会改变...

也许这是一个上下文问题?我从一个从异步回调中调用的方法中为ListView设置了适配器。

如果可以,请帮助我:-)提前致谢!

0 个答案:

没有答案