2017-05-08 3 views
-1

Ich komme mit einem bizarren Fehler in meiner Android-App, ich möchte eine POST-Anfrage machen, um Daten in einer MySQL-Datenbank zu speichern.POST-Anfrage funktioniert nicht auf Thread Android

Aber das Problem ist, dass die Anwendung beendet, wenn ich dies in einem Thread zu tun, und es gibt keine Angabe in dem Fehler, so ist es schwierig, dies zu reparieren.

Der Code ist unten:

thread = new Thread(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); 
         URL url = new URL("myurl"); 
         HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
         connection.setDoOutput(true); 
         connection.setRequestMethod("POST"); 
         connection.setRequestProperty("Content-type","application/json"); 

         JSONObject jsobj = new JSONObject(); 
         jsobj.put("pseudo",edit.getText().toString()); 
         jsobj.put("score",score); 

         DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
         wr.writeBytes(jsobj.toString()); 
         wr.flush(); 
         wr.close(); 

        } catch (IOException e) { 
         e.printStackTrace(); 
        }catch (JSONException je){ 
         je.printStackTrace(); 
        } 
       } 
      }); 
      thread.start(); 

Vielen Dank für die Hilfe, die Sie mir :) bekommen.

+0

setzen Sie Ihre Fehlerprotokoll hier –

+0

es scheint, dass ich Internet-Verbindung auf dem Gerät brauchen, damit ich die Anwendung zu sagen haben, dass er den Internet- –

+0

Natürlich braucht man brauche Internet-Erlaubnis. –

Antwort

0

versuchen diese

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

     String pseudo =""; 
     String score=""; 
     public CallWebService(String pseudo,String score){ 
      this.pseudo = pseudo; 
      this.score = score; 
     } 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

     } 

     @Override 
     protected String doInBackground(String... params) { 
      try { 
       android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND); 
       URL url = new URL("myurl"); 
       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoOutput(true); 
       connection.setRequestMethod("POST"); 
       connection.setRequestProperty("Content-type","application/json"); 

       JSONObject jsobj = new JSONObject(); 
       jsobj.put("pseudo",pseudo); 
       jsobj.put("score",score); 

       DataOutputStream wr = new DataOutputStream(connection.getOutputStream()); 
       wr.writeBytes(jsobj.toString()); 
       wr.flush(); 
       wr.close(); 

      } catch (IOException e) { 
       e.printStackTrace(); 
      }catch (JSONException je){ 
       je.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
     } 
    } 

und unter Code hinzufügen oben AsyncTask

`new CallWebService(edt.getText().toString(),score).execute();` 
+0

Unsinn. Siehst du nicht, dass OP schon einen Thread benutzt? – greenapps

0

Vor allem für solche Anwendungsfall auszuführen empfehle ich Ihnen eine AsyncTask seit zu verwenden, ist dies eine einfache Anfrage und AsyncTasks sind einfacher zu verwenden.

Zweitens, senden Sie einfach die Anfrage an den Server, aber nicht die Antwort erhalten, wenn also die Anfrage auf der Serverseite fehlschlägt oder Sie eine schlechte Anfrage machen, werden Sie davon nichts wissen. Sie können okhttp verwenden, um den Vorgang zu vereinfachen.

+0

Dies ist keine Antwort auf die Frage überhaupt. Bitte verwenden Sie Kommentare für Hinweise. – greenapps

0

Fügen Sie diese Zeile vor setContentView();

StrictMode.ThreadPolicy policy = new 
StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
setContentView(); 
+0

Sehr schlechte Beratung. Und nicht benötigt, da ein Thread verwendet wird. – greenapps

0

Danke Jungs, ich habe die Antwort für das Problem finden, müssen wir Internet-Erlaubnis für das Programm hinzufügen zu arbeiten. Also müssen wir den Internet-Erlaubnis auf Ihrem Manifest wie folgt hinzu:

<uses-permission android:name="android.permission.INTERNET"/> 
Verwandte Themen