国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php與android的簡(jiǎn)單交互

curried / 3331人閱讀

摘要:前言開發(fā)有前段與后端之分,其實(shí)也有前后端之分。一般都是或者開發(fā),所以作為一個(gè)合格的開發(fā)人員我們還是有必要了解一下與后端的簡(jiǎn)單交互。數(shù)據(jù)接口的定義端的開發(fā)主要是實(shí)現(xiàn)從數(shù)據(jù)庫獲取數(shù)據(jù),然后將數(shù)據(jù)制定成類型,制定供獲取的接口。


前言

web開發(fā)有前段與后端之分,其實(shí)android也有前后端之分。android開發(fā)就相當(dāng)于手機(jī)App的前端。一般都是php+android或者jsp+android開發(fā),所以作為一個(gè)合格的android開發(fā)人員我們還是有必要了解一下android與后端的簡(jiǎn)單交互。下面是以php+android交互的簡(jiǎn)單介紹。

PHP數(shù)據(jù)接口的定義

php端的開發(fā)主要是實(shí)現(xiàn)從數(shù)據(jù)庫獲取數(shù)據(jù),然后將數(shù)據(jù)制定成json類型,制定供android獲取的接口。至于為什么制定成json類型,相信大家都明白,現(xiàn)在android端從服務(wù)器中獲取的數(shù)據(jù)都是以json的格式封裝的。好了下面開始操作。

數(shù)據(jù)庫表的建立

首先建表定義好提供請(qǐng)求的數(shù)據(jù),簡(jiǎn)單點(diǎn),上張圖:

數(shù)據(jù)庫的連接

建完表后我們就開始在PHP中連接數(shù)據(jù)庫,以pdo的連接方式為例

exec("set names utf8");
}catch(PDOException $e){
    die("數(shù)據(jù)庫連接失敗".$e->getMessage());
}
?>

只要傳入本地端口,數(shù)據(jù)庫名,用戶名,密碼即可。

獲取與制定json

連接數(shù)據(jù)庫成功后,就可以遍歷表獲取所有數(shù)據(jù)

$sql = "SELECT * FROM blog";

查詢與遍歷

$stmt = $pdo->query($sql);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    $list["blog"][] = $row;
}

最后將獲取到的數(shù)據(jù)轉(zhuǎn)封裝成json類型

print_r(json_encode($list));

用瀏覽器訪問后的數(shù)據(jù)就是json類型了,我這里訪問的是:http://192.168.56.1/WebBlog/j...p"(根據(jù)自己本機(jī)的ip地址與項(xiàng)目地址)

好了PHP端的就可以到這里結(jié)束了,下面進(jìn)入android端
Android端數(shù)據(jù)獲取

Android端主要的是json實(shí)體類的建立與從我們上面定義的借口獲取數(shù)據(jù),所以這里要用到網(wǎng)絡(luò)請(qǐng)求,獲取數(shù)據(jù),然后在顯示出來,下面簡(jiǎn)單的介紹下。

Json實(shí)體類的定義

