2015-03-31 5 views
29

Ich verfolge Online-Tutorials, wie Daten in eine Datenbank von einem Android-App einfügen und haben alles außer diesem kleinen Teil arbeitenNamevaluepair für openconnection veraltet

List<NameValuePair> params = new ArrayList<>(); 
params.add(new BasicNameValuePair("username", username)); 
params.add(new BasicNameValuePair("password", password)); 

Namevaluepair und BasicNameValuePair haben für openConnection() veraltet. Wie kann ich damit eine neuwertige Assoziation schaffen? http://developer.android.com/reference/java/net/URL.html#openConnection()

Weiß jemand, wie ich Name-Wert-Paare mit openConnection erstellen kann? Ich habe überall gesucht.

Antwort

28

Sie können content verwenden zum Beispiel

ContentValues values=new ContentValues(); 
values.put("username",name); 
values.put("password",password); 
database.insert(Table_name,null,values); 
+9

' ContentValues' ist Entwurf um von contentresolver NOT Netzwerkkommunikationen verwendet zu werden - worauf die Frage basiert - da es keine 'getName()' und 'getValue()' Methoden gibt, falls Sie Kopfzeilenattribute analysieren müssen. – Hesam

+0

@Hesam können Sie den Namen und die Werte von ContentValues ​​http: // stackoverflow abrufen.com/a/32559098/4552938 – Fahim

+1

Für mich ein Iterator zu schaffen, um die Schlüssel-Werte wie das scheint wie marginal extra Aufwand - ich bevorzuge @friederbluemle die Antwort unter –

-43

Yo können Sie Ihr Android-Api in 21 der rechten Maustaste, Eigenschaften android ändern, klicken Sie in api 21 ist Arbeit für mich

+1

Oh ok danke für die Antwort werde ich das jetzt tun – user1949387

+3

Ändern der Kompilieren der Version und das Ziel ist keine Lösung, sondern nur eine Problemumgehung, die die Verwendung neuer APIs verhindert. – Ayoub

+0

Funktionen werden abgeschrieben, da in der Regel eine neuere, verbesserte Alternative enthalten ist. es ist kontraproduktiv und nur falsch, diese Methode zu verwenden. id recommend entweder Content Values ​​wie Menna-Allah Sami angegeben hat, oder Map

1

Sie können httpmime.jar Datei statt dessen, was besser funktioniert als NameValuePair. Sie können es hier herunterladen, Download

MultipartEntity multi = new MultipartEntity(); 
multi.addPart("name", new StringBody("Raj")); 
multi.addPart("Id", new StringBody("011")); 

hinzufügen, um dieses Gefäß zu einem Projekt und dann verwenden.

+1

danke für den Link ... –

6

Alternative zu NameValuePair. Außerdem können Sie den Namen und die Werte wie unten erwähnt erhalten. Hier ist der Schlüssel ein Name.

erstellen:

ContentValues values = new ContentValues(); 
values.put("key1", "value1"); 
values.put("key2", "value2"); 

Schlüssel und Wert erhalten:

for (Map.Entry<String, Object> entry : values.valueSet()) { 
    String key = entry.getKey(); // name 
    String value = entry.getValue().toString(); // value 
} 
+0

Warum kann ich nicht verwenden Map values ​​= new Hashmap <>(); dann? Was ist der Vorteil von ContentValues? – user1697575

+0

@ user1697575 Sie können verwenden, was auch immer Sie bevorzugen, war meine Antwort zu hesam Kommentar in akzeptierten Antwort – Fahim

43

ich in das gleiche Problem nur lief. Die veralteten Klassen von org.apache.http wurden entfernt in API 23.

Ich endete mit android.util.Pair. Es funktioniert perfekt, und der Code ist zu kürzer:

List<Pair<String, String>> params = new ArrayList<>(); 
params.add(new Pair<>("username", username)); 
params.add(new Pair<>("password", password)); 
+0

Dank, gibt es auch eine Unterstützung Bibliothek Implementierung für Abwärtskompatibilität –

+0

Dies ist der richtige Weg, um dies in API Level 23 zu erreichen – anubhav16

+0

Awesome Man. ..... –

1

Wenn Sie wirklich verwenden NameValuePair in Ihrer Anwendung möchten, können Sie die useLibrary 'org.apache.http.legacy' zu Ihrem gradle hinzufügen:

buildtypes{ 
    //------------ 
    //---------- 
} 

useLibrary 'org.apache.http.legacy' 
+0

Vielen Dank –

1

Sie content verwenden können, oder Hashmaps basierend auf Ihrer Präferenz.

i verwendet haben Inhalt Werte

ContentValues contentValues = new ContentValues(); 
contentValues.put("key1","value1"); 
contentValues.put("key2","value2"); 

und wenn die Daten, die u Entsendung werden dann Hier `s Formulardaten ist, wie u es Daten bilden umwandeln kann

public String getFormData(ContentValues contentValues) throws UnsupportedEncodingException { 

    StringBuilder sb = new StringBuilder(); 
    boolean first = true; 
    for (Map.Entry<String, Object> entry : contentValues.valueSet()) { 
     if (first) 
      first = false; 
     else 
      sb.append("&"); 

     sb.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
     sb.append("="); 
     sb.append(URLEncoder.encode(entry.getValue().toString(), "UTF-8")); 
    } 
    return sb.toString(); 
}