无法在Android应用程序中打印json数据的列表视图

时间:2016-07-21 07:05:07

标签: java android json

获取了json数据,我想解析它并在listview中显示它。我使用了适配器方法。 这是我的代码:

DisplayListView类:

    public class DisplayListView extends AppCompatActivity {
        String json_string;
        JSONObject jsonObject =null;
        JSONArray jsonArray=null;
        dataAdapter dataAdapter;
        ListView listView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.displaylistview_layout);
            listView=(ListView) findViewById(R.id.listview);
            listView.setAdapter(dataAdapter);
            dataAdapter=new dataAdapter(this,R.layout.row_layout);
            json_string=getIntent().getExtras().getString("json_data");
            Log.w("var32",  json_string);
            try {
                jsonArray = new JSONArray(json_string);
                jsonObject = new JSONObject();
                jsonObject.put("arrayName",jsonArray);
                jsonArray=jsonObject.getJSONArray("arrayName");
                int count=0;
                String LabLocation,RackLocation,ShelfLocation,fourBid,Cluster,fourBookingName,SoftwareVersion,HardwareType,AssetNo,SerialNO;


while (count<jsonObject.length()){
            JSONObject JO=jsonArray.getJSONObject(count);
            LabLocation=JO.getString("LabLocation");
            RackLocation=JO.getString("RackLocation");
            ShelfLocation=JO.getString("ShelfLocation");
            fourBid=JO.getString("fourBid");
            Cluster=JO.getString("Cluster");
            fourBookingName=JO.getString("fourBookingName");
            SoftwareVersion=JO.getString("SoftwareVersion");
            HardwareType=JO.getString("HardwareType");
            AssetNo=JO.getString("AssetNo");
            SerialNO=JO.getString("SerialNO");
            data data=new data(LabLocation,RackLocation,ShelfLocation,fourBid,Cluster,fourBookingName,SoftwareVersion,HardwareType,AssetNo,SerialNO);
            Log.w("var34",  "Arguments Verified");
            dataAdapter.add(data);
            count++;
        }
        listView.setAdapter(dataAdapter);
        dataAdapter.notifyDataSetChanged();

    }catch (JSONException e){
                Log.w("var33", "error JSON exception");
                e.printStackTrace();
            }
        }
    }

适配器类:

public class dataAdapter extends ArrayAdapter {
    List list=new ArrayList();
    public dataAdapter(Context context, int resource) {
        super(context, resource);
    }

    public void add(data object) {
        super.add(object);
        list.add(object);
    }

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row;
        row=convertView;
        dataHolder dataHolder;
        if (row==null){
            LayoutInflater layoutInflater=(LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row=layoutInflater.inflate(R.layout.row_layout,parent,false);
            dataHolder = new dataHolder();
            dataHolder.tx_LabLocation=(TextView) row.findViewById(R.id.tx_LabLocation);
            dataHolder.tx_RackLocation=(TextView) row.findViewById(R.id.tx_RackLocation);
            dataHolder.tx_ShelfLocation=(TextView) row.findViewById(R.id.tx_ShelfLocation);
            dataHolder.tx_fourBid=(TextView) row.findViewById(R.id.tx_fourBid);
            dataHolder.tx_Cluster=(TextView) row.findViewById(R.id.tx_Cluster);
            dataHolder.tx_fourBookingName=(TextView) row.findViewById(R.id.tx_fourBookingName);
            dataHolder.tx_SoftwareVersion=(TextView) row.findViewById(R.id.tx_SoftwareVersion);
            dataHolder.tx_HardwareType=(TextView) row.findViewById(R.id.tx_HardwareType);
            dataHolder.tx_AssetNo=(TextView) row.findViewById(R.id.tx_AssetNo);
            dataHolder.tx_SerialNO=(TextView) row.findViewById(R.id.tx_SerialNO);
            row.setTag(dataHolder);
        } else {
            dataHolder=(dataHolder) row.getTag();
        }
        data data = (data) this.getItem(position);
        dataHolder.tx_LabLocation.setText(data.getLabLocation());
        dataHolder.tx_RackLocation.setText(data.getRackLocation());
        dataHolder.tx_ShelfLocation.setText(data.getShelfLocation());
        dataHolder.tx_fourBid.setText(data.getFourBid());
        dataHolder.tx_Cluster.setText(data.getCluster());
        dataHolder.tx_fourBookingName.setText(data.getFourBookingName());
        dataHolder.tx_SoftwareVersion.setText(data.getSoftwareVersion());
        dataHolder.tx_HardwareType.setText(data.getHardwareType());
        dataHolder.tx_AssetNo.setText(data.getAssetNo());
        dataHolder.tx_SerialNO.setText(data.getSerialNO());
        return row;
    }

    static class dataHolder {
        TextView tx_LabLocation,tx_RackLocation,tx_ShelfLocation,tx_fourBid,tx_Cluster,tx_fourBookingName,tx_SoftwareVersion,tx_HardwareType,tx_AssetNo,tx_SerialNO;
    }
}

data.java:

public class data {

    private String LabLocation,RackLocation,ShelfLocation,fourBid,Cluster,fourBookingName,SoftwareVersion,HardwareType,AssetNo,SerialNO;

