Java 获取JSON数据时无法在android中显示listView

Java 获取JSON数据时无法在android中显示listView,java,android,json,Java,Android,Json,这是我的MainActivity.java: package example.com.getdata; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ListView; import android.widget.Toast; impor

这是我的MainActivity.java:

package example.com.getdata;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONObject;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
public static final String JSON_URL = "http://172.31.131.52:8081/application/status";
private Button buttonGet;
private ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    buttonGet = (Button) findViewById(R.id.button2);

}
private void sendRequest(){
    StringRequest stringRequest = new StringRequest(JSON_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    showJSON(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG).show();
                }
            });
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}
private void showJSON(String json) {
    Product product = new Product(json);
    ArrayList<JSONObject> listItems= product.parseJSON();
    listView = (ListView) findViewById(R.id.list_view);
    CustomList customerList = new CustomList(this,R.layout.list_view_layout,R.id.textViewName, listItems);
   //customerList.notifyDataSetChanged();
    listView.setAdapter(customerList);
}
public void clickHere(View v) {
    sendRequest();
}
}
package example.com.getdata;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.Button;
导入android.widget.ListView;
导入android.widget.Toast;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONObject;
导入java.util.ArrayList;
公共类MainActivity扩展了AppCompatActivity{
公共静态最终字符串JSON_URL=”http://172.31.131.52:8081/application/status";
私人按钮按钮;
私有列表视图列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonGet=(按钮)findViewById(R.id.button2);
}
私有void sendRequest(){
StringRequest StringRequest=新的StringRequest(JSON_URL,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
showJSON(响应);
}
},
新的Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
Toast.makeText(MainActivity.this,error.getMessage(),Toast.LENGTH_LONG.show();
}
});
RequestQueue RequestQueue=Volley.newRequestQueue(this);
添加(stringRequest);
}
私有void showJSON(字符串json){
产品=新产品(json);
ArrayList listItems=product.parseJSON();
listView=(listView)findViewById(R.id.list\u视图);
CustomList customerList=新的CustomList(this,R.layout.list\u view\u layout,R.id.textViewName,listItems);
//customerList.notifyDataSetChanged();
setAdapter(customerList);
}
公共空间单击此处(视图五){
sendRequest();
}
}
Product.java

package example.com.getdata;

import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

import static com.android.volley.VolleyLog.TAG;


