J'essaie de connecter mon application Android au serveur, mais je reçois des erreurs et je ne sais pas ce qui ne va pas.connexion à la base de données du serveur dans Android
Voici ma classe MainActivity:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
JsonReader jsonReader=new JsonReader(new JsonReader.AsyncResponse() {
@Override
public void processfinish(JSONObject output) {
Gson gson=new Gson();
String message=gson.toJson(output);
Toast.makeText(getApplicationContext(),"this is "+message,Toast.LENGTH_LONG).show();
}
});
jsonReader.execute();
} catch (IOException e) {
e.printStackTrace();
}catch (Exception e){
e.printStackTrace();
}
}
}
et c'est ma classe JsonReader:
public class JsonReader extends AsyncTask<String,String,JSONObject>{
final static String myurl="http://example.com";
public interface AsyncResponse{
void processfinish(JSONObject output);
}
public AsyncResponse delegate = null;
public JsonReader(AsyncResponse delegate){
this.delegate = delegate;
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
}
finally {
is.close();
}
}
@Override
protected JSONObject doInBackground(String... strings) {
try {
JSONObject s = readJsonFromUrl(myurl);
return s;
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (JSONException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
delegate.processfinish(jsonObject);
}
}
J'ai créé AsyncResponse à l'aide de ce guide: How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?
Et mon code serveur PHP:
<?php
$dbhost = "myhost";
$dbuser = "myuser";
$dbname = "myname";
$dbpass = "mypassword";
$connect_db = mysql_connect ($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname,$connect_db);
if ($connect_db){
$result= mysql_query("SELECT * FROM `ask` ",$connect_db)or die(mysql_error());
while($row = mysql_fetch_array($result))
{
$qa=new StdClass();
$qa->Question=$row['Question'];
$qa->Answer=$row['Answer'];
$qa->Answer2=$row['Answer2'];
$qa->Answer3=$row['Answer3'];
$qa->Answer4=$row['Answer4'];
echo "<br />";
$rses=json_encode($qa);
echo $rses;
}
}else{
echo "error in connecting db";
}
?>
Lorsque je démarre mon application, il affiche "this is null", mais lorsque j'ouvre mon code PHP dans le navigateur, il affiche correctement les données. Quel est le problème?
MISE À JOUR:
i utilisé une autre URL et son travaillé. donc le problème est dans mes codes php.i retiré echo "<br />";
et l'a ouvert sur le navigateur.le résultat était {"Question":"question","Answer":"a","Answer2":"b","Answer3":"c","Answer4":"d"}
je ne suis pas professionnel sur le format json mais je pense que son format n'est pas correct.Comment puis-je résoudre ce problème?
Quelles erreurs avez-vous obtenir? –
l'application compile sans crash et affiche un toast avec du texte "this is null" mais je m'attends à voir "this is" + json data du server.and dans logcat il montre "E/Surface: getSlotFromBufferLocked: tampon inconnu: 0xeb1cb8a0" j'ai cherché pour cela et il semble Android 6.0.0 bug mais j'ai testé sur Android 4.4.2 et le résultat était le même. –
Je suppose que votre myurl n'est pas * littéralement * 'http: // example.com' mais est en fait une véritable URL résolvable et accessible depuis internet, ou au moins depuis le réseau sur lequel l'appareil est allumé? – alzee