انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کار با json parser

کار با json parser

#1
دوستان من قصد دارم از کلاس jsonparser واسه کار با سرور و دریافت اطلاعات استفاده کنم واسه همین من یک سری کد پی اچ پی نوشتم که اطلاعات رو از دیتابیس میخونه و با استفاده از کد print(json_encode($output)); تبدیلش کردم به اطلاعات json که واسه نمونه به این شکل در اومده
[{"id":"1","name":"ali","fname":"reza","num":"11"}]
حالا برای خوندنش در اندروید باید از کلاس jsonparser استفاده کنم که روش قدیمیش که با استفاده از کتابخانه httpclient بوده گفته میشه که دیگه منسوخ شده و با اضافه کردن کتابخانه ش هم مشکل دارم و کدهای جدیدش به این شکل هست

کد:
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;
   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();
           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 (JSONException e) {
           Log.e("JSON Parser", "Error parsing data " + e.toString());
       }

       // return JSON Object
       return jObj;
   }
}
این کد های جدید از HttpURLConnection استفاده میکنه حالا برای استفاده از این کلاس و نمایش اطلاعات json شده صفحه وبم چطوری باید ازش استفاده کنم.
یه سری اطلاعات در این سایت هست میتونید ازش استفاده کنید
http://danielnugent.blogspot.nl/2015/06/...-with.html
میشه یه راهنماییم کنید؟
پاسخ

کار با json parser

#2
سلام

میتونید از این تابع هم برای دریافت اطلاعات از سرور به صورت Json استفاده کنید.
در صورت موفقیت آمیز بودن عملیات دریافت اطلاعات، یک مقدار String و در صورت بروز خطا مقدار null برمیگردونه

کد:
public String getJSON(String url, int timeout) {
       HttpURLConnection c = null;
       try {
           URL u = new URL(url);
           c = (HttpURLConnection) u.openConnection();
           c.setRequestMethod("GET");
           c.setRequestProperty("Content-length", "application/x-www-form-urlencoded; charset=utf-8");
           c.setUseCaches(false);
           c.setAllowUserInteraction(false);
           c.setConnectTimeout(timeout);
           c.setReadTimeout(timeout);
           c.connect();
           int status = c.getResponseCode();

           switch (status) {
               case 200:
               case 201:
                   BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
                   StringBuilder sb = new StringBuilder();
                   String line;
                   while ((line = br.readLine()) != null) {
                       sb.append(line).append("\n");
                   }
                   br.close();
                   return sb.toString();
           }

       } catch (IOException ex) {
           Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
       } finally {
           if (c != null) {
               try {
                   c.disconnect();
               } catch (Exception ex) {
                   Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
               }
           }
       }
       return null;
   }

نکته : تابع برای انجام عملیات بر روی پورتکل Http هستش و برای Https احتمالا دچار خطا میشه
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان