2017-08-07 2 views
0

J'ai la base de données sur mon localhost (XAMPP), je fais l'application qui va chercher les données de la base de données. Je peux voir ma base de données dans le navigateur. Mais ne peut pas voir sur mon appareil Android. Pouvez-vous aider: j'ai ajouté la permission InternetImpossible d'extraire les données de ma base de données, serveur localhost

Voici mon code:

public class MainActivity extends AppCompatActivity { 

    String JSON_STRING; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 


    public void getJSON(View view){ 
     new BackgroundTask().execute(); 
    } 


    class BackgroundTask extends AsyncTask{ 

     String json_url; 
     @Override 
     protected void onPreExecute() { 
      json_url="http://10.0.2.2/ContactDB/readdata.php"; 
     } 

     @Override 
     protected String doInBackground(Object[] params) { 
      try { 
       URL url=new URL(json_url); 
       HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection(); 
       InputStream inputStream=httpURLConnection.getInputStream(); 
       BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); 

       StringBuilder stringBuilder=new StringBuilder(); 
       while((JSON_STRING=bufferedReader.readLine())!=null){ 
        stringBuilder.append(JSON_STRING+"\n"); 
       } 

       bufferedReader.close(); 
       inputStream.close(); 
       httpURLConnection.disconnect(); 
       return stringBuilder.toString().trim(); 


      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 


      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Object[] values) { 
      super.onProgressUpdate(values); 
     } 

     @Override 
     protected void onPostExecute(Object o) { 
      TextView textView = (TextView) findViewById(R.id.textview); 
      textView.setText((CharSequence) o); 
     } 
    } 
} 

Et ceci est ma part de serveur PHP, il fonctionne correctement, à mon avis quelque chose de mal avec mon JSON aller chercher une partie .

<?php 

$servername = "127.0.0.1"; 
$username = "root"; 
$password = "12345"; 
$dbname = "contactsdb"; 

// Create connection 
$connect = mysqli_connect($servername,$username,$password,$dbname); 

if ($connect === false){ 
    die ("Error:Couldn't connect"); 
} 

$sql = "SELECT * FROM contacts"; 
$result = mysqli_query($connect, $sql); 
$response = array(); 
while($row = mysqli_fetch_array($result)){ 
      $output[]=$row; 
} 

print json_encode($output); 

// Close connection 
mysqli_close($connect); 
?> 
+0

pouvez-vous ajouter votre structure json? –

+0

Sur le navigateur il ressemble à ceci [{"0": "1", "id": "1", "1": "Hakob", "nom": "Hakob", "2": "abc @ email .com "," email ":" [email protected] "}, {" 0 ":" 2 "," id ":" 2 "," 1 ":" Arsen "," nom ":" Arsen ", "2": "[email protected]", "email": "[email protected]"}] –

+0

utilisez retrofit et Gson =) – Natan

Répondre

0

oeil à cette méthode pour obtenir les données que demande GET

private static String makeHttpRequest(URL url) throws IOException { 
     String jsonResponse = ""; 
     if (url == null) { 
      return jsonResponse; 
     } 

     HttpsURLConnection urlConnection = null; 
     InputStream inputStream = null; 

     try { 
      //set up the connection 
      urlConnection = (HttpsURLConnection) url.openConnection(); 
      urlConnection.setReadTimeout(10000); 
      urlConnection.setConnectTimeout(15000); 
      urlConnection.setRequestMethod("GET"); 

      //connect 
      urlConnection.connect(); 

      //receive DataSend if the response code is ok 
      if (urlConnection.getResponseCode() == 200) { 
       inputStream = urlConnection.getInputStream(); 
       jsonResponse = readFromStream(inputStream); 
      } 

     } catch (IOException e) { 
      Log.e(LOG_TAG, "Problem retrieving the JSON results.", e); 
     } finally { 
      if (urlConnection != null) { 
       urlConnection.disconnect(); 
      } 
      if (inputStream != null) { 
       inputStream.close(); 
      } 
     } 
     return jsonResponse; 
    } 

et méthode readFromStream

/** 
    * Convert the {@link InputStream} into a String Which Contains the 
    * whole JSON response from the server 
    */ 
    private static String readFromStream(InputStream inputStream) throws IOException { 
     StringBuilder output = new StringBuilder(); 
     if (inputStream != null) { 
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, 
        Charset.forName("UTF-8")); 

      BufferedReader reader = new BufferedReader(inputStreamReader); 
      String line = reader.readLine(); 
      while (line != null) { 
       output.append(line); 
       line = reader.readLine(); 
      } 
     } 
     return output.toString(); 
    } 

Créer url

/** 
    * create a url from string 
    */ 
    private static URL createUrl(String StringUrl) { 
     URL url = null; 
     try { 
      url = new URL(StringUrl); 
     } catch (MalformedURLException e) { 
      Log.e(LOG_TAG, "Problem building the URL ", e); 
     } 
     return url; 
    } 

Mais il est préférable d'utiliser la modernisation bibliothèque pour récupérer des données vous pouvez trouver les documents ici

http://square.github.io/retrofit/

Et tutoriel ici pour

http://www.vogella.com/tutorials/Retrofit/article.html

0

Vous n'avez pas valide JSON. Ayant [] comme début de votre sortie, c'est un tableau. Donc, techniquement, vous avez un tableau avec 1 objet avec des nombres d'objets Json.

$response = array(); <-- Un-used object. Why do you have an $output[]? Where did you declare it? 


while($row = mysqli_fetch_array($result)){ 
      $response[]=$row; 
} 

print json_encode($response); 

Vous devriez alors avoir un tableau d'objets json approprié;

+0

Je l'ai essayé mais n'obtiens pas un résultat, quel est le problème avec mon site PHP? –