Android:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'int java.lang.String.length()'

时间:2016-08-20 04:39:15

标签: android json

我的代码抛出NullPointerException。

这是我的java代码:

public class DbselectActivity extends Activity
{
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = (Button) findViewById(R.id.button1);
        button.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View view)
            {
                String result = null;
                InputStream is = null;

                try{
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://192.168.1.0:81/selectall.php");

                    HttpResponse response = httpclient.execute(httppost);

                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();

                    Log.e("log_tag", "connection success ");
                    //   Toast.makeText(getApplicationContext(), "pass", Toast.LENGTH_SHORT).show();
                }
                catch(Exception e)
                {
                    Log.e("log_tag", "Error in http connection "+e.toString());
                    Toast.makeText(getApplicationContext(), "Connection fail", Toast.LENGTH_SHORT).show();
                }
                //convert response to string
                try
                {
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                    StringBuilder sb = new StringBuilder();
                    String line = null;
                    while ((line = reader.readLine()) != null)
                    {
                        sb.append(line + "\n");
                        //  Toast.makeText(getApplicationContext(), "Input Reading pass", Toast.LENGTH_SHORT).show();
                    }
                    is.close();
                    result=sb.toString();
                }
                catch(Exception e)
                {
                    Log.e("log_tag", "Error converting result "+e.toString());
                    Toast.makeText(getApplicationContext(), " Input reading fail", Toast.LENGTH_SHORT).show();
                }
                //parse json data
                try
                {
                    JSONArray jArray = new JSONArray(result);
                    String re=jArray.getString(jArray.length()-1);
                    TableLayout tv=(TableLayout) findViewById(R.id.table);
                    tv.removeAllViewsInLayout();

                    int flag=1;

                    for(int i=-1;i<jArray.length()-1;i++)
                    {
                        TableRow tr=new TableRow(DbselectActivity.this);

                        tr.setLayoutParams(new LayoutParams(
                                LayoutParams.FILL_PARENT,
                                LayoutParams.WRAP_CONTENT));

                        if(flag==1)
                        {
                            TextView b6=new TextView(DbselectActivity.this);
                            b6.setText("ID");
                            b6.setTextColor(Color.BLUE);
                            b6.setTextSize(15);
                            tr.addView(b6);

                            TextView b19=new TextView(DbselectActivity.this);
                            b19.setPadding(10, 0, 0, 0);
                            b19.setTextSize(15);
                            b19.setText("Name");
                            b19.setTextColor(Color.BLUE);
                            tr.addView(b19);

                            TextView b29=new TextView(DbselectActivity.this);
                            b29.setPadding(10, 0, 0, 0);
                            b29.setText("no");
                            b29.setTextColor(Color.BLUE);
                            b29.setTextSize(15);
                            tr.addView(b29);

                            tv.addView(tr);

                            final View vline = new View(DbselectActivity.this);
                            vline.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 2));
                            vline.setBackgroundColor(Color.BLUE);

                            tv.addView(vline);
                            flag=0;

                        }
                        else
                        {

                            JSONObject json_data = jArray.getJSONObject(i);

                            Log.i("log_tag","id: "+json_data.getInt("f1")+
                                    ", Username: "+json_data.getString("f2")+
                                    ", No: "+json_data.getInt("f3"));

                            TextView b=new TextView(DbselectActivity.this);
                            String stime=String.valueOf(json_data.getInt("f1"));
                            b.setText(stime);
                            b.setTextColor(Color.RED);
                            b.setTextSize(15);
                            tr.addView(b);

                            TextView b1=new TextView(DbselectActivity.this);
                            b1.setPadding(10, 0, 0, 0);
                            b1.setTextSize(15);
                            String stime1=json_data.getString("f2");
                            b1.setText(stime1);
                            b1.setTextColor(Color.WHITE);
                            tr.addView(b1);

                            TextView b2=new TextView(DbselectActivity.this);
                            b2.setPadding(10, 0, 0, 0);
                            String stime2=String.valueOf(json_data.getInt("f3"));
                            b2.setText(stime2);
                            b2.setTextColor(Color.RED);
                            b2.setTextSize(15);
                            tr.addView(b2);

                            tv.addView(tr);

                            final View vline1 = new View(DbselectActivity.this);
                            vline1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1));
                            vline1.setBackgroundColor(Color.WHITE);
                            tv.addView(vline1);
                        }
                    }
                }
                catch(JSONException e)
                {
                    Log.e("log_tag", "Error parsing data "+e.toString());
                    Toast.makeText(getApplicationContext(), "JsonArray fail", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

我的PHP代码是:

    <?php

         $con = mysql_connect("localhost","root","");
         if (!$con)
           {
             die('Could not connect: ' . mysql_error());
           }

           mysql_select_db("ex1", $con);

           $i=mysql_query("select * from t1",$con);

           $num_rows = mysql_num_rows($i);

           $check='';
          while($row = mysql_fetch_array($i))
            {
                  $r[]=$row;
                  $check=$row['f1'];

             }

         if($check==NULL)
           {            
                      $r[$num_rows]="Record is not available";
                      print(json_encode($r));   
             }
            else
             {
                $r[$num_rows]="success";
                print(json_encode($r)); 
              } 
 mysql_close($con);               
    ?>

Logcat是:

  

致命的例外:主要                                                                              处理:com.example.dell.dbselect,PID:16779                                                                              java.lang.NullPointerException:尝试调用虚方法'int   空对象引用上的java.lang.String.length()'                                                                                  在org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)                                                                                  at org.json.JSONTokener.nextValue(JSONTokener.java:94)                                                                                  在org.json.JSONArray。(JSONArray.java:92)                                                                                  在org.json.JSONArray。(JSONArray.java:108)                                                                                  在   com.example.dell.dbselect.DbselectActivity $ 1.onClick(DbselectActivity.java:81)                                                                                  在android.view.View.performClick(View.java:5198)                                                                                  在android.view.View $ PerformClick.run(View.java:21147)                                                                                  在android.os.Handler.handleCallback(Handler.java:739)                                                                                  在android.os.Handler.dispatchMessage(Handler.java:95)                                                                                  在android.os.Looper.loop(Looper.java:148)                                                                                  在android.app.ActivityThread.main(ActivityThread.java:5417)                                                                                  at java.lang.reflect.Method.invoke(Native Method)                                                                                  在   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)                                                                                  在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)08

我已经尝试了很多,但同样的错误发生了。指导我。

1 个答案:

答案 0 :(得分:0)

评论此行,然后尝试

   String re=jArray.getString(jArray.length()-1);