2015-03-31 50 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(); 
}