Populating Table Layout using JSON String

筅森魡賤 提交于 2019-12-10 15:29:54

问题


I have a JSON String returned by my web service as follows:

{"checkrecord"[{"rollno":"abc2","percentage":40,"attended":12,"missed":34}],"Table1":[]}

The above String represents my dataset. I have converted the String to a JSON Object and I now want to put the data in the String into a TableLayout.

I want the table to be like this when displayed on android app:

    rollno       percentage    attended    missed
     abc2          40              12        34

This is the code I am using as of now :

    //json processing code

 public void jsonprocessing(String c)
   {
       try 
       {

       JSONObject jsonobject = new JSONObject(c);

       JSONArray array = jsonobject.getJSONArray("checkrecord");

        int max = array.length();

       for (int j = 0; j < max; j++)
       {

    JSONObject obj = array.getJSONObject(j);
    JSONArray names = obj.names();

    for (int k = 0; k < names.length(); k++) 
        {
             name = names.getString(k);
            value= obj.getString(name);
               createtableLayout();  

        }


       }     

     } 

  catch (JSONException e)           
   {                
      // TODO Auto-generated catch block
    e.printStackTrace();        
}

 }

//create table layout
public void createtableLayout()
{

     Log.d("values",value); //I am able to see the values abc2,40,12 and 34 over  here in logcat  
     TableLayout t= (TableLayout)findViewById(R.id.tablelayout);
         TableRow r1=new TableRow(this);
         r1.setLayoutParams(new LayoutParams(
         LayoutParams.FILL_PARENT,
         LayoutParams.WRAP_CONTENT));    
         TextView t1 = new TextView(this);
         t1.setText(value);
         t1.setTextColor(Color.BLACK);
         t1.setLayoutParams(new LayoutParams(
             LayoutParams.FILL_PARENT,
             LayoutParams.WRAP_CONTENT));
         r1.addView(t1);
         t.addView(r1, new TableLayout.LayoutParams( LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));

 }

My TableLayout contains a button and a EditText as the first TableRow. After I click the button I get the JSON String. So I need to insert 2 TableRows dynamically after that as per my requirement.

My xml as of now is as follows:

   <?xml version="1.0" encoding="utf-8"?>
   <TableLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/tablelayout"
        android:layout_height="fill_parent" 
        android:layout_width="fill_parent"
        android:background="#000044">
   <TableRow> 

   <EditText 
        android:id="@+id/edittext" 
        android:width="200px" />

   <Button 
        android:id="@+id/button" 
        android:text="Check Record"/>

   </TableRow> 

   </TableLayout>

So my problem is how to add those 2 extra TableRows so as to populate them with the String values ?

My code isn't working fine. I am not able to get the required output.

Can anyone help me in this?

Thanks


回答1:


you can use multicolumn listview for your purpose,

Parse the JSON response and get values into different strings and use this blog for your purpose

Multicolumn Listview




回答2:


You, probably, can define those 2 more rows in your XML and make them initially invisible. Then upon receiving your data put your data in those rows and make them visible.




回答3:


// Every UI object must have a layout parameter
        int widthContent = RelativeLayout.LayoutParams.WRAP_CONTENT;
        int heightContent = RelativeLayout.LayoutParams.WRAP_CONTENT;

        // Create relative layout
        RelativeLayout.LayoutParams rlParamsName = new RelativeLayout.LayoutParams(widthContent,heightContent);

        // Create table row layout
        int trWidthContent = TableRow.LayoutParams.WRAP_CONTENT;
        int trHeightContent = TableRow.LayoutParams.WRAP_CONTENT;

        TableRow.LayoutParams trLayout = new TableRow.LayoutParams(trWidthContent, trHeightContent);

        // Create a linear layout to add new object as vertical
        LinearLayout objLinearLayout = new LinearLayout(context);
        objLinearLayout.setOrientation(LinearLayout.VERTICAL);

        // Add number of categories to menu
        for (int i = 0; i < SpecialCategories.length(); i++) {

            try {

                // Json for special categories 
                JSONObject jsonData = SpecialCategories.getJSONObject(i);

                // Get name and count of category
                String specialCategoryNames = jsonData.getString("label").toString();
                String specialCategoryCount = jsonData.getString("coupon_count").toString();

                final TableRow tr = new TableRow(this);
                tr.setLayoutParams(trLayout);
                tr.setId(i);
                //tr.setBackgroundColor(0xFFBEBEBE);    

                // What is the text view for category name
                TextView categoryName = new TextView(this);
                categoryName.setPadding(8, 8, 8, 8);
                categoryName.setTextSize(18);
                categoryName.setLayoutParams(trLayout);         
                categoryName.setText(specialCategoryNames);
                categoryName.setId(i);
                categoryName.setTypeface(null, Typeface.BOLD);
                categoryName.setTextColor(0xFF000000);

                // What is count for category
                TextView categoryCount = new TextView(this);
                categoryCount.setPadding(7, 8, 8, 8);
                categoryCount.setLayoutParams(trLayout);
                categoryCount.setBackgroundColor(Color.WHITE);
                categoryCount.setText("("+specialCategoryCount+")");

                // Add disclosure image to row
                ImageView objDrawLineImageView = new ImageView(this);
                objDrawLineImageView.setPadding(280, 19, 6, 6);
                objDrawLineImageView.setImageResource(R.drawable.disclosure);
                objDrawLineImageView.setLayoutParams(trLayout);

                // Add name of category
                tr.addView(categoryName);

                // Add count for category
                tr.addView(categoryCount);

                // Add disclosure back to table row
                tr.addView(objDrawLineImageView);

                // Add table row into linear layout
                objLinearLayout.addView(tr);


                //Add Row End Line to Linear layout
                ImageView rowEndLine = new ImageView(context);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,2);
                params.setMargins(0, 5, 0, 0);
                rowEndLine.setLayoutParams(params);
                rowEndLine.setBackgroundColor(0xFFBEBEBE);

                // Add end line image to linear layout
                objLinearLayout.addView(rowEndLine);

                // What happen when user click on table row
                tr.setOnClickListener(new OnClickListener() {                      
                    @Override
                    public void onClick(View arg0) {

                        Toast.makeText(Main.this, ""+tr.getId(),Toast.LENGTH_SHORT).show();

                        Log.e("TAG", " clicked ID: "+tr.getId());
                    }
                });

            } catch (Exception e) {
                e.printStackTrace();
            }// end try

        }// end for SpecialCategories.length()

        //Add button number two to the activity.
        RelativeLayout objRelativeLayout = (RelativeLayout)findViewById(R.id.row_special);    
        objRelativeLayout.addView(objLinearLayout);


来源:https://stackoverflow.com/questions/8366911/populating-table-layout-using-json-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!