2013-07-23 3 views
1

Возможно ли создание JSON Parser более общего?Как создать общий JSON Parser для android

Без упоминания какого-либо родительского или дочернего узла в коде, мне нужно проанализировать JSON-файл и отобразить его в Android-активности.

С уважением, Дипак Кришнан

+0

Посмотрите, как работают GSON и Jackson JSON. – gunar

+0

Использование этого примера http://stackoverflow.com/questions/17057712/pass-arraylist-bean-from-android-to-webservice-php/17058208#17058208 –

+1

https://github.com/lalit3686/GSONDemo –

ответ

1

Вы можете определить свой собственный JSon анализатор class-

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static JSONArray jsonArray = null; 
    static String json = ""; 
    // constructor 
    public JSONParser() { 

    }  
     public JSONArray getJSONFromUrl(String url, List<NameValuePair> params) {  
      System.out.println("url:: "+url); 
      System.out.println("params:: "+ params +" " +params.get(0)); 
      // Making HTTP request 
      try { 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

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

      try { 
       BufferedReader reader = new BufferedReader(new InputStreamReader(
         is, "iso-8859-1"), 8); 
       StringBuilder sb = new StringBuilder(); 
       String line = null; 
       while ((line = reader.readLine()) != null) { 
        sb.append(line); 
       } 
       is.close(); 
       json = sb.toString(); 
       //Log.e("JSON::: ", json); 
      } catch (Exception e) { 
       Log.e("Buffer Error", "Error converting result " + e.toString()); 
      }  

      // try parse the string to a JSON object 
      try { 
       if(!json.equals("null")){ 
        jsonArray = new JSONArray(json); 
        Log.d("jsonArray:: ", jsonArray+""); 
       }else{ 
        jsonArray = null; 
       } 

      } catch (JSONException e) { 
       Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      } 


      // return JSON String 
      return jsonArray; 

     } 

     } 

И ваш класс вызывающий как-

public class UserFuctions { 
    private JSONParser jsonParser; 

    // constructor 
    public UserFuctions(){ 
     jsonParser = new JSONParser(); 
    } 

    private static String HOST_URL = "http://100.43.0.21/pharmacy"; 
    public static final String FS = File.separator; 
    private static String genericListByNameSearchURL = HOST_URL+FS +"getGenericByName.php"; 

    /** 
    * 
    * function make Login Request 
    * @param email 
    * @param password 
    * */ 

    public JSONArray getGenericByName(String genName){ 
     // Building Parameters 
     List<NameValuePair> params = new ArrayList<NameValuePair>();   
     params.add(new BasicNameValuePair("genName", genName));  
     JSONArray json = jsonParser.getJSONFromUrl(getGenericByName, params); 

     return json; 
    } 


} 
+0

HI @Mohammod Hossain, Здесь, в моем сценарии, мне нужно проанализировать файл .json, который присутствует в папке Asset для Android. Я очень новичок в этом разборе и андроиде. Это будет очень полезно, если вы предоставите какие-либо материалы для этого сценария. Заранее спасибо. \ – user1273438

+0

@Mohammod Hossain Я думаю, вам нужно передать ** genericListByNameSearchURL ** вместо ** getGenericByName ** в 'jsonParser.getJSONFromUrl (getGenericByName, params);' – Nitish

