kann keine Nachricht an Server senden

  • Antworten:3
Hauke Schrills
  • Forum-Beiträge: 67

13.01.2015, 23:15:50 via Website

Hallo Leute,

Ich sitze gerade daran in einer App Nachrichten über GCM zu versenden. Habe nach diesem Tutorial:

http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

gearbeitet. Alles funktioniert ganz wunderbar. Ich kann von meinem Browser über der Server Nachrichten an alle registrierten Devices senden.

Nun möchte ich aber aus der App heraus eine Nachricht senden.

Dafür habe ich die php-Datei send_message.php, welcher ich 'regId' und 'message_ übergebe.
Habe auch das im Browser probiert: es geht.

In dem Java Code gibt es in der KLasse ServerUtilities.java die Methode post(). Diese habe ich pubilc gemacht
und rufe sie nun so auf:

but_send.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            new PostDataAsyncTask().execute();
        }
    });


public class PostDataAsyncTask extends AsyncTask<String, String, String> {

    protected void onPreExecute() {
        super.onPreExecute();
        // do stuff before posting data
    }

    @Override
    protected String doInBackground(String... strings) {
        try {

                Map<String, String> params = new HashMap<String, String>();
                params.put("regId", strRegId);
                params.put("message", "Das ist eine Testnachricht");
                ServerUtilities.post(postSendUrl, params);

        } catch (NullPointerException e) {
            e.printStackTrace();
            Log.i("Error1", e.toString());


        } catch (Exception e) {
            e.printStackTrace();
            Log.i("Error2", e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(String lenghtOfFile) {
        // do stuff after posting data
    }

ich erhalte nach einger Zeit die Fehlermeldung:

Java.net.SocketException: revfrom failed: ETIMEDOUT (Connection timed out

Irgendwie komme ich hier nicht weiter
vielleicht habt Ihr einen Rat .

Danke und Gruß
HS

PS: hier noch die Methode post(

    public static void post(String endpoint, Map<String, String> params)
        throws IOException {

    URL url;
    try {
        url = new URL(endpoint);
    } catch (MalformedURLException e) {
        throw new IllegalArgumentException("invalid url: " + endpoint);
    }
    StringBuilder bodyBuilder = new StringBuilder();
    Iterator<Entry<String, String>> iterator = params.entrySet().iterator();
    // constructs the POST body using the parameters
    while (iterator.hasNext()) {
        Entry<String, String> param = iterator.next();
        bodyBuilder.append(param.getKey()).append('=')
                .append(param.getValue());
        if (iterator.hasNext()) {
            bodyBuilder.append('&');
        }
    }
    String body = bodyBuilder.toString();
    Log.v(TAG, "Posting '" + body + "' to " + url);
    byte[] bytes = body.getBytes();
    HttpURLConnection conn = null;
    try {
        Log.e("URL", "> " + url);
        conn = (HttpURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setUseCaches(false);
        conn.setFixedLengthStreamingMode(bytes.length);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type",
                "application/x-www-form-urlencoded;charset=UTF-8");
        // post the request
        OutputStream out = conn.getOutputStream();
        out.write(bytes);
        out.close();
        // handle the response
        int status = conn.getResponseCode();
        if (status != 200) {
            throw new IOException("Post failed with error code " + status);
        }
    } finally {
        if (conn != null) {
            conn.disconnect();
        }
    }
}

Danke

— geändert am 13.01.2015, 23:21:32

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.01.2015, 06:58:19 via App

Bitte poste mal die komplette Exception aus dem Log.

— geändert am 14.01.2015, 07:02:55

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

14.01.2015, 22:18:40 via Website

Danke für die ANtwort.

Ich habe jetzt den ganzen Tag immer wieder versucht die Fehlermeldung zu wiederholen. Aber jetzt hängt die App
im Task fest. Ich kann über den UI Thread auf andere Actrivities wechseln.
Gestern habe einen Error im Log erhalten ,timeout, Heute kommt diese Meldung nicht mehr . Er bleibt vorher hängen.

Edit

Falsch !! er schein nicht zu hängen sondern durchläuft den backgroundtask. Ich bekomme jedoch keine Nachricht gesendet.

— geändert am 14.01.2015, 22:44:42

Antworten
Hauke Schrills
  • Forum-Beiträge: 67

15.01.2015, 21:21:49 via Website

Habe es jetzt anders gelöst:

   protected String doInBackground(String... strings) {

        String strSendUrl=postSendUrl+strRegId+"&message=";
        String strMessage=edit_text.getText().toString();
        try {
            strSendUrl+= java.net.URLEncoder.encode(strMessage, "UTF-8");
        } catch (UnsupportedEncodingException e1) {
            // TODO Auto-generated catch block
            Log.i("ER", e1.toString());
        }

        HttpClient client = new DefaultHttpClient();
        HttpGet getRequest = new HttpGet(strSendUrl);
        HttpResponse responce;
        StatusLine statusLine;
        int statusCode;
        try {

            responce = client.execute(getRequest);
            statusLine = responce.getStatusLine();
            statusCode = statusLine.getStatusCode();

            if (statusCode != 200) {

                return null;

            }

       ....

Ich bin mir nur nicht sicher ob java.net.URLEncoder.encode auch alle Zeichen ohne Fehler verarbeitet.

Gruß Hauke

Antworten