【问题标题】:How to populate statistics by Json data with dynamic keyword?如何使用动态关键字通过 Json 数据填充统计信息?
【发布时间】:2020-05-07 09:21:38
【问题描述】:

我有一个从远程服务器解析的 json。这是 Json 格式。

{
  "Jan 01, 2020": [
    {
      "name": "test1",
      "value": "25/25"
    },
    {
      "name": "test2",
      "value": "25/25"
    },
    {
      "name": "test3",
      "value": "1/25"
    }
  ],
  "Jan 02, 2020": [
    {
      "name": "test1",
      "value": "25/25"
    },
    {
      "name": "test2",
      "value": "4/25"
    },
    {
      "name": "test3",
      "value": "1/25"
    }
  ],
  "Jan 03, 2020": [
    {
      "name": "test1",
      "value": "2/25"
    },
    {
      "name": "test2",
      "value": "25/25"
    },
    {
      "name": "test3",
      "value": "1/25"
    }
  ]
}

由于 Json 具有动态关键字,我使用 Map<String,Set<Statistic>> 解析数据。但无法填充如下图所示的统计信息。 Statistic 类有两个属性 namevalue

【问题讨论】:

  • 你试过什么/
  • 我通过获取Map 的键分别填充了标题。但是我将如何打印也是动态的水平和垂直数据。我的意思是没有定义行和列。它们可能会根据来自远程服务器的 Json 增加或减少。

标签: android json android-tablelayout android-gridlayout


【解决方案1】:
 private TableLayout mTableLayout;
  mTableLayout = (TableLayout) findViewById( R.id.tableInvoices );
        mTableLayout.setStretchAllColumns( true );
public void loadData(){

        gross = sharedPreferences.getFloat( "Gross", 0 );
        float weight = sharedPreferences.getFloat( "weight", 0 );

        c = Calendar.getInstance();`enter code here`
        SimpleDateFormat sdf = new SimpleDateFormat( "dd/MM/yy" );
        String strDate = sdf.format( c.getTime() );
        SimpleDateFormat sd1f = new SimpleDateFormat( "hh:mm" );
        String strtime = sd1f.format( c.getTime() );
        info = new Model_Info( weight, strDate, strtime );
        detail.add( 0,info );       
int rows = detail.size();
        //Model_Info info = null;
        mTableLayout.removeAllViews();
        for (int i = 0; i <rows; i++) {
            info = detail.get( i );
            if (info.weight == 0.000){
                Toast.makeText( context, "Invalid weight", Toast.LENGTH_SHORT ).show();

            } else {

                // data columns
                tv = new TextView( this );
                tv.setLayoutParams( new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT,
                        TableRow.LayoutParams.MATCH_PARENT ) );

                tv.setGravity( Gravity.LEFT );

                tv.setPadding( 5, 0, 0, 0 );
                tv.setBackgroundResource( R.drawable.table_border );
                tv.setText( String.valueOf( i+1 ) );
               tv.setTextSize( TypedValue.COMPLEX_UNIT_PX,textSize );
                tv.setTextColor( Color.parseColor( "#000000" ) );
                tv2 = new TextView( this );
                tv2.setLayoutParams( new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT,
                        TableRow.LayoutParams.MATCH_PARENT ) );
                tv2.setGravity( Gravity.LEFT );

                tv2.setPadding( 5, 0, 0, 0 );

                tv2.setBackgroundResource( R.drawable.table_border );
                tv2.setTextColor( Color.parseColor( "#000000" ) );
                tv2.setText( df.format( info.weight ) );
                 tv2.setTextSize( TypedValue.COMPLEX_UNIT_PX, textSize );


                tv3 = new TextView( this );
                tv3.setLayoutParams( new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT,
                        TableRow.LayoutParams.MATCH_PARENT ) );

                tv3.setGravity( Gravity.LEFT );
                tv3.setPadding( 5, 0, 0, 0 );

                tv3.setBackgroundColor( Color.parseColor( "#ffffff" ) );
                tv3.setBackgroundResource( R.drawable.table_border );
                tv3.setTextColor( Color.parseColor( "#000000" ) );
                tv3.setText( info.date + " " + info.time );
                tr_total.setText( String.valueOf( df.format( Total_Weight() ) ) );
             tv3.setTextSize( TypedValue.COMPLEX_UNIT_PX, textSize );


                // add table row
                final TableRow tr = new TableRow( this );
                tr.setId( rows + 1 );
                TableLayout.LayoutParams trParams = new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.MATCH_PARENT );
                trParams.setMargins( 0, 0, 0, 0 );
                tr.setPadding( 0, 0, 0, 0 );
                tr.setLayoutParams( trParams );
                tr.addView( tv );
                tr.addView( tv2 );
                tr.addView( tv3 );
                final View vline = new View( this );
                vline.setLayoutParams( new TableRow.LayoutParams( TableRow.LayoutParams.MATCH_PARENT, 0 ) );
                mTableLayout.addView( vline );
                mTableLayout.addView( tr, trParams ); } }}

使用此格式将数据从 json 插入到 tablelayout。您的表格将看起来像我附上的图像..

【讨论】:

    猜你喜欢
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多