2015-12-31 2 views
0

Я новичок, создающий базовое приложение для входа в Android, используя 000webhost как мой сервер.

Моих Java-код:

ArrayList<NameValuePair> dataToSend = new ArrayList<>(); 
     dataToSend.add(new BasicNameValuePair("name", user.name)); 
     dataToSend.add(new BasicNameValuePair("email", user.email)); 
     dataToSend.add(new BasicNameValuePair("password", user.password)); 
     dataToSend.add(new BasicNameValuePair("leagueID", user.leagueID + "")); 

     HttpParams httpRequestParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpRequestParams, CONNECTION_TIMEOUT); 
     HttpConnectionParams.setSoTimeout(httpRequestParams, CONNECTION_TIMEOUT); 

     HttpClient client = new DefaultHttpClient(httpRequestParams); 
     HttpPost post = new HttpPost("http://subdomain.site88.net/register.php"); 

     try{ 
      post.setEntity(new UrlEncodedFormEntity(dataToSend)); 
      client.execute(post); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
     return null; 

Моего PHP код

<?php 
$con = mysqli_connect("mysql1.000webhost.com", "username", "password", "dbname"); 

/***I want to get this data from Java side of application***/ 
$name = $_POST["name"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$leagueID = $_POST["LeagueID"]; 

/***this works 
$name = "John Doe"; 
$email = "[email protected]"; 
$password = "password" 
$leagueID = 0; 
***/ 

echo "Hello";//place this here to check website to see if its showing up 

//Now we will add the name, email, password, and leagueID into a table called "user". 
$statement = mysqli_prepare($con, "INSERT INTO user (email, name, password, leagueID) VALUES (?, ?, ?, ?)"); 
mysqli_stmt_bind_param($statement, "sssi", $email, $name, $password, $leagueID); 
mysqli_stmt_execute($statement); 
mysqli_stmt_close($statement); 
//finish up by closing the connection 
mysqli_close($con); 
?> 

Если я проводное значение в PHP коду вместо использования метода $ _POST, он отправляется в базу данных в соответствии с просьбой , Однако кажется, что переменная $ _POST пуста. Я не совсем понимаю, почему это так. Возможно, у 000webhost есть какие-то настройки, которые не позволяют кому-то публиковать данные?

Кроме того, я знаю, что я использую устаревшие java-методы и как ненадежное мое хранилище паролей в настоящее время. Я изменю это в будущем, но сначала хотел бы узнать, как публиковать данные.

Заранее благодарен!

ответ

1

HttpClient теперь не рекомендуется, так что вы должны использовать HttpURLConnection вместо того, чтобы отправить запрос на запись к серверу.

Создайте новый класс, который отправит асинхронный запрос на отправку на ваш сервер.

public class YourAyncClass extends AsyncTask<String, Void, String>{ 


    public YourAyncClass(Context c){ 

     this.context = c; 
    } 

    public SaveCampaign(){} 

    protected void onPreExecute(){} 

    @Override 
    protected String doInBackground(String... arg0) { 

     try{ 
      URL url = new URL("Your url here");    

      JSONObject urlParameters = new JSONObject(); 
      urlParameters.put("name", "John Doe"); 
      urlParameters.put("email", "[email protected]"); 
      urlParameters.put("password", "xxxxxx"); 
      urlParameters.put("leagueId", "123-456"); 

      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("POST"); 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setConnectTimeout(15000); 
      connection.setReadTimeout(15000); 

      OutputStream os = connection.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getPostDataString(urlParameters)); 
      writer.flush(); 
      writer.close(); 
      os.close(); 

      int responseCode = connection.getResponseCode(); 

      if (responseCode == HttpURLConnection.HTTP_OK) { 

       BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 

       StringBuffer sb = new StringBuffer(""); 
       String line = ""; 

       while ((line = in.readLine()) != null) { 

        sb.append(line); 
        break; 
       } 

       in.close(); 
       return sb.toString(); 
      } 
      else { 
       return new String("New Exception : "+responseCode); 
      } 
     } 
     catch(Exception e){ 
      return new String("Exception: " + e.getMessage()); 
     } 
    } 

    protected void onPostExecute(String result){ 

    } 


    /*This method changes the json object into url encoded key-value pair*/ 
    public String getPostDataString(JSONObject params) throws Exception { 

     StringBuilder result = new StringBuilder(); 
     boolean first = true; 

     Iterator<String> itr = params.keys(); 

     while(itr.hasNext()){ 

      String key= itr.next(); 
      Object value = params.get(key); 

      if (first) 
       first = false; 
      else 
       result.append("&"); 

      result.append(URLEncoder.encode(key, "UTF-8")); 
      result.append("="); 
      result.append(URLEncoder.encode(value.toString(), "UTF-8")); 

     } 
     return result.toString(); 
    } 
} 

Теперь, чтобы использовать этот класс в методе необходимо реализовать следующий код в код:

new YourAsyncClass(context).execute(); 

выше строка кода вызывает метод Execute() класса AsyncTask и начинается выполнение вашего HTTP-вызова на сервер.

Смежные вопросы