    public data (String LabLocation,String RackLocation,String ShelfLocation,String fourBid,String Cluster,String fourBookingName,String SoftwareVersion,String HardwareType,String AssetNo,String SerialNO) {
        this.setLabLocation(LabLocation);
        this.setRackLocation(RackLocation);
        this.setShelfLocation(ShelfLocation);
        this.setFourBid(fourBid);
        this.setCluster(Cluster);
        this.setFourBookingName(fourBookingName);
        this.setSoftwareVersion(SoftwareVersion);
        this.setHardwareType(HardwareType);
        this.setAssetNo(AssetNo);
        this.setSerialNO(SerialNO);

    }

    public String getLabLocation() {
        System.out.println("LabLocation"   +LabLocation);
        return LabLocation;
    }

    public void setLabLocation(String labLocation) {
        LabLocation = labLocation;
    }

    public String getRackLocation() {
        return RackLocation;
    }

    public void setRackLocation(String rackLocation) {
        RackLocation = rackLocation;
    }

    public String getShelfLocation() {
        return ShelfLocation;
    }

    public void setShelfLocation(String shelfLocation) {
        ShelfLocation = shelfLocation;
    }

    public String getFourBid() {
        return fourBid;
    }

    public void setFourBid(String fourBid) {
        this.fourBid = fourBid;
    }

    public String getCluster() {
        return Cluster;
    }

    public void setCluster(String cluster) {
        Cluster = cluster;
    }

    public String getFourBookingName() {
        return fourBookingName;
    }

    public void setFourBookingName(String fourBookingName) {
        this.fourBookingName = fourBookingName;
    }

    public String getSoftwareVersion() {
        return SoftwareVersion;
    }

    public void setSoftwareVersion(String softwareVersion) {
        SoftwareVersion = softwareVersion;
    }

    public String getHardwareType() {
        return HardwareType;
    }

    public void setHardwareType(String hardwareType) {
        HardwareType = hardwareType;
    }

    public String getAssetNo() {
        return AssetNo;
    }

    public void setAssetNo(String assetNo) {
        AssetNo = assetNo;
    }

    public String getSerialNO() {
        return SerialNO;
    }

    public void setSerialNO(String serialNO) {
        SerialNO = serialNO;
    }
}

解析后没有抛出错误。它只打开新页面空白。 感谢。

row_layout xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="75dp">

    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_LabLocation"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_RackLocation"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_ShelfLocation"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_fourBid"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_Cluster"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_fourBookingName"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_SoftwareVersion"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_HardwareType"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_AssetNo"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />
    <TextView
        android:layout_width="120dp"
        android:layout_height="match_parent"
        android:id="@+id/tx_SerialNO"
        android:layout_alignParentLeft="true"
        android:text="Albyn"
        android:gravity="center"
        android:textAppearance="?android:textAppearanceLarge"
        />



</RelativeLayout>

displaylistview_layout xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.albbaby.nokialabs.DisplayListView">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listview"
    />

</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

写这行listView.setAdapter(dataAdapter);在while循环之后

在将数据添加到dataAdapter之前,您正在设置适配器。

应在添加数据后进行

答案 1 :(得分:0)

public class DisplayListView extends AppCompatActivity {
String json_string;
JSONObject jsonObject =null;
JSONArray jsonArray=null;
dataAdapter dataAdapter;
ListView listView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.displaylistview_layout);
    listView=(ListView) findViewById(R.id.listview);
    //listView.setAdapter(dataAdapter); // set this line after your parsing is done
    dataAdapter=new dataAdapter(this,R.layout.row_layout);
    listView.setAdapter(dataAdapter);
    json_string=getIntent().getExtras().getString("json_data");
    Log.w("var32",  json_string);
    try {
        jsonArray = new JSONArray(json_string);
        jsonObject = new JSONObject();
        jsonObject.put("arrayName",jsonArray);
        jsonArray=jsonObject.getJSONArray("arrayName");
        int count=0;
        String LabLocation,RackLocation,ShelfLocation,fourBid,Cluster,fourBookingName,SoftwareVersion,HardwareType,AssetNo,SerialNO;
        while (count<jsonObject.length()){
            JSONObject JO=jsonArray.getJSONObject(count);
            LabLocation=JO.getString("LabLocation");
            RackLocation=JO.getString("RackLocation");
            ShelfLocation=JO.getString("ShelfLocation");
            fourBid=JO.getString("fourBid");
            Cluster=JO.getString("Cluster");
            fourBookingName=JO.getString("fourBookingName");
            SoftwareVersion=JO.getString("SoftwareVersion");
            HardwareType=JO.getString("HardwareType");
            AssetNo=JO.getString("AssetNo");
            SerialNO=JO.getString("SerialNO");
            Log.w("var34",  "Arguments Passed");
            data data=new data(LabLocation,RackLocation,ShelfLocation,fourBid,Cluster,fourBookingName,SoftwareVersion,HardwareType,AssetNo,SerialNO);
            dataAdapter.add(data);
            count++;
        }

   listView.notifyDataSetChanged(); // or notify it if you have previously added it

    }catch (JSONException e){
        Log.w("var33", "error JSON exception");
        e.printStackTrace();
    }
}

}

答案 2 :(得分:0)

我只是通过返回它们以文本形式显示了json数据。 substring_index('sap3212', ' ', -1) => sap3212 这样做的主要目的是在Android应用程序中显示信息。

substring_index('2nd street, sap3212', ' ', -1) => sap3212