1. 程式人生 > >乾貨集中營app製作

乾貨集中營app製作

前一陣利用一些免費的api介面做了一個新聞類的app,挺簡陋的,但是自己用著還是可以的。

後來看到個乾貨集中營的api,裡面的內容是一些大神們分享在github上的開源專案,非常值得學習。既然提供給了我們api,那麼我們就得好好利用一下了。於是我就做了一個手機app來看學習一下。

最近修改了一下,弄了弄福利中的妹子圖片,以前不知道福利中的是妹子圖片。同時支援圖片下載,也修復了以前網路不好,程式崩潰的問題。自己做的效果比較糙,可以去幹貨集中營看看大神們做的,UI以及使用效果都非常好。



其實製作的流程和製作一個簡單的新聞app一樣,首先我們先要通過API介面獲取資料。程式碼如下

private void RequestInfo() {
        final Request request = new Request.Builder()
                .url("http://gank.io/api/data/" + categroy + count + page)
                .build();
        OkHttpClient client = new OkHttpClient();
        Call call = client.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Toast.makeText(MainActivity.this,"獲取資料失敗",Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {

                if (response.isSuccessful()){
                    String result = response.body().string();
                    Log.i("獲取的資訊",result);
                    Gson gson = new Gson();
                    infoGson = gson.fromJson(result,InfoGson.class);
                    handler.sendEmptyMessage(UPDATE);
                }
            }
        });
    }

這裡是利用okhttp訪問的url,同時這個url也沒有寫死,因為我們還要通過改變分類、獲取資料的數量和頁數來獲得不同的資料。獲得資料之後我們就要解析資料,通過列印的資訊,可以看出返回的是json資料。這裡我是用的Gson來解析資料,這裡注意okhttp和Gson都是需要匯入第三方庫的,具體請看github中的build.gradle檔案。最後通過handler通知更新UI將解析出來的資料展示到介面上。

private Handler handler = new Handler(){
        public void handleMessage(Message msg){
            super.handleMessage(msg);
            switch (msg.what){
                case UPDATE:
                    initRecycler();
                    break;
            }

        }
    };

通過initRecycler()方法將資料放到Adapter中,進而將每個資料展示出來。

在Adapter中需要注意返回的資料中的圖片可能是空,這裡需要自己判斷一下。我是把圖片為空的替換成我放在drawable中的圖片,並且加了個隨機選擇圖片,這樣效果更好些。

if (List.get(position).getImages() == null){
            Random random = new Random();
            int index = random.nextInt(image.length);
            Glide.with(context).load(image[index]).into(holder.image);
        }else {
            String[] ImageUrl = List.get(position).getImages();
            Glide.with(context).load(ImageUrl[0]+"?imageView2/0/w/150").into(holder.image);
        }

接下來我們還要選擇分類,這裡我直接就是利用選單來選擇分類的,這樣比較簡單。但是中間也遇到了一個問題,就是我在Android6.0的虛擬機器上測試時總是顯示找不到menu檔案,最後換成Android7.0的虛擬機器就沒問題,在真機上也沒問題。也不知道為什麼,反正是浪費了許多時間。建立選單的程式碼如下:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.title_0:
                categroy = "all/";
                RequestInfo();
                break;
            case R.id.title_1:
                categroy = "福利/";
                RequestInfo();
                break;
            case R.id.title_2:
                categroy = "Android/";
                RequestInfo();
                break;
            case R.id.title_3:
                categroy = "iOS/";
                RequestInfo();
                break;
            case R.id.title_4:
                categroy = "休息視訊/";
                RequestInfo();
                break;
            case R.id.title_5:
                categroy = "拓展資源/";
                RequestInfo();
                break;
            case R.id.title_6:
                categroy = "前端/";
                RequestInfo();
                break;
            default:
                break;
        }
        return true;
    }

建立選單的方法網上有很多,我這只是最簡單的一種使用。這裡我們通過點選選單中的專案來更換分類,並且再重新獲取資料。


最後是重新整理獲取跟過內容,這裡我只是用了個點選圖片更新的效果,其實還可以用懸浮按鈕FloatActionBar、下拉重新整理等方法,我只是簡單起見,沒有過多的考慮很好的操作效果和UI介面。

Load.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int p = Integer.valueOf(page);
                page = String.valueOf(p+1);
                RequestInfo();
            }
        });

點選圖片,更換頁數,再次獲取資料就完成了載入更多。


最後就是這麼多了,是不是很簡單。