通过Android向MySql发送和接收数据需要帮助

通过Android向MySql发送和接收数据需要帮助

问题描述:

我对android非常陌生。在这个程序中,我试图做到这一点,当在编辑文本中输入名字时,它会显示我已经创建的现有MySQL数据库中的人员信息。你能告诉我如何改善这一点,也无法弄清楚如何摆脱红色突出显示(有错误''是'无法解决')在“是”在线通过Android向MySql发送和接收数据需要帮助

更新*这是我的代码是怎样的。 “无法解决”的问题消失了。

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 
         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; 
      } 
     }); 
    } 
} 

我没有else语句但后来在代码中的“如果”被说成是一个死代码...我应该使用if语句有尝试statments内“是”在他们中?

问题是is在第一个try块内部被声明,这限制了它对该块的可见性。试试这个

// 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. 

这将工作,因为是将在try-except块之外声明。不要忘记添加一些错误检查,至少if (is != null)围绕在您使用is

编辑 - Eror检查,我的意思是:避免的错误让用户未处理的,这是不整洁,混乱和底线会是因为他们购买了你的比赛。徘徊无论它可以去错了,你应该做些什么来保护用户,这样

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:你的(是!= NULL)检查是在一个非常奇怪的地方。把它移到一个更好的位置,在我原来的答案中建议,见下文。

最后一个建议:不知道你使用的编辑器,但缩进是一个可怕的混乱,代码很难阅读没有合理的缩进。

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

你能给我何时以及如何使用,如果一个例子(是!= NULL),请? – Eric

+0

@Eric我必须说这个评论问题让我感到惊讶,但请参阅编辑。如果这个答案有助于你不要忘记投票/接受它。 – fvu

+0

不幸的是,如果我使用if!= null,它会说我必须改用“try/catch”语句。 – Eric