這里主要推薦一個(gè)工具,把GsonFormat集成到AS中,可以很方便的生成實(shí)體類。如果不使用的話,就要根據(jù)前面定義的數(shù)據(jù)類型來進(jìn)行一一對(duì)應(yīng)。下面是我按上面的類型定義的實(shí)體類

    private List blog;

    public List getBlog() {
        return blog;
    }

    public void setBlog(List blog) {
        this.blog = blog;
    }

    public static class BlogBean {
        private String id;
        private String title;
        private String time;
        private String content_url;
        private String image_url;

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        public String getContent_url() {
            return content_url;
        }

        public void setContent_url(String content_url) {
            this.content_url = content_url;
        }

        public String getImage_url() {
            return image_url;
        }

        public void setImage_url(String image_url) {
            this.image_url = image_url;
        }
自定義GsonRequest

我們使用volleygson來解析json數(shù)據(jù),首先我先自定義GsonRequest,這里需要繼承volleyRequest

public class GsonRequest extends Request {

    private Class mClass;
    private final Response.Listener mListener;
    private Gson mGson;
    private List mList;

    public GsonRequest(int method, String url, Class tClass, Response.Listener listener, Response.ErrorListener errorListener) {
        super(method, url, errorListener);
        mClass = tClass;
        mListener = listener;
        mGson = new Gson();
    }

    public GsonRequest(String url, Class tClass, Response.Listener listener, Response.ErrorListener errorListener) {
        this(Method.GET, url, tClass, listener, errorListener);
    }

    @Override
    protected Response parseNetworkResponse(NetworkResponse networkResponse) {
        try {
            mList = new ArrayList<>();
            String jsonString = new String(networkResponse.data,
                    HttpHeaderParser.parseCharset(networkResponse.headers));
            return Response.success(mGson.fromJson(jsonString, mClass),
                    HttpHeaderParser.parseCacheHeaders(networkResponse));
        } catch (UnsupportedEncodingException e) {
            return Response.error(new ParseError(e));
        }
    }

    @Override
    protected void deliverResponse(T t) {
        mListener.onResponse(t);
    }
}
Volley網(wǎng)絡(luò)請(qǐng)求數(shù)據(jù)

使用我們上面自定義的GsonRequest來請(qǐng)求數(shù)據(jù)

String url = "http://192.168.56.1/WebBlog/json/getBlogJson.php";
        GsonRequest gsonRequest = new GsonRequest(url, BlogInfo.class, new Response.Listener() {
            @Override
            public void onResponse(BlogInfo info) {
                mList = info.getBlog();
                BlogAdapter mAdapter = new BlogAdapter(MainActivity.this,mList,R.layout.blog_item);
                blogLv.setAdapter(mAdapter);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                Log.e("TAG", volleyError.getMessage(), volleyError);

            }
        });
        //添加到請(qǐng)求隊(duì)列中
        RequestManager.addRequest(gsonRequest, "blogRequest");

數(shù)據(jù)在onResponse中請(qǐng)求到了,存儲(chǔ)到List集合中,通過設(shè)置adapter顯示獲取的數(shù)據(jù),這里就不展開adapter的使用

網(wǎng)絡(luò)請(qǐng)求圖片與緩存

還是說下網(wǎng)絡(luò)請(qǐng)求圖片與圖片的緩存處理,也是通過volley的實(shí)現(xiàn),所以我們可以一套的使用volley就可以實(shí)現(xiàn)許多基本的網(wǎng)絡(luò)請(qǐng)求。
使用到的是LruCache,所以我可以繼承它

    @Override
    protected int sizeOf(String key, Bitmap value) {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.HONEYCOMB_MR1){
            return value.getByteCount();
        }
        return value.getRowBytes() * value.getHeight();
    }

    @Override
    public Bitmap getBitmap(String s) {
        return get(s);
    }
   
    
    @Override
    public void putBitmap(String s, Bitmap bitmap) {
        put(s,bitmap);
    }

然后再自定義ImageCacheManager

