jiahu

//SecondActivity
package com.bw.jiahuweek1.activity;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import com.bw.jiahuweek1.R;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;

public class SecondActivity extends AppCompatActivity {

    private String mImgUrl;

    @BindView(R.id.pic_iv)
    ImageView mPicImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        ButterKnife.bind(this);

        mImgUrl = getIntent()
                .getStringExtra("pic");

        Observable<String> observable = Observable.just(mImgUrl);
        // 先跳转子线程
        // 数据变换:将String类型的url地址想办法转换为Bitmap
        // 传回主线程
        // 展示
        observable.subscribeOn(Schedulers.io())
                .map(new Function<String, Bitmap>() {
                    @Override
                    public Bitmap apply(String imgUrl) throws Exception {
                        Bitmap bitmap = null;

                        URL url = new URL(imgUrl);
                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        connection.connect();
                        if (connection.getResponseCode() == 200) {
                            InputStream inputStream = connection.getInputStream();
                            // 使用字节数组输出流,将来自网络的图片数据从写入内存,方便转为Bitmap
                            ByteArrayOutputStream baos = null;
                            baos = new ByteArrayOutputStream();

                            byte[] buffer = new byte[1024];
                            int len = 0;

                            while ((len = inputStream.read(buffer)) != -1) {
                                baos.write(buffer, 0, len);
                            }
                            // 当把每次读取到的网络数据都写入内存后,就可以获取全部数据
                            byte[] bytes = baos.toByteArray();

                            // 字节转换为Bitmap
                             bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);

                        }
                        return bitmap;
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Bitmap>() {
                    @Override
                    public void accept(Bitmap bitmap) throws Exception {
                        mPicImageView.setImageBitmap(bitmap);
                    }
                });
    }
}



//MyApplication
package com.bw.jiahuweek1.application;

import android.app.Application;

import com.bw.jiahuweek1.bean.DaoMaster;
import com.bw.jiahuweek1.bean.DaoSession;

import org.greenrobot.greendao.database.Database;

/**
 * Created by 小小云 on 2017/12/30.
 */

public class MyApplication extends Application {

    private static DaoSession sDaoSession;

    @Override
    public void onCreate() {
        super.onCreate();

        initGreenDAO();
    }

    private void initGreenDAO() {
        DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "dish.db");
        Database db = helper.getWritableDb();
        // 数据库中开启会话,在会话中操作数据库
         sDaoSession = new DaoMaster(db).newSession();
    }

    public static DaoSession getsDaoSession() {
        return sDaoSession;
    }
}



//DataBean
package com.bw.jiahuweek1.bean;

import org.greenrobot.greendao.annotation.Entity;
import org.greenrobot.greendao.annotation.Id;
import org.greenrobot.greendao.annotation.Generated;

@Entity
public  class DataBean {
    /**
     * id : 8289
     * title : 油焖大虾
     * pic : http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg
     * collect_num : 1650
     * food_str : 大虾 葱 生姜 植物油 料酒
     * num : 1650
     */

    @Id(autoincrement = true)
    private long _id;

