开发者

Need help on sending and receiving data through Android to MySql

开发者 https://www.devze.com 2023-04-02 09:35 出处:网络
I am very new to android. In this program, I\'m trying to make it so that when one types a first name in the edit text it will show the information of the person in an existing MySQL database I made a

I am very new to android. In this program, I'm trying to make it so that when one types a first name in the edit text it will show the information of the person in an existing MySQL database I made already. Can you tell me how to improve this and also I can't figure out how to get rid of the red highlight(has error "'is' cannot be resolved") on "is" at line

Updated* this is how my code looks like. The "cannot be resolved" problem is gone.

public class PS extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        final EditText et_Text = (Ed开发者_如何学GoitText) findViewById(R.id.et_Text);

        //add new KeyListener Callback (to record key input)
        et_Text.setOnKeyListener(new OnKeyListener() {
            //function to invoke when a key is pressed

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                //check if there is 
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    //check if the right key was pressed
                    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {

                        InputStream is = null;
                        String result = "";


                        //the name data to send
                        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                        nameValuePairs.add(new BasicNameValuePair("name", et_Text.getText().toString()));

                        //http post
                        if (is != null) {
                            try {

                                HttpClient httpclient = new DefaultHttpClient();
                                HttpPost httppost = new HttpPost("http://******/sampleDB/testSend.php");
                                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                HttpResponse response = httpclient.execute(httppost);
                                HttpEntity entity = response.getEntity();
                                is = entity.getContent();
                            } catch (Exception e) {
                                Log.e("log_tag", "Error in http connection " + e.toString());
                            }
                            //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");
                                }

                                is.close();

                                result = sb.toString();
                            } catch (Exception e) {
                                Log.e("log_tag", "Error converting result " + e.toString());
                            }

                            //parse json data
                            try {
                                JSONArray jArray = new JSONArray(result);
                                for (int i = 0; i < jArray.length(); i++) {
                                    JSONObject json_data = jArray.getJSONObject(i);
                                    Log.i("log_tag", "PersonID: " + json_data.getInt("PersonID")
                                            + ", FirstName: " + json_data.getString("FirstName")
                                            + ", LastName: " + json_data.getString("LastName")
                                            + ", Age: " + json_data.getInt("Age"));

                                }

                            } catch (JSONException e) {
                                Log.e("log_tag", "Error parsing data " + e.toString());
                            }
                            ;
                        }
                        et_Text.setText("");
                        //and clear the EditText control

                    }
                    return true;
                }

                return false;
            }
        });
    }
}

I don't have the else statement yet but then the code under the "if" is said to be a dead code... Should I use the if statement inside the try statments that have "is" in them?


The problem is that is was declared inside the first try block, which limits its visibility to that block. Try this

 // move is declaration before the try-catch
 InputStream is = null;
 try{
     ....
     // just use it here
     is = entity.getContent();
 }catch(Exception e){
     Log.e("log_tag", "Error in http connection "+e.toString());
 }
 // it will still be available here.

This will work because is will be declared outside of the try-except block. Don't forget to add some error checking, at least an if (is != null) around where you use is

EDIT - Eror checking, what I mean: avoid that errors get to the user unhandled, it's untidy, confusing and the bottom line will be that they buy your competition. Whereever it can go wrong you should do something to shield the user, like this

if (is != null) {
   // wrapped in if because this code assumes is exists
   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");
   }
   is.close();
} else {
   // do whatever you have to do to signal to the user that something went wrong.
}

EDIT2: your (is != null) check was at a very odd place. Moved it to a better spot, suggested in my original answer, see below.

And a last suggestion: no idea what editor you use, but indentation was a horrible mess, code is hard to read without reasonable indentation.

public class PS extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        final EditText et_Text = (EditText) findViewById(R.id.et_Text);

        //add new KeyListener Callback (to record key input)
        et_Text.setOnKeyListener(new OnKeyListener() {
            //function to invoke when a key is pressed

            public boolean onKey(View v, int keyCode, KeyEvent event) {
                //check if there is 
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    //check if the right key was pressed
                    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {

                        InputStream is = null;
                        String result = "";


                        //the name data to send
                        ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
                        nameValuePairs.add(new BasicNameValuePair("name", et_Text.getText().toString()));

                        //http post

                        try {

                            HttpClient httpclient = new DefaultHttpClient();
                            HttpPost httppost = new HttpPost("http://******/sampleDB/testSend.php");
                            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                            HttpResponse response = httpclient.execute(httppost);
                            HttpEntity entity = response.getEntity();
                            is = entity.getContent();
                        } catch (Exception e) {
                            Log.e("log_tag", "Error in http connection " + e.toString());
                        }

                        // At this point is should be set, if it isn't, tell user what went wrong
                        if (is != null) {
                            //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");
                                }

                                is.close();

                                result = sb.toString();
                            } catch (Exception e) {
                                Log.e("log_tag", "Error converting result " + e.toString());
                            }

                            //parse json data
                            try {
                                JSONArray jArray = new JSONArray(result);
                                for (int i = 0; i < jArray.length(); i++) {
                                    JSONObject json_data = jArray.getJSONObject(i);
                                    Log.i("log_tag", "PersonID: " + json_data.getInt("PersonID")
                                            + ", FirstName: " + json_data.getString("FirstName")
                                            + ", LastName: " + json_data.getString("LastName")
                                            + ", Age: " + json_data.getInt("Age"));

                                }

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

                            et_Text.setText("");
                            //and clear the EditText control
                        } else {
                            // Hey user, this went horribly wrong

                        }
                    }
                    return true;
                }

                return false;
            }
        });
    }
}
0

精彩评论

暂无评论...
验证码 换一张
取 消