以编程方式添加 table 行 android

add table row programmatically android

我的代码总是给出空指针异常

JSON 接收数据正常

这是我的图书馆class

package com.jaggu.sitams;

public class library extends Activity {

    ConnectionDetector cd;
    Context c;
    ProgressDialog pd;
    String jsonResult;
    TableRow row;
    TableLayout table_layout;
    Serverconnect2 sc;
    JSONArray arr;
    String url="http://sitams.url.ph/sitams/default.php",result;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar ab = getActionBar();
        if (ab != null) {
            ab.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC")));
        }
        setContentView(R.layout.activity_library);
        this.table_layout=(TableLayout) findViewById(R.id.tablelayout1);
       dummyfun();
    }
    void dummyfun()
    {
        this.cd=new ConnectionDetector(getApplicationContext());

        if (!this.cd.isConnectingToInternet())
        {
            Toast.makeText(getApplicationContext(),"Please check your internet connection",Toast.LENGTH_LONG).show();
        }
        else
        {
            Log.i("refresh","its running");
            sc=new Serverconnect2(this,getApplicationContext());
            sc.execute(url);
        }

    }
    void getval(JSONObject json) {
        //json values used here
        JSONObject jc;
        Log.i("hi","got here");
        this.arr = json.optJSONArray("lib");
        try {
            for (int i = 0; i <arr.length(); i++) {

                this.row = new TableRow(this);
                this.row.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT,
                        TableRow.LayoutParams.WRAP_CONTENT));
                for (int j =0; j <=1; j++) {

                    jc = arr.getJSONObject(i);

                    TextView tv = new TextView(this);
                    //tv.setBackgroundResource(R.drawable.cell_shape);
                    tv.setPadding(5, 5, 5, 5);
                    tv.setText(jc.get("book").toString());
                    Log.i("book",jc.get("book").toString() );

                    this.row.addView(tv);

                }

                this.table_layout.addView(this.row);
            }
        }
        catch (JSONException e) {
            e.printStackTrace();
            Log.i("hello", "error");
        }
        catch(Exception e1)
        {
            e1.printStackTrace();
        }
    }





    public class Serverconnect2 extends AsyncTask<String, Void, String> {
        Activity a;
        String jsonResult;
        ProgressDialog pd;
        Context c;
        Exception e;
        public Serverconnect2(Activity a, Context context)
        {
            this.a=a;
            this.c=context;
        }
        @Override
        protected void onPreExecute()
        {
            pd= ProgressDialog.show(a,null,"Loading...",true);
            pd.setCancelable(false);
            pd.show();
        }
        @Override
        protected void onPostExecute(String result)
        {
            super.onPostExecute(result);
            pd.dismiss();
            if(e!=null){
                Toast.makeText(a, ""+e,Toast.LENGTH_LONG).show();
            }
            try {
                getval(new JSONObject(result));
            } catch (JSONException e1) {
                e1.printStackTrace();
            }

        }


        @Override
        protected String doInBackground(String... arg0) {


            try
            {
                HttpParams hp=new BasicHttpParams();
                HttpConnectionParams.setConnectionTimeout(hp, 20 * 1000);
                HttpConnectionParams.setSoTimeout(hp,30*1000);
                HttpClient httpclient=new DefaultHttpClient(hp);
                HttpGet httppost=new HttpGet("http://sitams.16mb.com/sitams/lib.php");
                HttpResponse response=httpclient.execute(httppost);
                jsonResult=InputStreamToString(response.getEntity().getContent()).toString();
            }
            catch(ClientProtocolException e)
            {
                this.e=e;
                Log.i("error",""+e);
                return null;
            }
            catch(IOException e){
                this.e=e;
                Log.i("error",""+e);
                return null;
            }
            catch(Exception e)
            {
                this.e=e;
                Log.i("error", "" + e);
                return null;
            }
            return jsonResult;
        }
        private StringBuilder InputStreamToString(InputStream is) {

            String rLine="";
            StringBuilder answer=new StringBuilder();
            BufferedReader rd=new BufferedReader(new InputStreamReader(is));
            try
            {
                while((rLine=rd.readLine())!=null){
                    answer.append(rLine);
                }
            }

            catch(IOException e)
            {
                e.printStackTrace();
            }
            return answer;
        }

    }


}

这是我遇到的错误。

02-14 00:28:47.421 6860-6860/com.jaggu.sitams W/System.err: java.lang.NullPointerException
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at com.jaggu.sitams.library.getval(library.java:108)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at com.jaggu.sitams.library$Serverconnect2.onPostExecute(library.java:152)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at com.jaggu.sitams.library$Serverconnect2.onPostExecute(library.java:125)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.os.AsyncTask.finish(AsyncTask.java:631)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.os.AsyncTask.access0(AsyncTask.java:177)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.os.Looper.loop(Looper.java:174)
02-14 00:28:47.441 6860-6860/com.jaggu.sitams W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:4952)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
02-14 00:28:47.451 6860-6860/com.jaggu.sitams W/System.err:     at dalvik.system.NativeStart.main(Native Method)

我认为函数 getVal() 在变量 table_layout 初始化之前被调用。请输入完整的 Activity 代码。