    private String id;
    private String title;
    private String pic;
    private String collect_num;
    private String food_str;
    private int num;
    @Generated(hash = 1343076215)
    public DataBean(long _id, String id, String title, String pic,
            String collect_num, String food_str, int num) {
        this._id = _id;
        this.id = id;
        this.title = title;
        this.pic = pic;
        this.collect_num = collect_num;
        this.food_str = food_str;
        this.num = num;
    }
    @Generated(hash = 908697775)
    public DataBean() {
    }
    public long get_id() {
        return this._id;
    }
    public void set_id(long _id) {
        this._id = _id;
    }
    public String getId() {
        return this.id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getTitle() {
        return this.title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getPic() {
        return this.pic;
    }
    public void setPic(String pic) {
        this.pic = pic;
    }
    public String getCollect_num() {
        return this.collect_num;
    }
    public void setCollect_num(String collect_num) {
        this.collect_num = collect_num;
    }
    public String getFood_str() {
        return this.food_str;
    }
    public void setFood_str(String food_str) {
        this.food_str = food_str;
    }
    public int getNum() {
        return this.num;
    }
    public void setNum(int num) {
        this.num = num;
    }

}

//DishBean

package com.bw.jiahuweek1.bean;

import java.util.List;

/**
 * Created by 小小云 on 2017/12/30.
 */

public class DishBean {
    /**
     * ret : 1
     * data : [{"id":"8289","title":"油焖大虾","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/9/8289.jpg","collect_num":"1650","food_str":"大虾 葱 生姜 植物油 料酒","num":1650},{"id":"2127","title":"四川回锅肉","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2127.jpg","collect_num":"1584","food_str":"猪肉 青蒜 青椒 红椒 姜片","num":1584},{"id":"30630","title":"超简单芒果布丁","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/31/30630.jpg","collect_num":"1515","food_str":"QQ糖 牛奶 芒果","num":1515},{"id":"9073","title":"家常红烧鱼","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/10/9073.jpg","collect_num":"1416","food_str":"鲜鱼 姜 葱 蒜 花椒","num":1416},{"id":"10097","title":"家常煎豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10097.jpg","collect_num":"1401","food_str":"豆腐 新鲜红椒 青椒 葱花 油","num":1401},{"id":"10509","title":"水煮肉片","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10509.jpg","collect_num":"1335","food_str":"瘦猪肉 生菜 豆瓣酱 干辣椒 花椒","num":1335},{"id":"46968","title":"红糖苹果银耳汤","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/47/46968.jpg","collect_num":"1242","food_str":"银耳 苹果 红糖","num":1242},{"id":"10191","title":"麻婆豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10191.jpg","collect_num":"1211","food_str":"豆腐 肉末 生抽 白糖 芝麻油","num":1211},{"id":"2372","title":"皮蛋瘦肉粥","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2372.jpg","collect_num":"1142","food_str":"大米 皮蛋 猪肉 油条 香葱","num":1142},{"id":"2166","title":"蚂蚁上树","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2166.jpg","collect_num":"1135","food_str":"红薯粉 肉 姜 蒜 花椒","num":1135},{"id":"2262","title":"糖醋肉","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2262.jpg","collect_num":"1071","food_str":"猪肉 红椒 黄椒 洋葱 蛋清","num":1071},{"id":"9971","title":"鱼香豆腐","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/10/9971.jpg","collect_num":"1002","food_str":"豆腐 木耳 胡萝卜 香葱 番茄酱","num":1002},{"id":"10172","title":"干煸四季豆","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10172.jpg","collect_num":"987","food_str":"四季豆 干辣椒 蒜头 酱油 糖","num":987},{"id":"2685","title":"胡萝卜肉末蒸蛋","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2685.jpg","collect_num":"910","food_str":"胡萝卜 肉 蛋 生抽 盐","num":910},{"id":"9972","title":"虎皮青椒","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/10/9972.jpg","collect_num":"886","food_str":"青辣椒 大蒜 香醋 白糖 生抽","num":886},{"id":"10437","title":"叉烧排骨","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10437.jpg","collect_num":"793","food_str":"排骨 李锦记叉烧酱 植物油 清水 油菜","num":793},{"id":"2892","title":"\u201c五行\u201d彩蔬汤","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2892.jpg","collect_num":"755","food_str":"黑木耳 玉米 牛蒡 胡萝卜 西兰花","num":755},{"id":"33783","title":"美人豆浆","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/34/33783.jpg","collect_num":"752","food_str":"黄豆 红豆 绿豆 黑豆 黑米","num":752},{"id":"2348","title":"麻辣肉丝面","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/3/2348.jpg","collect_num":"752","food_str":"面条 肉丝 淀粉 酱油 辣椒","num":752},{"id":"10044","title":"土豆炖翅根","pic":"http://www.qubaobei.com/ios/cf/uploadfile/132/11/10044.jpg","collect_num":"750","food_str":"土豆 翅根 葱 姜 料酒","num":750}]
     */

    private int ret;
    private List<DataBean> data;

    public int getRet() {
        return ret;
    }

    public void setRet(int ret) {
        this.ret = ret;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }


}


//DishHttpService

package com.bw.jiahuweek1.httpservice;

import com.bw.jiahuweek1.bean.DishBean;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 * Created by 小小云 on 2017/12/30.
 */

public interface DishHttpService {

    @GET("ios/cf/dish_list.php?stage_id=1&limit=20")
    Observable<DishBean> getObservable(@Query("page") int page);

}



//MyConverterFactory
package com.bw.jiahuweek1.httpservice;

import com.bw.jiahuweek1.bean.DishBean;

import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;

/**
 * Created by 小小云 on 2017/12/30.
 */

public interface DishHttpService {

    @GET("ios/cf/dish_list.php?stage_id=1&limit=20")
    Observable<DishBean> getObservable(@Query("page") int page);

}



//MainActivyty
package com.bw.jiahuweek1;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
import com.bw.jiahuweek1.activity.SecondActivity;
import com.bw.jiahuweek1.application.MyApplication;
import com.bw.jiahuweek1.bean.DataBean;
import com.bw.jiahuweek1.bean.DataBeanDao;
import com.bw.jiahuweek1.bean.DishBean;
import com.bw.jiahuweek1.httpservice.DishHttpService;
import com.bw.jiahuweek1.retrofit.MyConverterFactory;

import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.functions.Function;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;

// http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1
// 实现RecyclerView点击事件
public class MainActivity extends AppCompatActivity {

    @BindView(R.id.recycler_view)
     RecyclerView mRecyclerView;
    private DishAdapter mAdapter;
    private DataBeanDao mDataBeanDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ButterKnife.bind(this);

    mAdapter = new DishAdapter(this);
        mRecyclerView.setAdapter(mAdapter);

        // 数据库
        mDataBeanDao = MyApplication.getsDaoSession()
                .getDataBeanDao();

        initData();
}

    // RecyclerView重item的点击事件
    private void onItemClick(int position, DataBean data) {
        // 使用greenDAO将被点击item数据的pic存入数据库
        // 设置主键
        data.set_id(System.currentTimeMillis());
        mDataBeanDao.insert(data);

        Toast.makeText(MainActivity.this, "pos: "+position, Toast.LENGTH_SHORT).show();
    }

    // RecyclerView中item的长点击事件
    private void onItemLongClick(int position, DataBean data) {
        // 跳转新界面,并传递pic地址
        Intent intent = new Intent(this, SecondActivity.class);
        intent.putExtra("pic", data.getPic());
        startActivity(intent);

//        Toast.makeText(MainActivity.this, "pos: "+position, Toast.LENGTH_LONG).show();
    }

    private void initData() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://www.qubaobei.com/")
//                .addConverterFactory(GsonConverterFactory.create())
                .addConverterFactory(new MyConverterFactory())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();

        Observable<DishBean> observable = retrofit.create(DishHttpService.class)
                .getObservable(1);

        observable.subscribeOn(Schedulers.io())
                .map(new Function<DishBean, List<DataBean>>() {
                    @Override
                    public List<DataBean> apply(DishBean dishBean) throws Exception {
                        return dishBean.getData();
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<List<DataBean>>() {
                    @Override
                    public void accept(List<DataBean> dataBeans) throws Exception {
                        Toast.makeText(MainActivity.this, "size:"+dataBeans.size(), Toast.LENGTH_SHORT).show();
                        mAdapter.addDatas(dataBeans);
                    }
                });
    }

    // 为了应付考试,内部类我不加static修饰了
    class DishAdapter extends RecyclerView.Adapter<DishAdapter.ViewHolder> implements
            View.OnClickListener, View.OnLongClickListener {

        private Context mContext;
        private List<DataBean> mDatas;
        private RecyclerView mParentRecyclerView;

        public DishAdapter(Context mContext) {
            this.mContext = mContext;
            mDatas = new ArrayList<>();
        }

        // 添加数据
        public void addDatas(List<DataBean> datas) {
            mDatas.addAll(datas);
            notifyDataSetChanged();
        }

        @Override
        public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View itemView = LayoutInflater.from(mContext)
                    .inflate(R.layout.item_dish, parent, false);
            // 获取itemView的父容器,就是RecyclerView。通过父容器可以获取被点击item的位置
            mParentRecyclerView = ((RecyclerView) parent);
            // 给item绑定监听器
            initItemListener(itemView);
            return new ViewHolder(itemView);
        }

        // 给item添加点击事件和长点击事件
        private void initItemListener(View itemView) {
            itemView.setOnClickListener(this);
            itemView.setOnLongClickListener(this);
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {
            DataBean data = mDatas.get(position);

            holder.mTitleTextView.setText(data.getTitle());

            Glide.with(mContext)
                    .load(data.getPic())
                    .into(holder.mPicImageView);
        }

        @Override
        public int getItemCount() {
            return mDatas == null ? 0 : mDatas.size();
        }

        @Override
        public void onClick(View view) {
            // 获取被点击itemView的位置
            int position = mParentRecyclerView.getChildLayoutPosition(view);
            onItemClick(position, mDatas.get(position));
        }

        @Override
        public boolean onLongClick(View view) {
            int position = mParentRecyclerView.getChildLayoutPosition(view);
            onItemLongClick(position, mDatas.get(position));
            return true;
        }

        class ViewHolder extends RecyclerView.ViewHolder {

            @BindView(R.id.title_tv)
            TextView mTitleTextView;
            @BindView(R.id.pic_iv)
            ImageView mPicImageView;

            public ViewHolder(View itemView) {
                super(itemView);

                // 在adapter或fragment重,一定要选择2个参数的,第一个参数通常this
                ButterKnife.bind(this, itemView);
            }
        }

    }

}




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bw.jiahuweek1.MainActivity">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>






<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bw.jiahuweek1.activity.SecondActivity">

    <ImageView
        android:id="@+id/pic_iv"
        android:src="@mipmap/ic_launcher_round"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</android.support.constraint.ConstraintLayout>



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/title_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/pic_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值