2015-03-31 36 views
29

我一直在關注如何從Android應用程序將數據插入數據庫,並擁有一切,除了這一小部分的NameValuePair棄用的openConnection

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

的NameValuePair和BasicNameValuePair都贊成openConnection()被棄用工作在線教程。我該如何創建一個新值關聯? http://developer.android.com/reference/java/net/URL.html#openConnection()

有誰知道我可以用openConnection創建名稱值對嗎?我到處尋找。

回答

28

可以使用contentValues例如

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

'ContentValues'已經設計爲了被contentresolver NOT網絡通信使用 - 這個問題是基於的 - 因爲在你需要解析頭文件屬性的時候沒有'getName()'和'getValue()'方法。 – Hesam 2015-08-19 09:28:11

+0

@Hesam您可以從ContentValues http:// stackoverflow獲取名稱和值。com/a/32559098/4552938 – Fahim 2015-09-14 07:15:49

+1

對我來說,創建一個迭代器來獲得像這樣的鍵值似乎有點額外的開銷 - 我更喜歡@friederbluemle的回答低於 – 2016-01-15 12:51:59

-43

喲可以改變你的Android API中21,點擊右鍵,屬性Android的,請在21 API是對我工作

+1

哦好吧謝謝你的迴應我現在要做的 – user1949387 2015-04-05 15:15:42

+3

更改編譯版本和目標不是一個解決方案,只是一個解決方法,將阻止您使用新的API。 – Ayoub 2015-04-30 09:38:06

+0

功能被折舊,因爲通常包括更新,更好的替代方案。它的反作用,只是不正確的使用這種方法。 id推薦內容值作爲Menna-Allah Sami提供,或者Map 2015-05-01 14:52:14

1

您可以使用httpmime.jar文件而不是它,這將更好的NameValuePair。你可以從這裏下載它,Download

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

這個jar添加到您的項目,然後使用它。

+1

感謝您的鏈接... – 2016-05-02 04:13:25

6

替代NameValuePair。你也可以從下面看到它的名字和值。這裏的關鍵是一個名字。

創建:

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

獲取鍵和值:

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

爲什麼我不能使用Map values = new Hashmap <>();然後?使用ContentValues有什麼好處? – user1697575 2015-09-15 17:16:27

+0

@ user1697575你可以使用任何你喜歡的,我的回答是指出hesam評論接受的答案 – Fahim 2015-09-16 06:52:38

43

我只是碰到了同樣的問題。來自org.apache.http的棄用類已被刪除在API 23中。

我結束了使用android.util.Pair。它完美的作品,而且代碼較短太:

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

謝謝,還有一個支持庫實現向後兼容 – 2016-01-15 12:53:21

+0

這是在API級別23達到這一點的正確方法 – anubhav16 2016-02-24 13:35:11

+0

真棒的人。 ..... – 2016-09-29 12:11:58

1

如果你真的想在你的應用程序中使用NameValuePair,可以將useLibrary 'org.apache.http.legacy'添加到您的gradle產出:

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

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

Thankyouverymuch – 2016-06-14 11:38:54

1

可以使用contentvalues或根據您的偏好設置hashmap。

我已經使用含量值

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

,如果,ü張貼的數據是表單數據,然後here`s如何U可以將其形成數據

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(); 
} 
相關問題