2016-03-22 3 views
1

У меня возникла проблема, когда я пытался отправить данные через приложение на сервер.Android для Php-сервера с методом POST и httpurlconnection

Данные отправляются успешно с URL-адреса браузера ноутбука и браузера Url из эмулятора, только из-за того, что данные не могут отправляться с помощью приложения, я не могу понять, почему? Любая помощь, пожалуйста ...

class Connection extends AsyncTask<Void, Void, Void> 
    { 
     @Override 
     protected Void doInBackground(Void... params) 
     { 

//   JSONArray array = new JSONArray(); 
      JSONObject json = new JSONObject(); 
      try { 
       URL url = new URL("http://10.0.3.2/FixItApp/insert_user.php?username="+getUserName +"&password="+getPassword+"&store="+getStoreName+"&address="+getAddress+"&city="+getCity); 

       urlConnection = (HttpURLConnection) url.openConnection(); 
       urlConnection.setRequestMethod("POST"); 
       urlConnection.setDoInput(true); 
       urlConnection.setDoOutput(true); 
       urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 
       urlConnection.setRequestProperty("Host", "android.schoolportal.gr"); 
       urlConnection.connect(); 

       //setup send 

        OutputStream outputStream = urlConnection.getOutputStream(); 
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
        bufferedWriter.write(url.toString()); 
        bufferedWriter.flush(); 

        bufferedWriter.close(); 
        outputStream.close(); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if(urlConnection != null) 
       { 
        urlConnection.disconnect(); 
       } 
      } 
      return null; 
     } 

И мой файл РНР как этот

 <?php 

/* */ 

$myfile = fopen("newfile.txt", "w") or die("Unable to open file!"); 
$txt = "not set"; 
if(isset($_REQUEST)){ 

    $txt = serialize($_REQUEST); 
} 

fwrite($myfile, $txt); 
fclose($myfile); 

/* */ 



require_once "DatabaseConnection.php"; 
$result = null; 

if ($_GET) { 
    // User table attribute 
    $name = filter_input(INPUT_GET, "username", FILTER_SANITIZE_STRING); 
    $password = filter_input(INPUT_GET, "password", FILTER_SANITIZE_STRING); 
    $address = filter_input(INPUT_GET, "address", FILTER_SANITIZE_STRING); 
    $store = filter_input(INPUT_GET, "store", FILTER_SANITIZE_STRING); 
    $city = filter_input(INPUT_GET, "city", FILTER_SANITIZE_STRING); 



    if(is_null($store) || is_null($name) || is_null($password)){ 
    // do nothing 
    } 
    else{ 
     $select_ExistUser = @"SELECT username from users WHERE username = '$name'"; 
     $resultUser = selectQuery($select_ExistUser); 
     if(count($resultUser)==0) 
     { 
      $query_one = "INSERT INTO users(username, password, store_name, address, city) 
         VALUES('$name','$password', '$store','$address','$city')"; 
      $result = insertQuery($query_one); 
      $insert_id = $db->insert_id; 

      if($insert_id){ 

      } 

     } 
     else 
     { 
      //nothing 
     } 

    } 
} 
     if ($result) { 
     $arr= [ 
      "result" => $insert_id, 
      "status_message" => "OK", 
      "status_code" => 1 
     ]; 
    } else { 
     $arr = [ 
      "result" => $result, 
      "status_message" => "RECORD EXIST", 
      "status_code" => -1 
     ]; 
    } 
    echo json_encode($arr); 

Здесь я звоню класс Коммутация

new Connection().execute(); 
+0

Является ли ваше устройство и сервер в одной сети? Я имею в виду, что ваш URL-адрес: http: // localhost/.... Можете ли вы получить доступ к этому URL-адресу, используя браузер вашего Android-устройства? Сообщение об ошибке сообщает, что устройство не может подключиться к localhost. Если вы не в той же сети, то размещайте свой сервер на каком-то свободном хосте в Интернете, а затем повторите попытку. –

+0

Да, но не удается получить доступ к URL-адресу с помощью Emulator Browser –

+0

смена localhost на 10.0.3.2 Я могу получить доступ к URL-адресу из браузера эмулятора ... но все еще не получаю данные на стороне сервера –

ответ

0

Ваша проблема будет: доступ к локальному хосту из компьютер, на котором запущен эмулятор Android.

Попробуйте использовать 10.0.2.2 вместо локального хоста

Две ссылки, которые могут дать вам более подробную информацию:

How to connect to my http://localhost web server from Android Emulator in Eclipse

http://developer.android.com/tools/devices/emulator.html#networkaddresses

+0

Теперь с помощью 10.0. 3.2 данные отправляются успешно через URL-адрес браузера эмулятора, но не через приложение. –

+0

Похоже, что ваши параметры переданы неправильно. Вы делаете POST со всем своим URL-адресом в качестве контента http://stackoverflow.com/questions/9767952/how-to-add-parameters-to-httpurlconnection-using-post –

+0

Сервер все еще не принимает anyThing –

0

Не использовать предопределенные классы "Connection". Он предопределен в java, android. Изменение «Connection» имя класса ур собственное имя класса и вызвать ур класс AsyncTask следующим

new ExampleTask().execute(); 

private class ExampleTask extends AsyncTask<Void, Void, Void>{ }

Следуйте этому учебнику в link, чтобы получить возможность отправлять PARAMS к серверу

+0

Everyting is ook only issue io получить ответ от webservice –

+0

так, любезно скажите мне, как получить ответ от webservice –

0

Ваш AsyncTask ...

class Connection extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       String store = "Store"; 
       URL url = new URL("http://10.0.3.2/FixItApp/insert_user.php?" + "username=" + getUserName + "&password=" + getPassword + "&store=" + getStoreName + "&address=" + getAddress + "&city=" + getCity + "&foo=" + store); 
       urlConnection = (HttpURLConnection) url.openConnection(); 

       urlConnection.setDoInput(true); 
       urlConnection.setDoOutput(true); 
       urlConnection.setRequestProperty("Content-Type", "application/json;charset=utf-8"); 
       urlConnection.setRequestProperty("Host", "android.schoolportal.gr"); 

       urlConnection.connect(); 
       //setup send 


       OutputStream outputStream = urlConnection.getOutputStream(); 
       BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8")); 
       bufferedWriter.write(url.toString()); 
       bufferedWriter.flush(); 

       Log.i(" Output After Flush Data:::::", url.toString()); 

       int statusCode = urlConnection.getResponseCode(); 
       if (statusCode == HttpURLConnection.HTTP_UNAUTHORIZED) { 
        Log.i("Hamza", String.valueOf(statusCode)); 
       } else { 
        Log.d("Hamza", String.valueOf(statusCode)); 
       } 

       bufferedWriter.close(); 
       outputStream.close(); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } finally { 
       if (urlConnection != null) { 
        urlConnection.disconnect(); 
       } 
      } 
      return null; 
     } 

AsyncTask вашего MainActivity ...

class Connection extends AsyncTask<String, Void, String> { 

     StringBuilder result = new StringBuilder(); 


     @Override 
     protected String doInBackground(String... params) { 
      try { 
       URL url = new URL("your url"); 
       httpUrlConnection = (HttpURLConnection) url.openConnection(); 
       InputStream in = new BufferedInputStream(httpUrlConnection.getInputStream()); 
       BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        result.append(line); 
       } 
       in.close(); 
       reader.close(); 
       } 

// Here Convert JasonResponse to String and use it as Your reqirement 

      } catch (MalformedURLException e1) { 
       e1.printStackTrace(); 
      } catch (JSONException e1) { 
       e1.printStackTrace(); 
      } catch (IOException e1) { 
       e1.printStackTrace(); 
      } 
      return null; 
     } 
    } 
Смежные вопросы