Android客戶端與服務器HTTP交互,數據以json格式傳輸

jopen 10年前發布 | 103K 次閱讀 Android Android開發 移動開發 JSON

    /**

 * HTTP請求服務器 
 * @author lz 
 */  
public class HttpRequestServer{  
    private String serverCategoryStr = "http://192.168.1.2:8080/ChatXXX/";// 服務器地址  
    private String url = "http://192.168.1.4:8080/ChatXXX/login";  
    private static final int REQUEST_TIMEOUT = 1 * 1000;// 設置請求超時10秒鐘  
    private static final int SO_TIMEOUT = 5 * 1000; // 設置等待數據超時時間10秒鐘  
    private static final int type=-1;//請求Type  

    public HttpRequestServer() {  

    }  

/** 
 * 用戶登錄 
 * @param name 
 * @param pwd 
 * @return 
 * @throws ClientProtocolException 
 * @throws JSONException 
 * @throws IOException 
 */  
    public JSONObject login(String name, String pwd)  
            throws ClientProtocolException, JSONException, IOException {  
        url = serverCategoryStr + Constants.URL_LOGIN;  
        JSONObject param = new JSONObject();  
        param.put(Constants.TYPE, Constants.LOGIN);  
        param.put(Constants.USER_NAME, name);  
        param.put(Constants.USER_PASSWORD, pwd);  
        return requestServer(Constants.LOGIN, param);  
    }  


/** 
 * 通用請求服務器函數 
 * @param userId 
 * @param name 
 * @param pwd 
 * @param requestType 
 * @param status 
 * @return 
 * @throws JSONException 
 * @throws ClientProtocolException 
 * @throws IOException 
 */  
private JSONObject requestServer(String requestType,JSONObject param) throws JSONException,  
            ClientProtocolException, IOException {  
        // 不加這一段則會報錯,錯誤信息為android.os.networkonmainthreadexception  
        // 在Android2.2以后必須添加以下代碼  
        // 本應用采用的Android4.0  
        // 設置線程的策略  
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
                .permitAll() // 此處為允許磁盤讀寫和網絡訪問  
                .penaltyLog() // 打印logcat,當然也可以定位到dropbox,通過文件保存相應的log  
                .build());  
        HttpPost request = new HttpPost(url);  
        // 綁定到請求 Entry  
        StringEntity se = new StringEntity(param.toString(),"utf-8");  
        request.setEntity(se);  
        // 發送請求  
        HttpClient httpclient = getHttpClient();  
        HttpResponse httpResponse = httpclient.execute(request);  
        JSONObject result = null;  
        int code=httpResponse.getStatusLine().getStatusCode();  
            if (code == 200) {  
            // 得到應答的字符串,這也是一個 JSON 格式保存的數據  
            String retSrc = null;  
            retSrc = EntityUtils.toString(httpResponse.getEntity(),"utf-8");  
            JSONObject jtmpJsonObject = new JSONObject(retSrc);  
            String str = jtmpJsonObject.getString("dataMap");// 此處"dataMap"與服務器關聯  
            result = new JSONObject(str);  
        }  
        return result;  
    }  
    private HttpClient getHttpClient() {  
        BasicHttpParams httpParams = new BasicHttpParams();  
        HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT);  
        HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);  
        HttpClient httpclient = new DefaultHttpClient(httpParams);  
        return httpclient;  
    }  </pre><br />
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!