Android客戶端之Post獲取伺服器json資料以及解析
阿新 • • 發佈:2019-01-01
1,主要內容為Android客戶端請求伺服器post提交引數;
2,請求到完整的json資料之後,進行解析取值(看json資料是物件型別還是陣列結構);
private void okhttpDate() {
Log.i("TAG","--ok-");
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection conn=null;
String urlStr="伺服器的url路徑" ;
InputStream is = null;
String resultData = "";
try {
URL url = new URL(urlStr); //URL物件
conn = (HttpURLConnection)url.openConnection(); //使用URL開啟一個連結,下面設定這個連線
conn.setRequestMethod("POST"); //使用POST請求
if(conn.getResponseCode()==200) {//返回200表示相應成功
is = conn.getInputStream(); //獲取輸入流
InputStreamReader isr = new InputStreamReader(is);
BufferedReader bufferReader = new BufferedReader(isr);
String inputLine = "" ;
while ((inputLine = bufferReader.readLine()) != null) {
resultData += inputLine + "\n";
}
System.out.println("post方法取回內容:" + resultData);
jsonJXDate(resultData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
請求資料已經完成,可以除錯看看是否有資料,再就是解析了;
private void jsonJXDate(String date) {
if(date!=null) {
try {
JSONObject jsonObject = new JSONObject(date);
String resultCode = jsonObject.getString("message");
if (resultCode.equals("success")) {
JSONArray resultJsonArray = jsonObject.getJSONArray("devices");
for(int i=0;i<resultJsonArray.length();i++){
jsonObject = resultJsonArray.getJSONObject( i );
Map<String, Object> map = new HashMap<>();
//獲取到json資料中的activity數組裡的內容name
String name = jsonObject.getString("devicename");
//獲取到json資料中的activity數組裡的內容startTime
String shijian=jsonObject.getString("deviceaddre");
//存入map
map.put("name", name);
map.put("shijian", shijian);
//ArrayList集合
list.add(map);
}
}
Message msg=new Message();
msg.what=1;
handler.sendMessage(msg);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
請求解析資料ok了,我們請求網路資料需要開啟執行緒的,所以別忘記了;
public Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
//新增分割線
mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
recy_item_Adapter recy=new recy_item_Adapter(list,getActivity());
//設定佈局顯示格式
mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
mRecyclerView.setAdapter(recy);
recy.setOnItemClickListener(this);
break;
}
}
};
public void onRefresh() {
//檢查是否處於重新整理狀態
if (!isRefresh) {
isRefresh = true;
//模擬載入網路資料,這裡設定2秒,正好能看到2色進度條
new Handler().postDelayed(new Runnable() {
public void run() {
//顯示或隱藏重新整理進度條
swipeRefreshLayout.setRefreshing(false);
//修改adapter的資料
//data.add("這是新新增的資料");
// mRecyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
// recy_item_Adapter recy=new recy_item_Adapter(list,getActivity());
// //設定佈局顯示格式
// mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
// mRecyclerView.setAdapter(recy);
// recy.notifyDataSetChanged();
isRefresh = false;
}
}, 2000);
}
}
我這裡是動態顯示佈局檔案資訊,寫了RecyclerView的類檔案裡面,不懂的初學者可以網上看看RecyclerView+網路請求資料解析,大致就這些資訊,謝謝!