Hướng dẫn android get data from php - android lấy dữ liệu từ php

Làm thế nào tôi có thể lấy dữ liệu từ PHP đến Android?

Bạn có thể giúp tôi không?


Hỏi ngày 14 tháng 8 năm 2013 lúc 7:25Aug 14, 2013 at 7:25

3

Đã trả lời ngày 14 tháng 8 năm 2013 lúc 7:30Aug 14, 2013 at 7:30

Harish Godaraharish GodaraHarish Godara

2.6851 Huy hiệu vàng14 Huy hiệu bạc 30 Huy hiệu Đồng1 gold badge14 silver badges30 bronze badges

Câu hỏi là về việc bạn sẽ đọc trực tiếp PHP trên thiết bị của mình hay yêu cầu từ máy chủ web của bạn. Bạn có thể thực hiện cái đầu tiên nhưng bạn phải cài đặt máy chủ web có thể Apache trên thiết bị của mình, COS "Localhost và 127.0.0.1" có thể hoạt động mà không cần máy chủ web, bạn có thể sử dụng lớp sau hoặc thư viện để lấy dữ liệu từ nó, nó có thể là đập !! Cái thứ hai rất dễ dàng, hãy đặt PHP của bạn vào máy chủ của bạn và ứng dụng máy khách gọi nó bằng http/https, v.v.

  1. Kết nối đơn giản:

    public static class Connector extends AsyncTask {
    private static final int   DEFAULT_CNN_TIME_OUT = 1000 * 20;
    private static String      USER_AGENT;
    private static final int[] LOCK                 = new int[1];
    private String             mUrl;
    private byte[]             mBody;
    
    public Connector[ Context _cxt ] {
        super[];
        if[ TextUtils.isEmpty[ USER_AGENT ] ] {
            // Without this, the default provided by API will be like "Dalvik/1.6.0 [Linux; U; Android 4.0.4; BASE_Lutea_3 Build/IMM76D]" .
            USER_AGENT = new WebView[ _cxt ].getSettings[].getUserAgentString[];
        }
    }
    
    /*
     * Convenient function to execute the connecting task.
     */
    public void submit[ String _url ] {
        this.execute[ _url ];
    }
    
    @Override
    protected Object doInBackground[ String... _params ] {
        mUrl = _params[0];
        Object ret = null;
        HttpURLConnection conn = null;
        try {
            synchronized[ LOCK ] {
                InputStream in = null;
                conn = connect[ mUrl ];
                // if we don't do conn.setRequestProperty[ "Accept-Encoding", "gzip" ], the wrapper GZIPInputStream can be removed.
                onConnectorInputStream[ in = new GZIPInputStream[ conn.getInputStream[] ] ];
                in.close[];
                in = null;
            }
        }
        catch[ Exception _e ] {
            ret = _e;
        }
        finally {
            if[ conn != null ] {
                conn.disconnect[];
                conn = null;
            }
        }
        return ret;
    }
    
    @Override
    protected void onPostExecute[ Object _result ] {
        if[ _result instanceof SocketTimeoutException ] {
            onConnectorConnectTimout[];
        } else if[ _result instanceof ConnectorPostConnectException ] {
            onConnectorError[ [[ConnectorPostConnectException] _result].getStatus[] ];
        } else if[ _result instanceof Exception ] {
            onConnectorInvalidConnect[ [Exception] _result ];
        } else if[ _result == null ] {
            onConnectorFinished[];
        }
        handleEstablishedConnection[];
    }
    
    /*
     * Internal help and test function.
     */
    private static void handleEstablishedConnection[] {
        try {
            Log.v[ TAG, "Connection is established." ];
            CookieStore cs = CookieManager.getInstance[].getCookieStore[];
            if[ cs != null ] {
                Log.v[ TAG, "------------cookies------------" ];
                List list = cs.getCookies[];
                if[ list != null && list.size[] > 0 ] {
                    StringBuilder cookieBuilder = new StringBuilder[];
                    for[ Cookie c : list ] {
                        cookieBuilder
                                .append[ c.getName[].trim[] ]
                                .append[ "=>" ]
                                .append[ c.getValue[].trim[] ]
                                .append[ "=>" ]
                                .append[ c.getDomain[] ];
                        Log.v[ TAG, cookieBuilder.toString[] ];
                        cookieBuilder.delete[ 0, cookieBuilder.length[] - 1 ];
                    }
                    cookieBuilder = null;
                } else {
                    Log.v[ TAG, "Empty cookies." ];
                }
                cs = null;
                list = null;
            }
        }
        catch[ Exception _e ] {
            Log.e[ TAG, "Error in handleEstablishedConnection: " + _e.getMessage[] ];
        }
        finally {
        }
    }
    
    private HttpURLConnection connect[ String _urlStr ] throws Exception {
        URL url = null;
        HttpURLConnection conn = null;
        try {
            try {
                url = new URL[ _urlStr ];
            }
            catch[ MalformedURLException e ] {
                throw new IllegalArgumentException[ "Invalid url: " + _urlStr ];
            }
            conn = preConnect[ url ];
            doConnect[ conn ];
            conn = postConnect[ conn ];
        }
        catch[ Exception _e ] {
            throw _e;
        }
        finally {
            url = null;
        }
        return conn;
    }
    
    private HttpURLConnection preConnect[ URL url ] throws Exception {
        HttpURLConnection conn;
        conn = [HttpURLConnection] url.openConnection[];
        conn.setUseCaches[ false ];
        // //www.aswinanand.com/2009/01/httpurlconnectionsetfollowredirects-bug/comment-page-1/#comment-13330
        // see the url to learn more about the problem of redirect
        conn.setInstanceFollowRedirects[ false ];
        conn.setDoOutput[ true ];// allows body
        mBody = getBody[];
        if[ hasBody[] ] {
            conn.setFixedLengthStreamingMode[ mBody.length ];
        }
        conn.setRequestMethod[ "POST" ];
        conn.setRequestProperty[ "Connection", "Keep-Alive" ];
        conn.setRequestProperty[ "Content-Type", "application/x-www-form-urlencoded;charset=UTF-8" ];
        conn.setRequestProperty[ "User-Agent", USER_AGENT ];
        conn.setRequestProperty[ "Accept-Encoding", "gzip" ];// force server to send in Content-Encoding: gzip .
        String cookies = onCookie[];
        if[ !TextUtils.isEmpty[ cookies ] ] {
            conn.setRequestProperty[ "Cookie", onCookie[] ];
            cookies = null;
        }
        conn.setConnectTimeout[ onSetConnectTimeout[] ];
        return conn;
    }
    
    /*
     * Convenient function to check the exiting of body.
     */
    private boolean hasBody[] {
        return mBody != null && mBody.length > 0;
    }
    
    private void doConnect[ HttpURLConnection conn ] throws Exception {
        OutputStream out; // the outgoing stream
        out = conn.getOutputStream[];
        if[ hasBody[] ] {
            out.write[ mBody ];
        }
        out.close[];
        out = null;
    }
    
    private HttpURLConnection postConnect[ HttpURLConnection conn ] throws Exception {
        int status = conn.getResponseCode[];
        if[ status != HttpURLConnection.HTTP_OK ] {
            throw new ConnectorPostConnectException[ status ];
        } else {
            CookieManager.getInstance[].put[ conn.getURL[].toURI[], conn.getHeaderFields[] ];
            return conn;
        }
    }
    
    private byte[] getBody[] {
        byte[] body = null;
        String bodyString = onSetBody[];
        if[ !TextUtils.isEmpty[ bodyString ] ] {
            body = bodyString.getBytes[];
        }
        return body;
    }
    
    // ------------------------------------------------
    // Overrides methods here
    // ------------------------------------------------
    
    protected int onSetConnectTimeout[] {
        return DEFAULT_CNN_TIME_OUT;
    }
    
    protected String onCookie[] {
        return null;
    }
    
    protected String onSetBody[] {
        return null;
    }
    
    protected void onConnectorConnectTimout[] {
        Log.e[ TAG, "Handling connector timeout gracefully." ];
    }
    
    protected void onConnectorError[ int _status ] {
        Log.e[ TAG, "Handling connector error[responsed] gracefully: " + _status ];
    }
    
    protected void onConnectorInvalidConnect[ Exception _e ] {
        Log.e[ TAG, "Handling connector invalid connect[crash] gracefully: " + _e.toString[] ];
    }
    
    /*
     * Read data here. The function runs in thread. To hook on UI thread use onConnectorFinished[]
     */
    protected void onConnectorInputStream[ InputStream _in ] {
    }
    
    /*
     * Last handler for a success connection
     */
    protected void onConnectorFinished[] {
    }
    }
    
  2. Sử dụng Volley để nhận phản hồi: //github.com/ogrebgr/android_volley_examples/blob/master/src/com/github/volley_examples/act_simplerequest.java

  3. Sử dụng JSOUP để có được "HTML thô": //jsoup.org/

Đã trả lời ngày 14 tháng 8 năm 2013 lúc 7:53Aug 14, 2013 at 7:53

TEETRACKERTETRACKERTeeTracker

6.6978 Huy hiệu vàng38 Huy hiệu bạc45 Huy hiệu Đồng8 gold badges38 silver badges45 bronze badges

Giả sử đây là tệp PHP của bạn db.php với cơ sở dữ liệu 'giao dịch' và bảng 'thành phố' có các trường City_id và City_Name


Đã trả lời ngày 14 tháng 8 năm 2013 lúc 7:52Aug 14, 2013 at 7:52

1

Bài Viết Liên Quan

Chủ Đề