2017-01-17 58 views
-1

首先抱歉問這個愚蠢的疑問。我問這是因爲我在android開發的初學者。要與Web服務連接,有兩個選項,可以使用庫或「JSONParser」類。哪個更好?哪一個是安全的?

我做了核心銀行應用程序,所以我用JSON解析器類與REST Web服務連接,

JSONParser類是,

package com.anvinsolutions.digicob_custmate; 
import android.util.Log; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.HashMap; 

public class JSONParser { 
String charset = "UTF-8"; 
HttpURLConnection conn; 
DataOutputStream wr; 
StringBuilder result;// = new StringBuilder(); 
URL urlObj; 
JSONObject jObj = null; 
StringBuilder sbParams; 
String paramsString; 

public JSONObject makeHttpRequest(String url, String method, 
            HashMap<String, String> params) { 

    sbParams = new StringBuilder(); 
    int i = 0; 
    for (String key : params.keySet()) { 
     try { 
      if (i != 0){ 
       sbParams.append("&"); 
      } 
      sbParams.append(key).append("=") 
        .append(URLEncoder.encode(params.get(key), charset)); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 
     i++; 
    } 

    if (method.equals("POST")) { 
     // request method is POST 
     try { 
      urlObj = new URL(url); 

      conn = (HttpURLConnection) urlObj.openConnection(); 

      conn.setDoOutput(true); 

      conn.setRequestMethod("POST"); 

      conn.setRequestProperty("Accept-Charset", charset); 

      conn.setReadTimeout(10000); 
      conn.setConnectTimeout(15000); 

      conn.connect(); 

      paramsString = sbParams.toString(); 

      wr = new DataOutputStream(conn.getOutputStream()); 
      wr.writeBytes(paramsString); 
      wr.flush(); 
      wr.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
    else if(method.equals("GET")){ 
     // request method is GET 

     if (sbParams.length() != 0) { 
      url += "?" + sbParams.toString(); 
     } 

     try { 
      urlObj = new URL(url); 

      conn = (HttpURLConnection) urlObj.openConnection(); 

      conn.setDoOutput(false); 

      conn.setRequestMethod("GET"); 

      conn.setRequestProperty("Accept-Charset", charset); 

      conn.setConnectTimeout(15000); 

      conn.connect(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

    try { 
     //Receive the response from the server 
     InputStream in = new BufferedInputStream(conn.getInputStream()); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 

     result = new StringBuilder(); // add this line 
     String line; 
     while ((line = reader.readLine()) != null) { 
      result.append(line); 
     } 

     Log.d("JSON Parser", "result: " + result.toString()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    conn.disconnect(); 

    // try parse the string to a JSON object 
    try { 
     jObj = new JSONObject(result.toString()); 
    } catch (Exception e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    // return JSON Object 
    return jObj; 
} 
} 

,我很困惑,如果這個方法有任何安全問題,性能問題? 我到現在沒有嘗試過任何庫,我只是使用了這個JSONParaser類。我認爲它很容易與一個JSONParser類..

哪一個使用? 預先感謝您! ;)

+0

JSONParser不是要走的路。你是在哪裏拿到的?我不會稱這個好代碼。 – duffymo

+0

我從github得到它..但它的工作正常..直到現在沒有問題..但我不知道它的安全與否! –

+0

如果Web服務不返回JSON,這個類是什麼?使用HttpClient,就像Apache的一樣。這是一個錯誤的路要走。 – duffymo

回答

0

您從不使用JSonParser類來連接到Web服務。從你的代碼中,看起來像你正在使用Vanilla HttpURLConnection類來連接服務,並且使用JSonParser類來解析結果,如果你的應用程序只有幾個Web請求,那麼這個結果很好,很簡單。

但是既然你說過,這是銀行應用程序,你可能不得不考慮可伸縮性,多重請求和類似的東西。你可以嘗試自己處理它們,但建議的方法是使用經過驗證的可用於Android的網絡庫之一。改造和排球是兩個這樣的,還有更多。選擇使用的庫是基於你的用例。

@AJay已經指向一個頁面進行比較。看一看。

對於你的下一件事,關於解析,性能是關鍵因素之一。看看下面的鏈接你有選擇 - http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

我會說GSon是相當不錯的。我們廣泛地在我們的內部產品中使用它。

+0

正如你所說,實際上我使用一些簡單的電話Web服務的平衡查詢,現金存款,轉移等..但正如你們都建議使用圖書館..所以我需要使用圖書館..我需要改變我所有的代碼:(因爲我使用這個JSON解析器類來處理所有的請求和響應:P:P –

0

您可以使用Google的GsonParser。 https://github.com/google/gson

+0

謝謝:)哦,它來自谷歌?所以它的安全肯定!我對嗎? –

+0

是的,這是事實。 :) –

0

如果你有REST服務的交易,最簡單的方法是使用改造庫:https://square.github.io/retrofit/ 隨着改造你並不需要實現HTTP調用,它會自動解析/創建JSON。

如果您需要更多的靈活性,我建議使用OkHttp庫http://square.github.io/okhttp/,這比純HttpUrlConnection結合Gson lib https://github.com/google/gson用於json解析/創建要簡單得多。

+0

好的,謝謝。 我有一個改進的示例代碼,我正在處理REST Web服務。 –

相關問題