En essayant avec le serveur client (récupérer des données mysql) avec l'aide d'un tutoriel, je reçois beaucoup d'erreurs. Je viens de lire quelques fils ici et je compris que la plus grande erreur que je reçoisAndroid DownloadFilesTask concept
erreur http connectionandroid.os.NetworkOnMainThreadException E/log_tag: résultat conversion erreur java.lang.NullPointerException
pourrait être parce que j'ai besoin d'une tâche d'assistance entre le thread et le gestionnaire.
J'ai le code suivant, je comprends ce concept et normalement cela devrait fonctionner.
package de.irgendwas;
import android.app.Activity;
import android.net.ParseException;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.appindexing.Action;
import com.google.android.gms.appindexing.AppIndex;
import com.google.android.gms.appindexing.Thing;
import com.google.android.gms.common.api.GoogleApiClient;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class MainActivity extends Activity {
private GoogleApiClient client;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/** Called when the activity is first created. */
String result = null;
InputStream is = null;
StringBuilder sb = null;
//http post
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://localhost/connect_db.php");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("log_tag", "connection established");
} catch (Exception e) {
Log.e("log_tag", "Error in http connection" + e.toString());
}
//convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
//paring data
int fd_id = 0;
String fd_name = "";
try {
JSONArray jArray = new JSONArray(result);
JSONObject json_data = null;
Toast.makeText(getBaseContext(), "1. try Block", Toast.LENGTH_LONG).show();
for (int i = 0; i < jArray.length(); i++) {
json_data = jArray.getJSONObject(i);
fd_id = json_data.getInt("artist");
fd_name = json_data.getString("title");
}
} catch (JSONException e1) {
Toast.makeText(getBaseContext(), "No Data Found", Toast.LENGTH_LONG).show();
} catch (ParseException e1) {
e1.printStackTrace();
}
//print received data
TextView t = (TextView) findViewById(R.id.text);
t.setText("ID: " + fd_id + " Name: " + fd_name);
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client = new GoogleApiClient.Builder(this).addApi(AppIndex.API).build();
}
/**
* ATTENTION: This was auto-generated to implement the App Indexing API.
* See https://g.co/AppIndexing/AndroidStudio for more information.
*/
public Action getIndexApiAction() {
Thing object = new Thing.Builder()
.setName("Main Page") // TODO: Define a title for the content shown.
// TODO: Make sure this auto-generated URL is correct.
.setUrl(Uri.parse("http://[ENTER-YOUR-URL-HERE]"))
.build();
return new Action.Builder(Action.TYPE_VIEW)
.setObject(object)
.setActionStatus(Action.STATUS_TYPE_COMPLETED)
.build();
}
@Override
public void onStart() {
super.onStart();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
client.connect();
AppIndex.AppIndexApi.start(client, getIndexApiAction());
}
@Override
public void onStop() {
super.onStop();
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
AppIndex.AppIndexApi.end(client, getIndexApiAction());
client.disconnect();
}
}
Je ne vais pas poster le script php sur le serveur, parce que si je l'appelle l'URL via un navigateur, il délivre mon testdata correctement, il devrait donc être bien.
Maintenant lors de l'exécution de l'application, je reçois les erreurs ci-dessus. En cherchant sur le web, j'ai trouvé le concept DownloadFilesTask, il semble que ce devrait être la solution. Mais je ne comprendrai pas, je ne suis pas capable de l'implémenter dans mon code. Quelqu'un peut-il aider ou est-il un bon tutoriel quelque part en dehors de celui sur developer.android.
non, j'ai changé le nom de l'URL originale avec localhost –
@ pia-sophie je l'ai suggéré une modification, parce que je pense que cette information est nécessaire dans la question, car elle ne peut être supposée. Pour éviter toute autre personne suivant ce chemin. – Bantu
J'ai changé le script en utilisant HttpURLConnection, maintenant cela fonctionne assez bien aussi en combinaison avec AsyncTask, donc je l'ai eu. –