0
public class JSONParser { 


public static JSONObject doGet(HashMap<String, String> param, String url) { 
    JSONObject result = null; 
    String response; 
    Set keys = param.keySet(); 

    int count = 0; 
    for (Iterator i = keys.iterator(); i.hasNext();) { 
     count++; 
     String key = (String) i.next(); 
     String value = (String) param.get(key); 
     if (count == param.size()) { 
      Log.e("Key", key + ""); 
      Log.e("Value", value + ""); 
      url += key + "=" + URLEncoder.encode(value); 

     } else { 
      Log.e("Key", key + ""); 
      Log.e("Value", value + ""); 

      url += key + "=" + URLEncoder.encode(value) + "&"; 
     } 

    } 
    Log.e("URL", url); 
    OkHttpClient client = new OkHttpClient(); 

    Request request; 
    try { 
     request = new Request.Builder() 
       .url(url) 
       .build(); 

    } catch (IllegalArgumentException e) { 
     JSONObject jsonObject = new JSONObject(); 

     return jsonObject; 
    } 


    Response responseClient = null; 
    try { 


     responseClient = client.newCall(request).execute(); 
     response = responseClient.body().string(); 

     result = new JSONObject(response); 
     Log.e("response", response + "=============="); 
    } catch (Exception e) { 
     JSONObject jsonObject = new JSONObject(); 

     return jsonObject; 
    } 

    return result; 

} 


public static JSONObject doPost(HashMap<String, String> data, String url) { 


    Log.e("URL", url); 
    try { 
     RequestBody requestBody; 
     MultipartBuilder mBuilder = new MultipartBuilder().type(MultipartBuilder.FORM); 

     if (data != null) { 
      for (String key : data.keySet()) { 
       String value = data.get(key); 
       Log.e("Key Values", key + "=" + value); 
       mBuilder.addFormDataPart(key, value); 
      } 
     } else { 
      mBuilder.addFormDataPart("temp", "temp"); 
     } 

     requestBody = mBuilder.build(); 
     Request request = new Request.Builder() 
       .url(url) 
       .post(requestBody) 
       .build(); 

     OkHttpClient client = new OkHttpClient(); 
     Response response = client.newCall(request).execute(); 
     String responseBody = response.body().string(); 
     url = ""; 
     Log.e("User", responseBody); 
     return new JSONObject(responseBody); 

    } catch (UnknownHostException | UnsupportedEncodingException e) { 

     JSONObject jsonObject = new JSONObject(); 

     try { 
      jsonObject.put("status", "false"); 
      jsonObject.put("message", e.getLocalizedMessage()); 
     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 
     Log.e("", "Error: " + e.getLocalizedMessage()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     JSONObject jsonObject = new JSONObject(); 

     try { 
      jsonObject.put("status", "false"); 
      jsonObject.put("message", e.getLocalizedMessage()); 
     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 
     Log.e("", "Other Error: " + e.getLocalizedMessage()); 
    } 
    return null; 
} 


public static JSONObject doPostRequestWithFile(HashMap<String, String> data, 
               String url, 
               ArrayList<String> imageList, 
               String fileParamName) { 



    try { 
     final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); 

     Log.e("Method", "======="); 
     RequestBody requestBody; 
     MultipartBuilder mBuilder = new MultipartBuilder().type(MultipartBuilder.FORM); 

     for (String key : data.keySet()) { 
      String value = data.get(key); 
      Log.e("Key Values", key + "-----------------" + value); 

      mBuilder.addFormDataPart(key, value); 

     } 
     for (int i = 0; i < imageList.size(); i++) { 
      File f = new File(imageList.get(i)); 

      Log.e("File Name 322", f.getName() + "==========="); 
      if (f.exists()) { 
       Log.e("File Exits", "==================="); 
       mBuilder.addFormDataPart(fileParamName, f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); 
      } 
     } 
     requestBody = mBuilder.build(); 


     Request request = new Request.Builder() 
       .url(url) 
       .post(requestBody) 
       .build(); 

     OkHttpClient client = new OkHttpClient(); 
     Response response = client.newCall(request).execute(); 


     String result = response.body().string(); 

     Log.e("Response", result + ""); 
     return new JSONObject(result); 

    } catch (UnknownHostException | UnsupportedEncodingException e) { 
     Log.e(Constant.TAG, "Error: " + e.getLocalizedMessage()); 
     JSONObject jsonObject = new JSONObject(); 

     try { 
      jsonObject.put("status", "false"); 
      jsonObject.put("message", e.getLocalizedMessage()); 
      return jsonObject; 

     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 
    } catch (Exception e) { 
     Log.e(Constant.TAG, "Other Error: " + e.getMessage()); 
     JSONObject jsonObject = new JSONObject(); 

     try { 
      jsonObject.put("status", "false"); 
      jsonObject.put("message", e.getLocalizedMessage()); 
      return jsonObject; 
     } catch (JSONException e1) { 
      e1.printStackTrace(); 
     } 
    } 
    return null; 
} 


} 
0
public class CallAPiActivity extends AppCompatActivity { 
    public Context context; 
    public BaseActivity baseActivity; 


    public CallAPiActivity(Context context) { 
     this.context = context; 
     baseActivity = (BaseActivity) context; 
    } 


    public void doPost(final Activity activity, final HashMap<String, String> map, final String body, final GetApiResultJson getApiResult) { 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       final JSONObject result = JSONParser.doPost(map, body); 
       activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

         try { 
          if (result.getString("status").equalsIgnoreCase("true")) { 
           getApiResult.onSuccesResult(result); 
          } else { 

           getApiResult.onFailureResult(result.getString("details")); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
          try { 
           getApiResult.onFailureResult(e.getLocalizedMessage()); 
          } catch (JSONException e1) { 
           e1.printStackTrace(); 
          } 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 


        } 
       }); 
      } 
     }).start(); 
    } 

    public void doGet(final Activity activity, final HashMap<String, String> map, final String body, final GetApiResultJson getApiResult) { 

     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       final JSONObject result = JSONParser.doGet(map, body); 
       activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

         try { 
          if (result.getString("status").equalsIgnoreCase("true")) { 
           getApiResult.onSuccesResult(result); 
          } else { 

           getApiResult.onFailureResult(result.getString("details")); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
          try { 
           getApiResult.onFailureResult(e.getLocalizedMessage()); 
          } catch (JSONException e1) { 
           e1.printStackTrace(); 
          } 
         } catch (IOException e) { 
          e.printStackTrace(); 
         } 


        } 
       }); 
      } 
     }).start(); 
    } 


    public void doPostWithFiles(final Activity activity, final HashMap<String, String> map, final ArrayList<String> mFiles, final String fileParamName, final GetResponse getApiResult) { 


     new Thread(new Runnable() { 
      @Override 
      public void run() { 
       final JSONObject result = JSONParser.doPostRequestWithFile(map, Constant.URL, mFiles, fileParamName); 
       activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 

         Log.e("Result Do Get", result.length() + ""); 

         try { 
          if (result.getString("status").equalsIgnoreCase("true")) { 
           getApiResult.onSuccesResult(result); 
          } else { 

           getApiResult.onFailureResult(result.getString("message")); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
          try { 
           getApiResult.onFailureResult(e.getLocalizedMessage()); 
          } catch (JSONException e1) { 
           e1.printStackTrace(); 
          } 
         } 
        } 
       }); 
      } 
     }).start(); 
    } 
} 
+0

