Android okhttp替代容器

Android okhttp替代容器,android,okhttp,Android,Okhttp,好的,我有理解okhttp的问题。所有我需要的是上传一个图像到服务器 这张图片是我的android studio截图,似乎我无法导入org.apache.http.NameValuePair那么什么是替代容器 正如您所注意到的,.open(url)也是红色的,它表示无法解析java.net.url 这是我的完整代码: public JSONObject getJSONFromUrl(String str_url, List<NameValuePair> params) {

好的,我有理解okhttp的问题。所有我需要的是上传一个图像到服务器

这张图片是我的android studio截图,似乎我无法
导入org.apache.http.NameValuePair那么什么是替代容器

正如您所注意到的,
.open(url)
也是红色的,它表示
无法解析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();
}
public JSONObject getJSONFromUrl(字符串str_url,列表参数){
字符串reply_str=null;
BufferedReader reader=null;
最终ArrayList nameValuePairs=新ArrayList();
添加(新的BasicNameValuePair(“image”,image_str));
添加(新的BasicNameValuePair(“标题”,标题));
添加(新的BasicNameValuePair(“分类”,分类));
试一试{
URL=新URL(str_URL);
OkHttpClient=新的OkHttpClient();
HttpURLConnection con=client.open(url);
con.设置输出(真);
OutputStreamWriter writer=新的OutputStreamWriter(con.getOutputStream());
write.write(getEncodedParams(params));
writer.flush();
StringBuilder sb=新的StringBuilder();
reader=newbufferedReader(newInputStreamReader(con.getInputStream());
弦线;
而((line=reader.readLine())!=null){
sb.追加(第+行“\n”);
}
答复_str=sb.toString();
}捕获(例外e){
e、 printStackTrace();
返回null;
}最后{
if(读卡器!=null){
试一试{
reader.close();
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}
}
//尝试将字符串解析为JSON对象。有更好的方法来解析数据。
JSONObject jObj;
试一试{
jObj=新JSONObject(回复\u str);
}捕获(JSONException e){
Log.e(“JSON解析器”,“错误解析数据”+e.toString());
}
返回jObj;
}
//在本例中,它是NameValuePair,但您可以使用任何容器
公共字符串getEncodedParams(列表参数){
StringBuilder sb=新的StringBuilder();
用于(NameValuePair nvp:params){
String key=nvp.getName();
字符串param_value=nvp.getValue();
字符串值=null;
试一试{
value=URLEncoder.encode(参数值,“UTF-8”);
}捕获(不支持的编码异常e){
e、 printStackTrace();
}
如果(sb.length()>0){
某人附加(“&”);
}
sb.追加(键+“=”+值);
}
使某人返回字符串();
}

您可以使用


getKey()
的等价物是
pair.first
。getValue()的值应该是
pair。第二个

而不是
BasicNameValuePair
您可以使用


getKey()
的等价物是
pair.first
。getValue()的一个是
pair。第二个

建议您参考以下内容以获得
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();
            }

希望这有帮助

建议您参考以下内容了解
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();
            }

希望这有帮助

使用HashMap或JSONObject替代Use HashMap或JSONObject替代client.open(url)呢?为什么我得到错误
OkHttpClient
没有名为
open
的成员。同样奇怪的是,这个
open
方法应该返回一个HttpUrlConnection对象。那么client.open(url)呢?为什么我得到错误
OkHttpClient
没有名为
open
的成员。同样奇怪的是,这个
open
方法应该返回一个HttpUrlConnection对象。是的,只针对一些小的测试项目:)哦,那太好了,祝你好运,谢谢你帮助我。我在业余时间独自在安卓系统工作,这很烦人,因为我在数据库(oracle)工作,但我正试图在空闲时用安卓系统提高我的自我嗨,伙计,你能帮我吗?执行中有问题是的,只是为了一些小的测试项目:)哦,那太好了,祝你好运,谢谢你帮助我。我在业余时间独自在安卓系统工作,这很烦人,因为我在数据库(oracle)工作,但我正试图在空闲时用安卓系统提高我的自我嗨,伙计,你能帮我吗?行刑中有问题