public class ImageCacheManager {
    private static final int CACHE_SIZE = 1024 * 1024 * ((ActivityManager) App.getAppContext()
            .getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass() / 8;

    public ImageCacheManager() {
    }

    private static ImageLoader mImageLoader = new ImageLoader(RequestManager.mRequestQueue, new BitmapLruCache(CACHE_SIZE));

    public static ImageLoader.ImageContainer loadImage(String requestUrl, ImageLoader.ImageListener listener, int maxWidth, int maxHeight) {
        return mImageLoader.get(requestUrl, listener, maxWidth, maxHeight);
    }

    public static ImageLoader.ImageContainer loadImage(String requestUrl, ImageLoader.ImageListener listener) {
        return loadImage(requestUrl, listener, 0, 0);
    }

    public static ImageLoader.ImageListener getImageListener(final ImageView view, final Drawable defaultImageDrawable, final Drawable errorImageDrawable) {
        return new ImageLoader.ImageListener() {
            @Override
            public void onResponse(ImageLoader.ImageContainer imageContainer, boolean b) {
                if (imageContainer.getBitmap() != null) {
                    if (!b && defaultImageDrawable != null) {
                        TransitionDrawable transitionDrawable = new TransitionDrawable(
                                new Drawable[]{defaultImageDrawable
                                        , new BitmapDrawable(App.getAppContext().getResources(), imageContainer.getBitmap())}
                        );
                        transitionDrawable.setCrossFadeEnabled(true);
                        view.setImageDrawable(transitionDrawable);
                        transitionDrawable.startTransition(100);
                    } else {
                        view.setImageBitmap(imageContainer.getBitmap());
                    }
                } else if (defaultImageDrawable != null) {
                    view.setImageDrawable(defaultImageDrawable);
                }
            }

            @Override
            public void onErrorResponse(VolleyError volleyError) {
                if (errorImageDrawable != null) {
                    view.setImageDrawable(errorImageDrawable);
                }
                Log.e("TAG",volleyError.getMessage());
            }
        };
    }
}

最后就可以通過使用ImageCacheManager來加載網(wǎng)絡(luò)圖片與緩存圖片

ImageCacheManager.loadImage(mList.get(position).getImage_url()
                , ImageCacheManager.getImageListener((ImageView) holder.getView(R.id.item_image)
                , App.getAppContext().getResources().getDrawable(R.drawable.blog_default), App.getAppContext().getResources().getDrawable(R.drawable.blog_default))
                ,0,0);

當(dāng)然volley的網(wǎng)絡(luò)請(qǐng)求不止這些,就拿圖片的請(qǐng)求,還有直接使用ImageRequestNetworkImageView,本來還想說點(diǎn)webview的一點(diǎn)知識(shí),今天有點(diǎn)晚,在宿舍要斷電斷網(wǎng)了,就不展開了。
還是執(zhí)行我一貫的做法上張效果圖吧

效果圖

個(gè)人技術(shù)分享:https://idisfkj.github.io

關(guān)注

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21529.html

相關(guān)文章

  • PHPAndroid、iOS 恩恩怨怨

    摘要:注意對(duì)這個(gè)有點(diǎn)不兼容,所以,謹(jǐn)慎,,,安卓均可以實(shí)現(xiàn)獲取版本信息這里需要判斷系統(tǒng)類型及版本所以,由此可見其實(shí)這里的判斷會(huì)很多,很多,很多。 其實(shí)應(yīng)該更多的是互相的磨合與學(xué)習(xí),希望身邊的人可以有自己的經(jīng)驗(yàn)分享,與理解,互相進(jìn)步才是大家需要的,作為一個(gè) 年老 (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當(dāng)老師的角色了,去正題。 1. 安卓中 a 標(biāo)簽的坑 在...

    陸斌 評(píng)論0 收藏0
  • PHPAndroid、iOS 恩恩怨怨

    摘要:注意對(duì)這個(gè)有點(diǎn)不兼容,所以,謹(jǐn)慎,,,安卓均可以實(shí)現(xiàn)獲取版本信息這里需要判斷系統(tǒng)類型及版本所以,由此可見其實(shí)這里的判斷會(huì)很多,很多,很多。 其實(shí)應(yīng)該更多的是互相的磨合與學(xué)習(xí),希望身邊的人可以有自己的經(jīng)驗(yàn)分享,與理解,互相進(jìn)步才是大家需要的,作為一個(gè) 年老 (我也是90后) 的開發(fā)者,我覺得一代勝一代,未來才有勝算。額,好了,我不充當(dāng)老師的角色了,去正題。 1. 安卓中 a 標(biāo)簽的坑 在...

    big_cat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<