Заполнение макета таблицы с использованием строки JSON - PullRequest
5 голосов
/ 03 декабря 2011

У меня есть веб-служба, возвращаемая JSON String следующим образом:

{ "checkrecord" [{ "rollno": "abc2", "процент": 40, "участие": 12, "пропустили": 34}], "Таблица1": []} * * 1 004

Приведенная выше строка представляет мой набор данных. Я преобразовал String в объект JSON и теперь хочу поместить данные в String в TableLayout.

Я хочу, чтобы таблица отображалась в приложении Android:

    rollno       percentage    attended    missed
     abc2          40              12        34

Это код, который я сейчас использую:

    //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 содержит кнопку и EditText в качестве первого TableRow. После нажатия на кнопку я получаю строку JSON. После этого мне нужно динамически вставить 2 TableRows в соответствии с моим требованием.

Мой xml на данный момент выглядит следующим образом:

   <?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>

Итак, моя проблема в том, как добавить эти 2 дополнительные TableRows, чтобы заполнить их значениями String?

Мой код не работает нормально. Я не могу получить требуемый вывод.

Может ли кто-нибудь помочь мне в этом?

Спасибо

Ответы [ 3 ]

3 голосов
/ 03 декабря 2011

Вы можете использовать многоколонный просмотр списка,

Разобрать ответ JSON и получить значения в разные строки и использовать этот блог для своих целей

Список просмотра из нескольких столбцов

2 голосов
/ 03 декабря 2011

Вы, возможно, можете определить еще 2 строки в вашем XML и сделать их изначально невидимыми.Затем, получив ваши данные, поместите их в эти строки и сделайте их видимыми.

1 голос
/ 04 декабря 2013
// 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);
...