我应该依赖传统方法来获取GET / POST请求或其他库(Android)

时间:2015-11-17 04:55:12

标签: android json okhttp

我是Android开发的初学者,在应用程序上工作。我想知道我应该使用传统方法进行GET / POST请求(即 URLConnection,HttpClient ),还是应该使用第三方库,例如 OkHttp 毕加索即可。我应该使用哪种方法请提供指导。谢谢

2 个答案:

答案 0 :(得分:2)

使用HttpClient,它已在Marshmallow中弃用并删除。

URLConnection很好,但它在阅读响应时没有提供任何帮助,即你必须自己阅读流,这很快就会很痛苦。此外,您必须确保您的呼叫是异步的,这意味着添加越来越多的代码...不完美。

所以,你留下了OkHttp或Volley。这些是“低级”网络库,它们只能帮助您发出请求和读取响应。他们做得很好,继续阅读他们的文档。

除此之外,您可以将其他库用于更具体的用途。如果您需要调用格式良好的REST API,我建议使用基于OkHttp的Retrofit。

如果您需要检索图像,Picasso就是完美的(并且还利用了OkHttp)。我想“市场”上的其他人也很好(Glide,Fresco等),但我还没有使用过。

查找一些比较所有这些库的性能和易用性的文章。在没有最低评估的情况下,您永远不应该添加lib。

最后...... https://github.com/futurice/android-best-practices

干杯。

答案 1 :(得分:1)

你很好地使用传统的GET / POST方法。我给你举个例子。 为此,您必须创建一个使用AsyncTask

扩展的类
public class getData extends AsyncTask<String, String, String> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        String response = null;
        try {
            URL url = new URL("Write you url here");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");

//在这里你可以编写你的方法 - GET或POST

            InputStream in = new BufferedInputStream(conn.getInputStream());
            response = IOUtils.toString(in, "UTF-8");
            System.out.println(response);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return response;
    }

    @Override
    protected void onPostExecute(String result) {
        super.onPostExecute(result);
        if (result != null) {
            try {
                JSONArray array = new JSONArray(result);
                for (int i = 0; i < array.length(); i++) {
                    JSONObject c = array.getJSONObject(i);
                    String id = c.getString("tag");
                    Log.e("", "TAG : - " + id);
                    Category category = new Category(id);
                    albumsList.add(category);
                }
            } catch (Exception e) {
                Log.e("", "Home Exception : " + e.toString());
            }
        }
        pDialog.dismiss();

        getActivity().runOnUiThread(new Runnable() {
            public void run() {
                getList_category().setAdapter(new MenuAdapter(getActivity(), albumsList, 0));
            }
        });
    }
}

您必须在onCreate方法或您想要调用它的任何地方调用此类。

new getData().execute();

如上所述。

快乐的代码,乐于助人....