2013-05-03 1 views
1

ce code fonctionne très bien sur émulateur, mais sur l'appareil réel, il donnejava.net.SocketException: temps de fonctionnement lorsque l'application en cours d'exécution sur l'appareil réel

java.net.SocketException: l'opération a expiré J'ai un script php en cours d'exécution sur mon serveur xampp.

package com.example.new1; 


import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.widget.TextView; 

    public class MainActivity extends Activity { 
    TextView tx; 
    StringBuilder stringBuilder; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    tx= (TextView)findViewById(R.id.text); 
} 

public void func(View view) 
{ 
    //tx.setText("Working fine till here."); 
    new FetchSQL().execute(); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
private class FetchSQL extends AsyncTask<String,Void,String> 

{ 

    @Override 
    protected String doInBackground(String... arg0) { 
      URL url = null; 
      BufferedReader reader = null; 

      String myUrl = "http://10.22.35.4:80/conc2.php"; 
     try 
     { url =new URL(myUrl); 
      HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
      connection.setRequestMethod("GET"); 
      connection.setReadTimeout(15*10000); 
      connection.connect(); 
      reader = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      stringBuilder = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) 
      { 
      stringBuilder.append(line + "\n"); 

      } 
     // TODO Auto-generated method stub 
     return stringBuilder.toString(); 
     } 
     catch(final Exception e) 
     { 
      return e.toString(); 
      } 

    } 

    protected void onPostExecute(final String result) 
    { 
     tx.setText(result); 
    } 


} 

}

quand je clique sur le bouton, il prend la amt de jeu ive de temps dans mon code, et ne puis me donner l'erreur dans mon textview. S'il vous plaît aider

mon code php.

<?php 
// attempt a connection 
$dbh = pg_connect("host=10.22.35.11 dbname=iwmp_dev2 user=postgres "); 

if (!$dbh) { 
die("Error in connection: " . pg_last_error()); 
}  

// execute query 
//$sql = $_POST['pLat']; 
$sql = "SELECT officer_name FROM iwmp_officer"; 

$result = pg_query($dbh, $sql); 
if (!$result) { 
die("Error in SQL query: " . pg_last_error()); 
}  
$array = array(); 
// iterate over result set 
// print each row 
while ($row = pg_fetch_assoc($result, null)) { 
    $i++; 
    $array = implode('+',$row); 
echo $array; 

} 


    // free memory 
    pg_free_result($result);  

    // close connection 
    pg_close($dbh); 
     ?>  
+0

Où avez-vous placé votre fichier php? – Nitish

+0

définir une expiration de connexion http pour votre connexion http http://stackoverflow.com/questions/3075506/http-connection-timeout-on-android-not-working – Raghunandan

+0

S'il vous plaît, reportez-vous à ce post, il peut être utile http: //stackoverflow.com/q/8240338/1292544 – Nitish

Répondre

1

L'exception java.net.SocketException survient lorsque le port que vous essayez d'atteindre n'est pas fermé ou n'est pas disponible. Cela prend le temps que vous avez spécifié pour la recherche du port, puis sort. Tout d'abord, essayez d'appeler ce service sur votre navigateur Web mobile pour vérifier s'il est disponible ou non. Si cela ne signifie pas que cela signifie que votre appareil n'est pas connecté au réseau sur lequel réside ce fichier.

Il se peut que votre pare-feu ne permette pas d'envoyer une requête ping à votre port. Lorsque vous travaillez avec votre émulateur, il fonctionne depuis le même PC, mais dans le cas de votre appareil réel, il se connecte via un réseau local et un certain temps Firewall ne le permet pas. Solution: débloquez cette requête sur le pare-feu ou essayez ceci en fermant votre pare-feu.