کلیدستان

نسخه‌ی کامل: کار با json parser
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
دوستان من قصد دارم از کلاس 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 استفاده کنید.
در صورت موفقیت آمیز بودن عملیات دریافت اطلاعات، یک مقدار 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 احتمالا دچار خطا میشه