java.lang.IllegalArgumentException:索引56处查询中的非法字符

时间:2015-03-13 11:29:22

标签: android eclipse

这是运行代码后引起的错误

03-13 16:43:00.901: E/AndroidRuntime(18994):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
03-13 16:43:00.901: E/AndroidRuntime(18994):    at java.lang.Thread.run(Thread.java:841)
03-13 16:43:00.901: E/AndroidRuntime(18994): Caused by: java.lang.IllegalArgumentException: Illegal character in query at index 56: http://suprabha.orgfree.com/ecg/temp.php?name=10&temper=   31,w=t
03-13 16:43:00.901: E/AndroidRuntime(18994):    at java.net.URI.create(URI.java:727)
03-13 16:43:00.901: E/AndroidRuntime(18994):    at org.apache.http.client.methods.HttpGet.<init>(HttpGet.java:75)
03-13 16:43:00.901: E/AndroidRuntime(18994):    at com.example.mobilehealthcare.Temperature$DownloadWebPageTask.doInBackground(Temperature.java:271)

java文件

package com.example.mobilehealthcare;


public class Temperature extends Activity {

    private static final String TAG = "bluetooth2";
     Button btnOn, btnOff;
      TextView txtArduino;
      Handler h;
      private GraphView mGraph;
      final int RECIEVE_MESSAGE = 1;        // Status  for Handler
      private BluetoothAdapter btAdapter = null;
      private BluetoothSocket btSocket = null;
      private StringBuilder sb = new StringBuilder();

      private ConnectedThread mConnectedThread;

      // SPP UUID service
      private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

      // MAC-address of Bluetooth module (you must edit this line)
     // private static String address = "00:12:09:29:42:57";

     // private static String address = "00:15:83:15:A3:10";

     // private static String address = "20:13:07:12:04:17";

      String sdop = "";
      String pd = "";

