//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>
jiahu
最新推荐文章于 2022-12-19 11:01:19 发布