Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android-async-http開源項目對服務器端返回JSON數據的處理

android-async-http開源項目對服務器端返回JSON數據的處理

編輯:關於Android編程

一、在JavaEE項目中搭建環境

1. 導入相關jar包

\

2. 搭建相關的包和類

\

3.類中的方法簡單實餡喎?/kf/yidong/wp/" target="_blank" class="keylink">WPC9wPgo8cD5Vc2VyOjwvcD4KyfnD99LUz8LK9NDUo6yyosq1z9bO3rLOubnU7Mb3us3T0LLOubnU7Mb3o6zS1LywuPfX1LXEZ2V0us1zZXS3vbeoCjxwPjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140527/201405270929154.png" alt="\">

UserDao:

\

UserDaoImpl:

\

JsonServlet:

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// 來自於數據庫
		UserDao daoImpl = new UserDaoImpl();
		List entities = daoImpl.findAll();
		// 把List集合轉換成一個json的數據格式
		JSONArray jsonArray = JSONArray.fromObject(entities);

		response.setContentType("application/json");// 響應類型 json的數據
		response.getWriter().write(jsonArray.toString());
		response.getWriter().close();
	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

二、Android項目中的對服務器端返回JSON數據的處理

1. 導入jar包

\
2. 添加權限

\

3. 實現布局文件


    
4.MainActivity.java中的主要內容見如下詳細代碼:

package www.csdn.net.activity;

import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.JsonHttpResponseHandler;

public class MainActivity extends Activity {
	
	private ListView lv_users;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		lv_users = (ListView) findViewById(R.id.lv_users);
		
		initData();//M層 //initData本身在一個子線程中處理
		
	}

	private void initData() {
		// 訪問服務器端 獲取json數據
		// 創建客戶端對象
		AsyncHttpClient client = new AsyncHttpClient();
		String url = "http://172.16.237.227:8080/video/JsonServlet";
		Toast.makeText(this, "發送請求到服務器", Toast.LENGTH_LONG).show();
		client.get(url, new JsonHttpResponseHandler() {
			// 返回JSONArray對象 | JSONObject對象
			@Override
			public void onSuccess(int statusCode, Header[] headers,
					JSONArray response) {
				super.onSuccess(statusCode, headers, response);
				if (statusCode == 200) {
					//存儲數組變量
					List objects = new ArrayList<>();
					for (int i = 0; i < response.length(); i++) {
						try {
							// 獲取具體的一個JSONObject對象
							JSONObject obj = response.getJSONObject(i);
							objects.add(obj.getString("name"));
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
					}
					//C控制層主要就是對數據處理
					ArrayAdapter adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, objects);
					//設置顯示的內容
					lv_users.setAdapter(adapter);// C空置
				}
			}

		});
	}
}

5. 實現效果如下圖所示:

\

三、補充

1. JSONObject對象可以通過get("屬性名"),getString("屬性名"),getInt("屬性名")等這些方法,來獲取指定屬性名的屬性值。

例如:在此案例中可以通過System.out.println("序號:" + obj.getInt("id") + "姓名:"+ obj.getString("name") +"---密碼:"+ obj.getString("pass") +"---"+ obj.get("regDate"));來驗證一下結果。

2. 出現的bug原因可能有:

Internet權限沒加,服務器沒啟動,訪問服務器路徑有錯,沒有獲取控件對象,設置顯示的內容應為lv_users.setAdapter()方法而不是setText()方法等。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved