好的,我有理解okhttp的问题。我只需要将图像上传到服务器。
这张图片是我的android工作室的截图,看来我不能import org.apache.http.NameValuePair;
什么是替代容器呢?
当你注意到.open(url)
也是红色时,它会说cannot resolve java.net.url
这是我的完整代码:
public JSONObject getJSONFromUrl(String str_url, List<NameValuePair> params) {
String reply_str = null;
BufferedReader reader = null;
final ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("image",image_str));
nameValuePairs.add(new BasicNameValuePair("caption",caption));
nameValuePairs.add(new BasicNameValuePair("categorie",categorie));
try {
URL url = new URL(str_url);
OkHttpClient client = new OkHttpClient();
HttpURLConnection con = client.open(url);
con.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(con.getOutputStream());
writer.write(getEncodedParams(params));
writer.flush();
StringBuilder sb = new StringBuilder();
reader = new BufferedReader(new InputStreamReader(con.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
reply_str = sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
// try parse the string to a JSON object. There are better ways to parse data.
JSONObject jObj;
try {
jObj = new JSONObject(reply_str);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
return jObj;
}
//in this case it's NameValuePair, but you can use any container
public String getEncodedParams(List<NameValuePair> params) {
StringBuilder sb = new StringBuilder();
for (NameValuePair nvp : params) {
String key = nvp.getName();
String param_value = nvp.getValue();
String value = null;
try {
value = URLEncoder.encode(param_value, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (sb.length() > 0) {
sb.append("&");
}
sb.append(key + "=" + value);
}
return sb.toString();
}
答案 0 :(得分:3)
而不是MainActivity
您可以使用Pair
BasicNameValuePair
的等效值为getKey()
。 getValue()的那个是pair.first
答案 1 :(得分:2)
建议您参考以下内容替代NameValuePair
:
...
OkHttpClient client = new OkHttpClient();
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("key1", "value1");
jsonObject.put("key2", "value2");
jsonObject.put("key3", "value3");
RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonObject.toString());
Request request = new Request.Builder()
.url("http://...")
.post(body)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
// do something...
}
@Override
public void onResponse(Response response) throws IOException {
// do something...
}
});
} catch (JSONException e) {
e.printStackTrace();
}
希望这有帮助!