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;
}
});
}
}
精彩评论