获取了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>
答案 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