Благодарим вас за этот фрагмент кода, который может предоставить некоторая ограниченная, немедленная помощь. [Правильное объяснение значительно улучшит его долгосрочную ценность] (// meta.stackexchange.com/q/114762/350567), показывая * почему * это хорошее решение проблемы и сделает его более полезным для будущего читателей с другими подобными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение, включая сделанные вами предположения. – iBug

+0

Пожалуйста, не помещайте код в комментарии - комментарии не отформатированы (так что это нечитабельно), и это действительно не то, что комментарии в любом случае. – EJoshuaS

0
GetApiResult.class 

public interface GetApiResultJson { 
    void onSuccesResult(JSONObject result) throws JSONException, IOException; 

    void onFailureResult(String messgae) throws JSONException; 

    void onNetworkRetry(String messgae) throws JSONException; 
} 
+1

Пожалуйста, отредактируйте (https://stackoverflow.com/posts/49047256/edit) свой ответ, чтобы объяснить, почему этот фрагмент кода отвечает на вопрос. –

+0

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно **, как ** и ** почему ** он решает проблему, улучшит долгосрочную ценность ответа. – Alexander

0
Getresponse.class 

public interface GetResponse { 
    public void onSuccesResult(JSONObject result) throws JSONException; 
    public void onFailureResult(String messgae) throws JSONException; 

}