2017-01-17 1 views
-1

Прежде всего, прошу прощения за это глупые сомнения. Я спрашиваю об этом, потому что я новичок в разработке Android.Для подключения к веб-сервису существует два варианта: использовать библиотеку или класс JSONParser. Что лучше? какой из них безопасен?

я делаю ядро-банковское приложение, поэтому я использовал класс JSON Parser, чтобы связаться с REST веб-службы,

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

Что делает этот класс, если веб-служба не возвращает JSON? Используйте HttpClient, например, тот, который используется в Apache. Это неправильный путь. – duffymo

ответ

0

Вы никогда не используете класс JSonParser для подключения к веб-сервису. Из вашего кода, похоже, вы используете класс Vanilla HttpURLConnection для подключения к службе и использования класса JSonParser для синтаксического анализа результата, который является хорошим и простым, если в вашем приложении есть только несколько веб-запросов.

Однако, поскольку вы сказали, что это банковское приложение, вам, возможно, придется подумать о масштабируемости, нескольких запросах и других подобных материалах. Вы могли бы попытаться обработать их самостоятельно, но предлагаемым способом было бы использовать одну из проверенных и проверенных сетевых библиотек, доступных для Android. Модернизация и Волейбол - два таких, и их гораздо больше. Выбор библиотеки для использования основан на ваших вариантах использования.

@AJay уже указал на страницу для сравнения. Взгляни.

К вашему следующему вопросу, касающемуся синтаксического анализа, является одним из ключевых факторов. Посмотрите приведенную ниже ссылку на параметры, которые у вас есть - http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

Я бы сказал, что GSon довольно хорош среди всех. Мы широко используем его в наших собственных продуктах.

+0

Как вы сказали, на самом деле я использую несколько простых звонков в веб-службу для проверки баланса, внесения наличных денег, передачи и т. Д., Но, как вы все предложили использовать библиотеку, мне нужно использовать библиотеку. Мне нужно изменить все мои code :(потому что я использую этот JSON Parser Class для всех моих запросов и ответов: P: P –

0

Google можно использовать GsonParser. https://github.com/google/gson

+0

спасибо :) oh его из google? так что это безопасно! я прав? –

+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

OK, спасибо. У меня есть примерный код для переоснащения, и я имею дело с веб-службой REST. –

Смежные вопросы