从在线数据库填写列表视图

问题描述 投票:0回答:4

我是编程的新手,我一直试图让这个工作很长一段时间,但我还没有能够解决它,所以,我想将数据(现在只是名字)从我的在线数据库传输到列表视图并显示它。我已经检查了我的php文件,它工作正常(它返回我想要的名称),代码似乎工作正常,直到我到达Baseadapter部分。

活动VerPostsUsuario

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.github.snowdream.android.widget.SmartImageView;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.AsyncHttpResponseHandler;
import org.json.JSONArray; 
import org.json.JSONException;   
import java.util.ArrayList;  
import cz.msebera.android.httpclient.Header;

public class VerPostsUsuario extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ver_posts_usuario);
    listView=(ListView)findViewById(R.id.listView);
    descargarImagen();


}

private ListView listView;

ArrayList nombreAnimal = new ArrayList();

private void descargarImagen(){
    nombreAnimal.clear();

    final ProgressDialog progressDialog = new ProgressDialog(VerPostsUsuario.this);
    progressDialog.setMessage("Cargando Datos");
    progressDialog.show();

    AsyncHttpClient client = new AsyncHttpClient();
    client.get("mydomain+php", new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
            if(statusCode==200){
                progressDialog.dismiss();
                try {
                    JSONArray jsonArray = new JSONArray(new String(responseBody));
                    for (int i=0; 1<jsonArray.length();i++){
                        nombreAnimal.add(jsonArray.getJSONObject(i).getString("nombreAnimal"));

                    }
                    listView.setAdapter(new ImagenAdapter(getApplicationContext()));

                } catch (JSONException e) {
                    e.printStackTrace();
                }


            }
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

        }
    });

}

private class ImagenAdapter extends BaseAdapter {
    Context ctx;
    LayoutInflater layoutInflater;
    TextView tvnombreAnimal;


    public ImagenAdapter(Context applicationContext) {
        this.ctx=applicationContext;
        layoutInflater=(LayoutInflater)ctx.getSystemService(LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        return 0;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

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

        ViewGroup viewGroup =(ViewGroup)layoutInflater.inflate(R.layout.activity_main_items, null);
       tvnombreAnimal = (TextView) viewGroup.findViewById(R.id.tvnombreAnimal1);

        tvnombreAnimal.setText(nombreAnimal.get(i).toString());







        return viewGroup;
    }

活动PostPostUsario XML(ListView)

<ListView
        android:id="@+id/listView"
        android:layout_width="368dp"
        android:layout_height="492dp"
        android:layout_marginBottom="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:background="#11000000"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

Activity_main_items XML

<TextView
        android:id="@+id/tvnombreAnimal1"
        android:layout_width="177dp"
        android:layout_height="39dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginBottom="8dp"
        android:layout_marginLeft="148dp"
        android:layout_marginStart="148dp"
        android:layout_marginTop="8dp"
        android:textColor="#000"
        android:textSize="24dp"

         />

本教程最初还展示了如何显示图像(这就是为什么有一个导入“SmartImageView”和“Rect”)所以我删除了这部分,并试图只用文本。也许我搞砸了某个地方,但我找不到哪里,所以如果你能帮我解决这个问题,我将非常感激。

编辑:

所以我要感谢所有试图帮助我的人,看起来Array和Baseadapter一样有一些问题。对于有类似问题的人,我会在下面列出它们。

- 阵列:

有一个“1”而不是“我”,不得不更换

我试图从db中获取一个名为“nombreAnimal”的字段,实际上在我的php文件中我将“nombreAnimal”指定为“Nombre”(nombreAnimal.add(jsonArray.getJSONObject(i).getString(“Nombre”)) ;)

我还发现检查你的Array是否具有你想要的值(或者至少是某些东西)的最佳方法是检查Android的Logcat

-BaseAdapter:

我忘了在getCount(Array.size;)中从我的数组中获取大小

我在getItem中忘记了我需要从我的数组“nombreAnimal”(Array.get(i);)中返回“position”,“i”。

我忘了在getItemdId中返回“i”(i;)

android listview
4个回答
0
投票

我认为数组有问题以及如何处理服务器响应。这就是我的工作方式。

好像你试图获得值“nombreAnimal”而不是“Nombre”。试试这个:

try {
     JSONArray jsonArray = new JSONArray(new String(responseBody));
     for (int i = 0; i < jsonArray.length(); i++) {
          nombreAnimal.add(jsonArray.getJSONObject(i).getString("Nombre"));
     }
     listView.setAdapter(new ImagenAdapter(getApplicationContext()));
} catch (JSONException e) {
     e.printStackTrace();
}

Example of list working

我希望它对你有所帮助!


1
投票

我假设一切都是正确的,除了适配器的实现。

你没有正确地覆盖这些方法,我让你的代码来解决它。

ImagenAdapter中的代码:

//You need  to return the size of the array, if you always are returning 0 the adapter dont
        //print any because they "think" the array is empty.
        @Override
        public int getCount() {
            return nombreAnimal.size();
        }

        //This method helps you to return the Item at specific index
        @Override
        public Object getItem(int i) {
            return nombreAnimal.get(i);
        }

我希望它对你有所帮助。


0
投票

查看您的BaseAdapter如下;你可以找到更多信息here

@Override
public int getCount() {
    return nombreAnimal.size();
}

@Override
public Object getItem(int position) {
    return nombreAnimal.get(position);
}

@Override
public long getItemId(int i) {
    return i;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // inflate the layout for each list row
    if (convertView == null) {
        convertView = layoutInflater.inflate(R.layout.activity_main_items, null);
    }

    TextView tvnombreAnimal = (TextView) 
        convertView.findViewById(R.id.tvnombreAnimal1);
    tvnombreAnimal.setText(nombreAnimal.get(i).toString());

    // returns the view for the current row
    return convertView;
}

0
投票

尝试该代码:

public class VerPostsUsuario extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ver_posts_usuario);
    listView=(ListView)findViewById(R.id.listView);
    descargarImagen();


}

