2016-07-27 23 views
1

Ich habe eine Tabelle namens "LocalPhoneNum" im Backendless-Server. Es enthält drei Objekte. Jeder mit einem Namen, Telefonnummer und E-Mail. Alle drei dieser Objekte haben dieselbe E-Mail. So sieht es aus.Android Studio - Löschen von Massendaten aus Backendless-Daten Tabelle

enter image description here

Ich brauche, um herauszufinden, wie alle drei der Objekte aus meiner Android-Anwendung mit der „Bulk-Löschen“ in der API Backendless REST gefunden programmatisch löschen: https://backendless.com/documentation/data/rest/data_deleting_data_objects.htm

Ich mag würde Das Löschen findet statt, sobald die onCreateView() -Methode meines Fragments instanziiert wird. Meine Bewerbung ist sehr einfach. Ein Fragment wird gestartet, eine ASyncTask-Klasse wird aufgerufen, und die Daten werden im Hintergrund gelöscht. Mein Problem ist, dass ich nicht viel Erfahrung darin habe, diese Arten von Anrufen zu einem Server zu machen, und einfach nicht die korrekte Syntax dafür kenne. Ich habe überall gesucht, aber keine klare Antwort gefunden. Hier

ist das, was ich bisher:

  1. Mein Fragment Klasse enthält ein privates String genannt API_URL, die die entsprechende URL enthält die Objekte nach den Backendless Anweisungen hier zu löschen: enter image description here

Dies ist, was mein Fragment Klasse wie folgt aussieht:

public class ContactsFragments extends Fragment { 
private View view; 
private final String API_URL = "https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where%3DuserEmailID%[email protected]"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    view = inflater.inflate(R.layout.fragment_contacts_fragments, container, false); 

    new DeleteBulkFromBackEnd().execute(); 

    return view; 
}} 

Hier ist die AsyncTask() der Klasse, die die Arbeit zu tun, aufgerufen wird:

class DeleteBulkFromBackEnd extends AsyncTask<Void,Void,String>{ 
    StringBuilder stringBuilder; 

    @Override 
    protected String doInBackground(Void... params) { 
     HttpURLConnection urlConnection = null; 


     try { 
      URL url = new URL(API_URL); 
      urlConnection = (HttpURLConnection)url.openConnection(); 

     urlConnection.setRequestProperty("application-id","12345678"); 
      urlConnection.setRequestProperty("secret-key","12345678"); 
      urlConnection.setRequestProperty("application-type", "REST"); 
      urlConnection.connect(); 



     } catch (MalformedURLException e) { 

      e.printStackTrace(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     }finally { 
      urlConnection.disconnect(); 
     } 

     return null; 
    } 

} 

Meine Hauptfrage ist, was ich hier syntaktisch fehlt? Wenn ich die von meiner App verwendete URL (https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where%3DuserEmailID%[email protected]) in einen Browser kopiere und einfüge, wird folgende Seite angezeigt: {"code": 2002, "message": "Version ist deaktiviert oder hat falsche Anwendungsinformationen (Anwendungs-ID oder geheimer Schlüssel) angegeben) "}

klar, dass etwas fehlt, aber ich weiß nicht, wie die Verbindung von Punkt A nach Punkt B

Das Tutorial auch erwähnt Anfrage Header zu machen. Obwohl ich alle benötigten Informationen (Anwendungs-ID, Geheimschlüssel, App-Typ) im Tutorial (Link oben) habe, weiß ich nicht, wie ich sie in meinen Code integrieren soll.

Wenn jemand weiß, was ich falsch mache oder mir helfen könnte, würde ich es sehr schätzen. Hoffentlich ist das genug Details.

Antwort

2

Sie müssen die „setRequestProperty“ Methode auf dem HttpURLConnection Objekt verwenden:

urlConnection.setRequestProperty("application-id", "VALUE"); 
urlConnection.setRequestProperty("secret-key", "VALUE"); 

Außerdem muss die E-Mail-Adresse Wert in der URL (speziell in dem „where“ Argumente) durch einzelne Anführungszeichen gesetzt werden, Das muss auch URL-codiert sein. So muss es aussehen:

https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where=userEmailD%3D%27mark%40gmail.com%27 

Wenn Sie diesen Wert in einen Browser eingeben, wird nichts unternommen. Da der Browser es als GET-Anfrage (anstelle von DELETE) sendet und keiner der erforderlichen Header gesendet wird.

+0

Hey Mark, ich bin super nahe, aber bekomme immer noch nicht die Anwendung, um die Tabelle zu löschen.Ich habe deinen Code oben in meiner ASyncTask-Klasse hinzugefügt und die URL so geändert, dass sie dir entspricht. Wenn ich die App starte, erhalte ich den folgenden Log-Fehler in meinem Logcat: java.io.FileNotFoundException: https://api.backendless.com/v1/data/bulk/LocalPhoneNum?where=userEmailD%3D%27mark%40gmail. com% 27. Ich bin mir nicht sicher, ob das mit der URL zu erwarten ist. Könnten Sie sich bitte den Code ansehen, sieht die Syntax gerade aus? Was vermisse ich? Ich schätze die Hilfe sehr. Vielen Dank. –

+0

Auch bekomme ich immer einen 404 Antwortcode. Es kommuniziert also mit dem Server, aber es wird nichts gefunden. Ich denke, das macht Sinn, da die URL alleine im normalen Browser nirgends hinführt. Gibt es einen Code, den ich vermisse? –

+1

Die Anforderungsmethode muss DELETE sein. Die Dokumentation sagt es genau dort. Dein Code fehlt urlConnection.setRequestMethod ("DELETE"); –