如何在android中填充表格布局中的Json数据

时间:2016-05-03 05:35:54

标签: android json android-tablelayout

我正在尝试在表格布局中显示我的json数据,为此我准备了一个运行良好而没有错误的phpwebservice我也在android上获得了Json数据但是我不明白它为什么不填充不幸的是,tablelayout和我的应用已经停止了。我的代码就是......

TableActivity

package com.example.my.phploginregistration;

 import java.util.ArrayList;
 import java.util.Iterator;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 import android.app.Activity;
 import android.graphics.Color;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.LinearLayout;
 import android.widget.TableLayout;
 import android.widget.TableRow;
 import android.widget.TableRow.LayoutParams;
 import android.widget.TextView;

 public class TableActivity extends Activity {

String data = "";
TableLayout tl;
TableRow tr;
TextView label;

private static final String Json_URL ="http://10.0.2.2:8080/getRecordForTableView.php";
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_table);

    tl = (TableLayout) findViewById(R.id.main_table);

    final GetDataFromDB getdb = new GetDataFromDB();
    new Thread(new Runnable() {
        public void run() {
            data = getdb.getDataFromDB(Json_URL);
            System.out.println("data::" + data);

            runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    ArrayList<Users> users = parseJSON(data);
                    addData(users);
                }
            });

        }
    }).start();
}

public ArrayList<Users> parseJSON(String result) {
    ArrayList<Users> users = new ArrayList<Users>();
    try {
        JSONArray jArray = new JSONArray(result);
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject json_data = jArray.getJSONObject(i);
            Users user = new Users();
            user.setId(json_data.getInt("id"));
            user.setName(json_data.getString("name"));
            user.setUsername(json_data.getString("username"));
            user.setEmail(json_data.getString("email"));
            users.add(user);

        }
    } catch (JSONException e) {
        Log.e("log_tag", "Error parsing data " + e.toString());
    }
    return users;
}

void addHeader(){
    /** Create a TableRow dynamically **/
    tr = new TableRow(this);

    /** Creating a TextView to add to the row **/
    label = new TextView(this);
    label.setText("Name");
    label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    label.setPadding(5, 5, 5, 5);
    label.setBackgroundColor(Color.RED);
    LinearLayout Ll = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(label,params);
    tr.addView(Ll); // Adding textView to tablerow.

    /** Creating Qty Button **/
    TextView uname = new TextView(this);
    uname.setText("Username");
    uname.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    uname.setPadding(5, 5, 5, 5);
    uname.setBackgroundColor(Color.RED);
    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(uname,params);
    tr.addView(Ll); // Adding textview to tablerow.

    // Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT));

    /** Creating Qty Button **/
    TextView email = new TextView(this);
    email.setText("email");
    email.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    email.setPadding(5, 5, 5, 5);
    email.setBackgroundColor(Color.RED);
    Ll = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(email,params);
    tr.addView(Ll); // Adding textview to tablerow.

    // Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));
}

@SuppressWarnings({ "rawtypes" })
public void addData(ArrayList<Users> users) {

    addHeader();

    for (Iterator i = users.iterator(); i.hasNext();) {

        Users p = (Users) i.next();

        /** Create a TableRow dynamically **/
        tr = new TableRow(this);

        /** Creating a TextView to add to the row **/
        label = new TextView(this);
        label.setText(p.getName());
        label.setId(p.getId());
        label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        label.setPadding(5, 5, 5, 5);
        label.setBackgroundColor(Color.GRAY);
        LinearLayout Ll = new LinearLayout(this);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(5, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(label,params);
        tr.addView(Ll); // Adding textView to tablerow.

        /** Creating Qty Button **/
        TextView un = new TextView(this);
        un.setText(p.getUsername());
        un.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        un.setPadding(5, 5, 5, 5);
        un.setBackgroundColor(Color.GRAY);
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(un,params);
        tr.addView(Ll); // Adding textview to tablerow.

        // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));


        /** Creating Qty Button **/
        TextView mail = new TextView(this);
        mail.setText(p.getEmail());
        mail.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        mail.setPadding(5, 5, 5, 5);
        mail.setBackgroundColor(Color.GRAY);
        Ll = new LinearLayout(this);
        params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT);
        params.setMargins(0, 2, 2, 2);
        //Ll.setPadding(10, 5, 5, 5);
        Ll.addView(mail,params);
        tr.addView(Ll); // Adding textview to tablerow.

        // Add the TableRow to the TableLayout
        tl.addView(tr, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));
    }
}
}                                 

