2016-02-26 83 views
1

我目前正在Android下製作一個應用程序,使我能夠連接一個用戶。我使用普通的android服務器請求。我把我的存儲服務器,看,如果輸入的用戶在BDD當前註冊在一個PHP文件,但它不工作...Android製作服務器請求

這是我的PHP文件:

<?php 

$con = mysqli_connect("localhost", "user", "userpass", "Android"); 

$username = $_POST["username"]; 
$password = $_POST["password"] 

$statement = mysqli_prepare($con, "SELECT * FROM Utilisateur where username = ? AND password = ?"); 


mysqli_stmt_bind_param($statement, "ss", $username, $password); 
mysqli_stmt_execute($statement); 

mysqli_stmt_store_result($statement); 
mysqli_stmt_bind_result($statement, $userID, $name, $username, $mail, $password, $adresse, $ville, $zipCode); 

$user = array(); 

while(mysqli_stmt_fetch($statement)){ 
    $user[name] = $name; 
    $user[username] = $username; 
    $user[mail] = $mail; 
    $user[password] = $password; 
    $user[adresse] = $adresse; 
    $user[ville] = $ville; 
    $user[zipCode] = $zipCode; 
} 

echo json_encode($user); 

mysqli_stmt_close($statement); 

mysqli_close($con); 
?> 

這是我在Java中請求fonction(有用戶:密碼,因爲你需要以存取權限在我的服務器上的任何網頁進行身份驗證)

public static final int CONNECTION_TIMEOUT = 1000 * 15; 
public static final String SERVER_ADDRESS = "http://user:[email protected]/Android/"; 

public class fetchUserDataAsyncTask extends AsyncTask<Void, Void, User> { 
     User user; 
     GetUserCallBack userCallBack; 

     public fetchUserDataAsyncTask(User user, GetUserCallBack callBack) { 
      this.user = user; 
      this.userCallBack = callBack; 
     } 


     @Override 
     protected User doInBackground(Void... params) { 
      User returnedUser; 

      try { 

       URL url = new URL(SERVER_ADDRESS + "FetchUserData.php"); 
       HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
       conn.setRequestMethod("POST"); 

       Uri.Builder builder = new Uri.Builder().appendQueryParameter("username", user.username) 
         .appendQueryParameter("password", user.password); 

       String query = builder.build().getEncodedQuery(); 
       OutputStream os = conn.getOutputStream(); 
       BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8")); 
       writer.write(query); 
       writer.flush(); 
       writer.close(); 
       os.close(); 
       conn.connect(); 

       InputStream in = new BufferedInputStream(conn.getInputStream()); 

       String response = IOUtils.toString(in, "UTF-8"); 
       JSONObject jResponse = new JSONObject(response); 

       if (jResponse.length() == 0) { 
        returnedUser = null; 
       } else { 
        String name = jResponse.getString("name"); 
        String mail = jResponse.getString("mail"); 
        String adresse = jResponse.getString("adresse"); 
        String ville = jResponse.getString("ville"); 
        int zipCode = jResponse.getInt("zipCode"); 

        returnedUser = new User(name, user.name, user.password, mail, adresse, ville, zipCode); 


       } 
       return returnedUser; 


      } catch (IOException | JSONException e) { 
       e.printStackTrace(); 
      } 


      return null; 
     } 


     @Override 
     protected void onPostExecute(User returnedUser) { 
      progressDialog.dismiss(); 
      userCallBack.done(returnedUser); 
      super.onPostExecute(returnedUser); 
     } 

    } 

我開始了我在調試模式下應用程序,我逮住這個例外:

java.io.FileNotFoundException: http://user:[email protected]/Android/FetchUserData.php 

我甚至試圖在我的Web瀏覽器中對C/C進行C/C處理,並執行該文件。當然,它返回[]是因爲我沒有在我的電話中加入POST。

我完全失去了,因爲android對我來說是相當新的,我真的不知道在哪裏尋找解決方案來解決這個問題......如果有人可以幫助我解決這個問題,將非常感謝: )

乾杯, ASTRUS

+0

我想'的 「http://用戶:[email protected]/Android/」'不一個有效的服務器地址..嘗試使用''「http://62.210.193.223/Android/」' – ELITE

+0

我的建議是檢查如果url是否聯機或之前要打電話在android..try任何瀏覽如果其工作正確。 – ELITE

+0

我試過,我得到了完全相同的問題:/ – Astrus

回答

0

看來您使用基本驗證用於HTTP的安全性。提供用戶名和密碼不是爲您的請求提供基本憑據的好方法。

您需要設置正確的授權頭:

URLConnection uc = url.openConnection(); 
String userpass = username + ":" + password; 
String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes())); 
uc.setRequestProperty ("Authorization", basicAuth); 

參見:Connecting to remote URL which requires authentication using Java

+0

謝謝你的回答。我對Android很新,所以對我來說還不完全清楚。我應該在我旁邊添加下面的代碼: URL url = new URL(SERVER_ADDRESS +「FetchUserData.php」); HttpURLConnection conn =(HttpURLConnection)url.openConnection(); conn.setRequestMethod(「POST」); 或者我應該更換代碼? Astrus – Astrus

+0

不客氣。如果這是很好的答案,請驗證它以結束您的問題。 – Gut

+0

你只需要從SERVER_ADDRESS中刪除用戶名和密碼,並在conn.setRequestMethod(「POST」)之後將其放入代碼中。我沒有嘗試,但其他部分一定是好的 – Gut