由于工作原因,一直接触不到网络方面的知识,让我很苦恼。所以在闲暇时间,自己研究了下volley和gson,做了个小demo。存在博客上便于以后自己学习用到。
首先,需要下载volley和gson的jar包导入到工程中,然后在聚合数据中获取一个菜谱数据的请求URL(这些简单步骤一看便会)。
之后就是利用上面的资源来做了一个小demo,话不多说,上代码。
import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import com.android.volley.Request.Method; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import com.google.gson.Gson; public class MainActivity extends Activity { private static final String TAG = "info"; private RequestQueue mQueue; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mQueue = Volley.newRequestQueue(MainActivity.this); tv = (TextView) findViewById(R.id.tv); jsonGet(); } private void jsonGet(){ String url = "http://apis.juhe.cn/cook/category?key=0233c3a4ca3685cd3ee6efeef4e00481"; StringRequest request = new StringRequest(Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { for (int i = 0; i < getRecipe(response).size(); i++) { Log.i(TAG," parentId: " + getRecipe(response).get(i).getParentId() + " name: " + getRecipe(response).get(i).getName()); for (int j = 0; j < getRecipe(response).get(i).getList().size(); j++) { List list = getRecipe(response).get(i).getList().get(j); Log.e(TAG, " id: " + list.getId() + " name: " + list.getName() + " parentId" + list.getParentId()); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(MainActivity.this, "error", Toast.LENGTH_SHORT).show(); } }); mQueue.add(request); } private ArrayList<Result> getRecipe(String json){ Gson gson = new Gson(); Recipe recipe = gson.fromJson(json, Recipe.class); return recipe.getResult(); } }
一.volley
volley是Google推出的网络通信包,相比传统的网络请求方式有很大改进,非常的方便。这里我只用了3步就获取到了网络数据(用的是get方法获取),
1. 创建一个RequestQueue。
2. 创建一个StringRequest。
3. 将StringRequest添加到定义的RequestQueue中去。
哦,千万别忘了加上intent权限。
二.gson
gson是Google推出的一个用于处理json数据的一个包。
这里我使用了gson的fronJson方法,该方法有两个参数,第一个是json数据,第二个则是自己创建的对象类,对象类中的参数与json数据的key所对应。
我的Recipe.class代码如下:
import java.util.ArrayList; public class Recipe { private int resultcode; private String reason; private ArrayList<Result> result; private int error_code; public int getResultcode() { return resultcode; } public void setResultcode(int resultcode) { this.resultcode = resultcode; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } public ArrayList<Result> getResult() { return result; } public void setResult(ArrayList<Result> result) { this.result = result; } public int getError_code() { return error_code; } public void setError_code(int error_code) { this.error_code = error_code; } }