      String s1,sa,s1nom,sakom;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temperature);

        SharedPreferences pre = getSharedPreferences("pref", 0);
        s1 = pre.getString("savedDatasd", "10");
        s1nom = pre.getString("savedDatad", "10");

         mGraph = (GraphView)findViewById(R.id.grap);
         txtArduino = (TextView)findViewById(R.id.texView1);

            mGraph.setMaxValue(1024);
            h = new Handler() {
                public void handleMessage(android.os.Message msg) {
                    switch (msg.what) {
                    case RECIEVE_MESSAGE:                                                   // if receive massage
                        byte[] readBuf = (byte[]) msg.obj;
                        String strIncom = new String(readBuf, 0, msg.arg1);                 // create string from bytes array

                        sb.append(strIncom);                                                // append string
                       // int endOfLineIndex = sb.indexOf("\r\n");                            // determine the end-of-line
                        int endOfLineIndex = sb.indexOf("/"); 
                        if (endOfLineIndex > 0) {                                            // if end-of-line,
                            String sbprint = sb.substring(0, endOfLineIndex);               // extract string
                            Toast.makeText(getApplicationContext(), "received message"+"----"+sbprint, 30).show();
                            sb.delete(0, sb.length());                                      // and clear
                            txtArduino.setText(sbprint);            // update TextView
                           // final int s = Integer.parseInt(sbprint);
                           //   mGraph.addDataPoint(s);
                            sdop+= txtArduino.getText().toString()+","; 
                        }

                        break;
                    }
                };
            };

            btAdapter = BluetoothAdapter.getDefaultAdapter();       // get Bluetooth adapter
            checkBTState();

    }

    public void tyre(View v)
    {
        mConnectedThread.write("t"); 
        Toast.makeText(this, "waid for values to be received", Toast.LENGTH_SHORT).show();
    }
     private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
          if(Build.VERSION.SDK_INT >= 10){
              try {
                  final Method  m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
                  return (BluetoothSocket) m.invoke(device, MY_UUID);
              } catch (Exception e) {
                  Log.e(TAG, "Could not create Insecure RFComm Connection",e);
              }
          }
          return  device.createRfcommSocketToServiceRecord(MY_UUID);

    }

      @Override
      public void onResume() {
        super.onResume();

        Log.d(TAG, "...onResume - try connect...");

        // Set up a pointer to the remote node using it's address.
        BluetoothDevice device = btAdapter.getRemoteDevice(s1);

        // Two things are needed to make a connection:
        //   A MAC address, which we got above.
        //   A Service ID or UUID.  In this case we are using the
        //     UUID for SPP.

        try {
            btSocket = createBluetoothSocket(device);
        } catch (IOException e) {
            errorExit("Fatal Error", "In onResume() and socket create failed: " + e.getMessage() + ".");
        }

        // Discovery is resource intensive.  Make sure it isn't going on
        // when you attempt to connect and pass your message.
        btAdapter.cancelDiscovery();

        // Establish the connection.  This will block until it connects.
        Log.d(TAG, "...Connecting...");
        try {
          btSocket.connect();
          Log.d(TAG, "....Connection ok...");
        } catch (IOException e) {
          try {
            btSocket.close();
          } catch (IOException e2) {
            errorExit("Fatal Error", "In onResume() and unable to close socket during connection failure" + e2.getMessage() + ".");
          }
        }

        // Create a data stream so we can talk to server.
        Log.d(TAG, "...Create Socket...");

        mConnectedThread = new ConnectedThread(btSocket);
        mConnectedThread.start();
      }

      @Override
      public void onPause() {
        super.onPause();

        SharedPreferences preferences = getSharedPreferences("pref", 0);
        SharedPreferences.Editor editor = preferences.edit();

        //"savedData" is the key that we will use in onCreate to get the saved data
        //mDataString is the string we want to save
       // editor.putString("savedDatasd", sa);
      //  editor.putString("savedDatad", sakom); 


        // commit the edits
        editor.commit();
        Log.d(TAG, "...In onPause()...");

        try     {
          btSocket.close();
        } catch (IOException e2) {
          errorExit("Fatal Error", "In onPause() and failed to close socket." + e2.getMessage() + ".");
        }
      }

      private void checkBTState() {
        // Check for Bluetooth support and then check to make sure it is turned on
        // Emulator doesn't support Bluetooth and will return null
        if(btAdapter==null) {
          errorExit("Fatal Error", "Bluetooth not support");
        } else {
          if (btAdapter.isEnabled()) {
            Log.d(TAG, "...Bluetooth ON...");
          } else {
            //Prompt user to turn on Bluetooth
            Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableBtIntent, 1);
          }
        }
      }

      private void errorExit(String title, String message){
        Toast.makeText(getBaseContext(), title + " - " + message, Toast.LENGTH_LONG).show();
        finish();
      }

      private class ConnectedThread extends Thread {
            private final InputStream mmInStream;
            private final OutputStream mmOutStream;

            public ConnectedThread(BluetoothSocket socket) {
                InputStream tmpIn = null;
                OutputStream tmpOut = null;

                // Get the input and output streams, using temp objects because
                // member streams are final
                try {
                    tmpIn = socket.getInputStream();
                    tmpOut = socket.getOutputStream();
                } catch (IOException e) { }

                mmInStream = tmpIn;
                mmOutStream = tmpOut;
            }

            public void run() {
                byte[] buffer = new byte[256];  // buffer store for the stream
                int bytes; // bytes returned from read()

                // Keep listening to the InputStream until an exception occurs
                while (true) {
                    try {
                        // Read from the InputStream
                        bytes = mmInStream.read(buffer);        // Get number of bytes and message in "buffer"
                        h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();     // Send to message queue Handler
                    } catch (IOException e) {
                        break;
                    }
                }
            }

            /* Call this from the main activity to send data to the remote device */
            public void write(String message) {
                Log.d(TAG, "...Data to send: " + message + "...");
                byte[] msgBuffer = message.getBytes();
                try {
                    mmOutStream.write(msgBuffer);
                } catch (IOException e) {
                    Log.d(TAG, "...Error data send: " + e.getMessage() + "...");    
                  }
            }
        }

      public void bus(View v)
      {
          Intent jkl = new Intent(this,Select.class);
          startActivity(jkl);
          finish();
      }

      private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
            @Override
            protected String doInBackground(String... urls) {
                String response = "";
                for (String url : urls) {
                    DefaultHttpClient client = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet(url);
                    try {
                        HttpResponse execute = client.execute(httpGet);
                        InputStream content = execute.getEntity().getContent();

                        BufferedReader buffer = new BufferedReader(
                                new InputStreamReader(content));
                        String s = "";
                        while ((s = buffer.readLine()) != null) {
                            response += s;
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                return response;
            }

            @Override
            protected void onPostExecute(String result) {

                //msg.setText(result);
                if (result.contains("success")) {

                    Toast.makeText(getApplicationContext(), "Values are isent to Doctor", 30).show();

                }else{Toast.makeText(getApplicationContext(), "Values are not sent to Doctor", 30).show();}

            }
        }

      public void sav(View v)
      {
        String e = "t";


            DownloadWebPageTask task = new DownloadWebPageTask();

            task.execute(new String[] { "http://suprabha.orgfree.com/ecg/temp.php?name="+s1nom+"&temper="+sdop+"w="+e });
      }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.temperature, menu);
        return true;
    }

}