private ListView listView;

ArrayList nombreAnimal = new ArrayList();

private void descargarImagen(){
    nombreAnimal.clear();

final ProgressDialog progressDialog = new ProgressDialog(VerPostsUsuario.this);
progressDialog.setMessage("Cargando Datos");
progressDialog.show();

AsyncHttpClient client = new AsyncHttpClient();
client.get("mydomain+php", new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
        if(statusCode==200){
            progressDialog.dismiss();
            try {
                JSONArray jsonArray = new JSONArray(new String(responseBody));
                for (int i=0; 1<jsonArray.length();i++){
                    nombreAnimal.add(jsonArray.getJSONObject(i).getString("nombreAnimal"));

                }
                listView.setAdapter(new ImagenAdapter(getApplicationContext(), nombreAnimal));

            } catch (JSONException e) {
                e.printStackTrace();
            }


        }
    }

    @Override
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {

    }
});

}

private class ImagenAdapter extends BaseAdapter {
    Context ctx;
    LayoutInflater layoutInflater;
    TextView tvnombreAnimal;
    ArrayList list;
public ImagenAdapter(Context applicationContext, ArrayList list) {
    this.ctx=applicationContext;
    this.list = list;
    layoutInflater=(LayoutInflater)ctx.getSystemService(LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
    return list.size();
}

@Override
public Object getItem(int i) {
    return list.get(i);
}

@Override
public long getItemId(int i) {
    return 0;
}

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

    ViewGroup viewGroup =(ViewGroup)layoutInflater.inflate(R.layout.activity_main_items, null);
   tvnombreAnimal = (TextView) viewGroup.findViewById(R.id.tvnombreAnimal1);

    tvnombreAnimal.setText(list.get(i).toString());







    return viewGroup;
}

我刚刚在你的内部课程中添加了额外的arraylist。

© www.soinside.com 2019 - 2024. All rights reserved.