I got Json Data but after that my app got unfortunately stopped.

这是我完整的json回复...

{
  "Users":[
  {
     "id":"1",
     "name":"vandana rao",
     "username":"vr",
     "email":"vr@gmail.com"
  },
  {
     "id":"2",
     "name":"hemant rao",
     "username":"hr",
     "email":"hr@gmail.com"
  },
  {
     "id":"3",
     "name":"kirti rao",
     "username":"kr",
     "email":"kr@gmail.com"
  },
  {
     "id":"4",
     "name":"bhavana rao",
     "username":"br",
     "email":"br@gmail.com"
  },
  {
     "id":"5",
     "name":"nilesh rao",
     "username":"nr",
     "email":"nr@gmail.com"
  },
  {
     "id":"6",
     "name":"rishika rao",
     "username":"rr",
     "email":"rr@gmail.com"
  },
  {
     "id":"7",
     "name":"jitu",
     "username":"jr",
     "email":"jr@gmail.com"
  },
  {
     "id":"8",
     "name":"kushi",
     "username":"krr",
     "email":"krr@gmail.com"
  },
  {
     "id":"9",
     "name":"yogi",
     "username":"yr",
     "email":"yr@gmail.com"
  },
  {
     "id":"10",
     "name":"kavish",
     "username":"kvi",
     "email":"kvi@gmail.com"
  },
  {
     "id":"11",
     "name":"kaviya",
     "username":"kaviya",
     "email":"kaviya@gmail.com"
  },
  {
     "id":"12",
     "name":"bharti",
     "username":"bh",
     "email":"bh@gmail.com"
  }
     ],
    "success":1
   }

my logcat error...............

以下代码中的

错误.......

// Add the TableRow to the TableLayout
    tl.addView(tr, new TableLayout.LayoutParams(
            LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT));

2 个答案:

答案 0 :(得分:0)

您正在从JSONArray结果中解析String,但它是JSONOject所以您必须像这样传递...

JSONObject jObj = new JSONObject(result);
JSONArray jArray =jObj.getJSONArray("Users");
for (int i = 0; i < jArray.length(); i++) {
    JSONObject json_data = jArray.getJSONObject(i);
    Users user = new Users();
    user.setId(json_data.getInt("id"));
    user.setName(json_data.getString("name"));
    user.setUsername(json_data.getString("username"));
    user.setEmail(json_data.getString("email"));
    users.add(user);
}

答案 1 :(得分:0)

您在表格布局中添加行的方式可以将多个TableRow实例添加到tableLayout对象中

尝试在代码中添加多行,多次添加单行:

尝试以下代码:

void addHeader(){
    /** Create a TableRow dynamically **/
    tr = new TableRow(this);

    /** Creating a TextView to add to the row **/
    label = new TextView(this);
    label.setText("Name");
    label.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    label.setPadding(5, 5, 5, 5);
    label.setBackgroundColor(Color.RED);
    LinearLayout Ll = new LinearLayout(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(5, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    Ll.addView(label,params);
    tr.addView(Ll); // Adding textView to tablerow.


     tr1=new TableRow(this);
    /** Creating Qty Button **/
    TextView uname = new TextView(this);
    uname.setText("Username");
    uname.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    uname.setPadding(5, 5, 5, 5);
    uname.setBackgroundColor(Color.RED);
    L2 = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    L2.addView(uname,params);
    tr1.addView(L2); // Adding textview to tablerow.

    // Add the TableRow to the TableLayout
    tl.addView(tr);
    tl.addView(tr1);


     tr2=new TableRow(this);

    /** Creating Qty Button **/
    TextView email = new TextView(this);
    email.setText("email");
    email.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
            LayoutParams.WRAP_CONTENT));
    email.setPadding(5, 5, 5, 5);
    email.setBackgroundColor(Color.RED);
    L3 = new LinearLayout(this);
    params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.WRAP_CONTENT);
    params.setMargins(0, 5, 5, 5);
    //Ll.setPadding(10, 5, 5, 5);
    L3.addView(email,params);
    tr2.addView(L3); // Adding textview to tablerow.

    // Add the TableRow to the TableLayout
    tl.addView(tr2);
  }

希望这对你有用。