是否由于PHP代码?
或者是这个java文件中的错误 哪个字符应该更改?
错误发生在下载网页任务中。   编辑:
这是具有相同概念的其他代码:
这没有错误

public class Register extends Activity {

EditText a,b,c,d,e,f,g;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);

    a = (EditText) findViewById(R.id.editname1);
    b = (EditText) findViewById(R.id.editpas1);
    c = (EditText) findViewById(R.id.age);
    d = (EditText) findViewById(R.id.editph1);
    e = (EditText) findViewById(R.id.editadd1);
    f = (EditText) findViewById(R.id.editem1);
    g = (EditText) findViewById(R.id.dph);




}

private class DownloadWebPageTask extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {
        String response = "";
        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(
                        new InputStreamReader(content));
                String s = "";
                while ((s = buffer.readLine()) != null) {
                    response += s;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {

        //msg.setText(result);
        if (result.contains("success")) {
            Intent i2 = new Intent(getApplicationContext(), Login.class);
            //i.putExtra("id",na);
            startActivity(i2);
        }else{Toast.makeText(getApplicationContext(), result, 30).show();}

    }
}

public void insert(View v)
{
    String h,i,j,k,l,m,n;
    h = a.getText().toString();
    i = b.getText().toString();
    j = c.getText().toString();
    k = d.getText().toString();
    l = e.getText().toString();
    m = f.getText().toString();
    n = g.getText().toString();

    DownloadWebPageTask task = new DownloadWebPageTask();

    task.execute(new String[] { "http://suprabha.orgfree.com/ecg/regis.php?name="+h+"&pass="+i+"&age="+j+"&ph="+k+"&addr="+l+"&em="+m+"&docph="+n });
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.register, menu);
    return true;
}

}

2 个答案:

答案 0 :(得分:0)

在我看来,查询网址“__http://suprabha.orgfree.com/ecg/temp.php?name = 10&amp; temper = 31,w = t”是程序遇到问题的地方。 第56个字符是“=”,它不应该是意外。然而,字符串中“31”之前的空格,是否可以成为关注点? 如果根据您的设计不需要空格,我建议您删除并尝试它。如果它们是必需的,我会建议在使用它之前将其转义。

希望它有所帮助。

注意:忽略网址前的不受欢迎的。这样做是为了防止超链接。

答案 1 :(得分:0)

问题是=符号后面的空格。您可以使用String:trimm()来避免这种情况,但不会解决其他问题,因此,要避免这种情况,请URL's使用java.net.URLEncoder来适应您需要的内容,例如:< / p>

URLEncoder.encode(url, "UTF-8");

在你的情况下:

HttpGet httpGet = new HttpGet(URLEncoder.encode(url, "UTF-8"));