我是编程新手,我一直在努力使其工作一段时间,但是我无法解决它,因此,我想将数据(现在仅是名称)从我的在线数据库传输到列表视图并显示它。我已经检查了我的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;
}
活动VerPostsUsuario 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”代替“ i”,并且必须替换
我试图从数据库中获取一个名为“ nombreAnimal”的字段,而实际上我在自己的php文件中将“ nombreAnimal”分配给了“ Nombre”(nombreAnimal.add(jsonArray.getJSONObject(i).getString(“ Nombre “));)
我还发现,检查数组是否具有所需值(或至少是某些值)的最佳方法是检查Android的Logcat
-BaseAdapter:
我忘了从数组中的 getCount (Array.size;)
中获取大小。我忘记了 getItem ,我需要从我的数组“ nombreAnimal”(Array.get(i);)中返回“ position”(在我的情况下为“ i”)
我忘记了 getItemdId 以返回“ i”(i;)
答案 0 :(得分:1)
我假设除了适配器的实现以外,其他所有信息都是正确的。
您没有正确覆盖这些方法,我让您通过代码对其进行修复。
ImagenAdapter中的代码:
() -> this.enabled
this::enabled
希望对您有帮助。
答案 1 :(得分: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;
}
答案 2 :(得分: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。
答案 3 :(得分: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();
}
希望对您有帮助!