public class Product {

public String productName;
public String description;
public int priceInDollars;
//public int productID;

public static final String KEY_Name = "productName";
public static final String KEY_Desc = "description";
//public static final String KEY_ID= "ProductID";
public static final String KEY_Price ="priceInDollars" ;

private JSONArray users = null;

private String json;

public Product(String json){
    this.json =json;
}

protected ArrayList<JSONObject> parseJSON(){
    JSONArray jsonArray=null;
    ArrayList<JSONObject> aList=new ArrayList<JSONObject>();
    try {
        jsonArray = new JSONArray(json);
        Log.d("Debugging...", jsonArray.toString());
        if(jsonArray != null) {
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jo = jsonArray.getJSONObject(i);
                productName = jo.getString(KEY_Name);
                description = jo.getString(KEY_Desc);
                priceInDollars = jo.getInt(KEY_Price);
                aList.add(jsonArray.getJSONObject(i));
                // productID = jo.getInt(KEY_ID);
                }
            return aList;
        }
        else {
                Log.d(TAG, "parseJSON: Null condition");
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return null;
}
}
package example.com.getdata;
导入android.util.Log;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入静态com.android.volley.VolleyLog.TAG;
公共类产品{
公共字符串产品名称;
公共字符串描述;
印度拉公共交通;
//公共int productID;
公共静态最终字符串键\u Name=“productName”;
公共静态最终字符串键\u Desc=“description”;
//公共静态最终字符串键\u ID=“ProductID”;
公共静态最终字符串键\u Price=“priceindolars”;
私有JSONArray用户=null;
私有字符串json;
公共产品(字符串json){
this.json=json;
}
受保护的ArrayList parseJSON(){
JSONArray JSONArray=null;
ArrayList aList=新的ArrayList();
试一试{
jsonArray=新的jsonArray(json);
Log.d(“调试…”,jsonArray.toString());
if(jsonArray!=null){
for(int i=0;i
CustomList.java

package example.com.getdata;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

public class CustomList extends ArrayAdapter<String> {

private ArrayList<JSONObject> list;

private int vg;
private Activity context;

public CustomList(Activity context,int vg, int id, ArrayList<JSONObject> list ) {
    super(context,R.layout.list_view_layout, id);
    this.vg = vg;
    this.context = context;
    this.list=list;
   // this.productID=productID;
}

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View listViewItem = inflater.inflate(vg, parent, false);
    TextView textViewName = (TextView) listViewItem.findViewById(R.id.textViewName);
    TextView textViewDescription = (TextView) listViewItem.findViewById(R.id.textViewDescription);
    TextView textViewPrice = (TextView) listViewItem.findViewById(R.id.textViewPrice);
   // TextView textViewID = (TextView) listViewItem.findViewById(R.id.textViewID);
    try {
        textViewName.setText(list.get(position).getString("productName"));
        textViewDescription.setText(list.get(position).getString("description"));
        textViewPrice.setText(list.get(position).getString("priceInDollars"));
    }
    catch (JSONException e) {
        e.printStackTrace();
    }
   // textViewID.setText(productID);
    return listViewItem;
}
}
package example.com.getdata;
导入android.app.Activity;
导入android.content.Context;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.TextView;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
公共类CustomList扩展了ArrayAdapter{
私有数组列表;
私有int vg;
私人活动语境;
公共自定义列表(活动上下文、int vg、int id、ArrayList列表){
super(上下文,R.layout.list\u view\u layout,id);
这个.vg=vg;
this.context=上下文;
this.list=list;
//this.productID=productID;
}
公共视图getView(int位置、视图转换视图、视图组父视图){
LayoutFlater充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
View listViewItem=充气机。充气(vg,父项,false);
TextView textViewName=(TextView)listViewItem.findViewById(R.id.textViewName);
TextView textViewDescription=(TextView)listViewItem.findViewById(R.id.textViewDescription);
TextView textViewPrice=(TextView)listViewItem.findViewById(R.id.textViewPrice);
//TextView textViewID=(TextView)listViewItem.findViewById(R.id.textViewID);
试一试{
textViewName.setText(list.get(position.getString(“productName”));
textViewDescription.setText(list.get(position.getString(“description”));
textViewPrice.setText(list.get(position.getString(“priceInDollars”));
}
捕获(JSONException e){
e、 printStackTrace();
}
//textViewID.setText(productID);
返回listViewItem;
}
}
我试着在网上搜索答案,但仍然无法找出问题所在。我看不到对象列表。通过调试,我确信这些对象已读入json对象,但我仍然无法在listView中显示这些对象


非常感谢您的帮助。

您需要将
构造函数
产品
类的所有变量装箱,并将所有值放入
产品
类对象中,然后添加到
数组列表

请参见产品类别:

public class Product {

    public String productName;
    public String description;
    public int priceInDollars;
//public int productID;

    public static final String KEY_Name = "productName";
    public static final String KEY_Desc = "description";
    //public static final String KEY_ID= "ProductID";
    public static final String KEY_Price ="priceInDollars" ;

    private JSONArray users = null;

    private String json;

    public Product(String productName, String json, JSONArray users, int priceInDollars, String description) {
        this.productName = productName;
        this.json = json;
        this.users = users;
        this.priceInDollars = priceInDollars;
        this.description = description;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public static String getKEY_Name() {
        return KEY_Name;
    }

    public static String getKEY_Price() {
        return KEY_Price;
    }

    public String getJson() {
        return json;
    }

    public void setJson(String json) {
        this.json = json;
    }

    public JSONArray getUsers() {
        return users;
    }

    public void setUsers(JSONArray users) {
        this.users = users;
    }

    public static String getKEY_Desc() {
        return KEY_Desc;
    }

    public int getPriceInDollars() {
        return priceInDollars;
    }

    public void setPriceInDollars(int priceInDollars) {
        this.priceInDollars = priceInDollars;
    }
}
当您解析数据时,需要更改以下代码:

 protected ArrayList<Product> parseJSON(){
        JSONArray jsonArray=null;
        ArrayList<Product> aList=new ArrayList<Product>();
        try {
            jsonArray = new JSONArray(json);
            Log.d("Debugging...", jsonArray.toString());
            if(jsonArray != null) {
                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject jo = jsonArray.getJSONObject(i);
                    String productName = jo.optString(KEY_Name);
                    String description = jo.optString(KEY_Desc);
                    String priceInDollars = jo.optInt(KEY_Price);
                    Product product = new Product(productName,json,
                            jsonArray.getJSONObject(i),priceInDollars,description);
                    aList.add(product);
                    // productID = jo.getInt(KEY_ID);
                }
                return aList;
            }
            else {
                Log.d(TAG, "parseJSON: Null condition");
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return null;
    }
protectedarraylist parseJSON(){
JSONArray JSONArray=null;
应收账
 @Override
 public int getCount(){
       return list.size();
 }
super(context,R.layout.list_view_layout, list);
super(context,R.layout.list_view_layout, id);
@override
public int getCount()
{
    return list.size();
}