问题描述
请各位大神稍微讲解下方法,最好有点代码参考下哈
解决方案
你需要搜一下Gson,和apache httpclient下载导入对应的jar包web端: 首先,想办法把mysql取出的数据放到一个list中; 然后,参考这个帖子http://huyizizhen.iteye.com/blog/1453621 将list转成json 最后,返回给客户端out.println(json.toString());客户端: 需要一个httpclient String jsonstr = httpclient.get(url);
解决方案二:
通过 JSON RPC,这是本人前几天做的demo,应该满足你的需求,可直接运行java jsonrpc Server服务器 http://download.csdn.net/detail/zengxx1989/7310371Jsonrpc_android_Clienthttp://download.csdn.net/detail/zengxx1989/7310315
解决方案三:
给你点代码看吧package com.demo;import java.io.IOException;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.BasicHttpParams;import org.apache.http.protocol.HTTP;import android.util.Log;public class WebDataGetApi { private static final String TAG = "WebDataGetAPI"; private static final String USER_AGENT = "Mozilla/4.5"; protected String getRequest(String url) throws Exception { return getRequest(url, new DefaultHttpClient(new BasicHttpParams())); } protected String getRequest(String url, DefaultHttpClient client) throws Exception { String result = null; int statusCode = 0; HttpGet getMethod = new HttpGet(url); Log.d(TAG, "do the getRequest,url=" + url + ""); try { getMethod.setHeader("User-Agent", USER_AGENT); // HttpParams params = new HttpParams(); // 添加用户密码验证信息 // client.getCredentialsProvider().setCredentials( // new AuthScope(null, -1), // new UsernamePasswordCredentials(mUsername, mPassword)); HttpResponse httpResponse = client.execute(getMethod); // statusCode == 200 正常 statusCode = httpResponse.getStatusLine().getStatusCode(); Log.d(TAG, "statuscode = " + statusCode); // 处理返回的httpResponse信息 result = retrieveInputStream(httpResponse.getEntity()); } catch (Exception e) { Log.e(TAG, e.getMessage()); throw new Exception(e); } finally { getMethod.abort(); } return result; } /** * 处理httpResponse信息,返回String * * @param httpEntity * @return String */ protected String retrieveInputStream(HttpEntity httpEntity) { int length = (int) httpEntity.getContentLength(); if (length < 0) length = 10000; StringBuffer stringBuffer = new StringBuffer(length); try { InputStreamReader inputStreamReader = new InputStreamReader( httpEntity.getContent(), HTTP.UTF_8); char buffer[] = new char[length]; int count; while ((count = inputStreamReader.read(buffer, 0, length - 1)) > 0) { stringBuffer.append(buffer, 0, count); } } catch (UnsupportedEncodingException e) { Log.e(TAG, e.getMessage()); } catch (IllegalStateException e) { Log.e(TAG, e.getMessage()); } catch (IOException e) { Log.e(TAG, e.getMessage()); } return stringBuffer.toString(); }}建立JsonDataGetApi.javaimport org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;public class JsonDataGetApi extends WebDataGetApi { private static final String BASE_URL = "http://10.0.2.2:82/AccountService/"; private static final String EXTENSION = "Json/";; public JSONObject getObject(String sbj) throws JSONException, Exception { return new JSONObject(getRequest(BASE_URL + EXTENSION + sbj)); } public JSONArray getArray(String sbj) throws JSONException, Exception { return new JSONArray(getRequest(BASE_URL + EXTENSION + sbj)); }}我们的主Activity中调用刚才的方法, 在这一步中我们需要引入Google的gson 库gson-1.6.jarpublic class WebData extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getJsonData(); } public void getJsonData() { JsonDataGetApi api = new JsonDataGetApi(); JSONArray jArr; JSONObject jobj; try { //调用GetAccountData方法 jArr = api.getArray("GetAccountData"); //从返回的Account Array中取出第一个数据 jobj = jArr.getJSONObject(0); GsonBuilder gsonb = new GsonBuilder(); //Json中的日期表达方式没有办法直接转换成我们的Date类型, 因此需要单独注册一个Date的反序列化类. //DateDeserializer ds = new DateDeserializer(); //给GsonBuilder方法单独指定Date类型的反序列化方法 //gsonb.registerTypeAdapter(Date.class, ds); Gson gson = gsonb.create(); Account account = gson.fromJson(jobj.toString(), Account.class); Log.d("LOG_CAT", jobj.toString()); ((TextView) findViewById(R.id.Name)).setText(account.Name); ((TextView) findViewById(R.id.Age)).setText(account.Age); ((TextView) findViewById(R.id.Birthday)).setText(account.Birthday .toGMTString()); ((TextView) findViewById(R.id.Address)).setText(account.Address); } catch (Exception e) { Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); e.printStackTrace(); TextView movie_Address = (TextView) findViewById(R.id.Address); movie_Address.setText(e.getMessage()); } }}layout下的main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/Name" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/Age" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/Birthday" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/Address" android:layout_width="fill_parent" android:layout_height="wrap_content" /></LinearLayout>大致就是这么多
解决方案四:
首先你从数据库读取到一系列的对象,当然,也可以用Map来代替,然后把它们放在一个List中,然后再调用JSON库的序列化方法,使之成为一个json字符串,然后再写到客户端就可以了,这个时候客户端收到的就是一个JSONArray了。