add chapter13_end #4

Merged
m8lz9si5f merged 0 commits from ch13 into master 2 years ago

@ -1,2 +0,0 @@
# AndroidProject

@ -27,6 +27,7 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
/*引入OkHTTP*/
implementation "com.squareup.okhttp3:okhttp:4.2.2"
implementation group: 'com.alibaba', name: 'fastjson', version: '1.2.12'
implementation 'org.conscrypt:conscrypt-android:2.2.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

@ -23,8 +23,7 @@
<service
android:name=".service.TimeService"
android:enabled="true"
android:process="system" />
android:enabled="true" />
</application>
</manifest>

@ -1,79 +1,112 @@
package com.orangesale.cn;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.orangesale.cn.activity.IndexActivity;
import com.orangesale.cn.activity.RegisterActivity;
import com.orangesale.cn.dataoperation.OrangeDatabase;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button registerButton, loginButton;
private EditText usernameText, paswdEdit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_login);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.register:
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
break;
case R.id.login:
//注册时,我们引入了数据库,登录这里可以通过数据库进行验证,验证跳转到首页,不通过进行提示
if (validateLogin()) {
Intent intent1 = new Intent(MainActivity.this, IndexActivity.class);
Bundle bundle = new Bundle();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
bundle.putString("username", usernameText.getText().toString());
bundle = orangeDatabase.queryUserInfo(orangeDatabase.getReadableDatabase(), bundle);
intent1.putExtras(bundle);
startActivity(intent1);
} else {
Toast.makeText(MainActivity.this, "账号或者密码错误", Toast.LENGTH_SHORT).show();
}
break;
}
}
//界面组件初始化
private void init() {
usernameText = findViewById(R.id.username);
paswdEdit = findViewById(R.id.password);
loginButton = findViewById(R.id.login);
loginButton.setOnClickListener(this);
registerButton = findViewById(R.id.register);
registerButton.setOnClickListener(this);
}
/**
*
*
* @return
*/
private boolean validateLogin() {
String username = usernameText.getText().toString();
String password = paswdEdit.getText().toString();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
SQLiteDatabase sqLiteDatabase = orangeDatabase.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where username=? and password=?", new String[]{username, password});
if (cursor.getCount() > 0) {
return true;
}
return false;
}
}
package com.orangesale.cn;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.orangesale.cn.activity.IndexActivity;
import com.orangesale.cn.activity.RegisterActivity;
import com.orangesale.cn.dataoperation.OrangeDatabase;
import com.orangesale.cn.entity.OrangeUser;
import com.orangesale.cn.netrequest.OkHttpUser;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button registerButton, loginButton;
private EditText usernameText, paswdEdit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user_login);
init();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.register:
Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
startActivity(intent);
break;
case R.id.login:
//注册时,我们引入了数据库,登录这里可以通过数据库进行验证,验证跳转到首页,不通过进行提示
Thread thread = new Thread(runnable);
thread.start();
break;
}
}
//界面组件初始化
private void init() {
usernameText = findViewById(R.id.username);
paswdEdit = findViewById(R.id.password);
loginButton = findViewById(R.id.login);
loginButton.setOnClickListener(this);
registerButton = findViewById(R.id.register);
registerButton.setOnClickListener(this);
}
/**
*
*
* @return
*/
private boolean validateLogin() {
String username = usernameText.getText().toString();
String password = paswdEdit.getText().toString();
OrangeDatabase orangeDatabase = new OrangeDatabase(MainActivity.this);
SQLiteDatabase sqLiteDatabase = orangeDatabase.getReadableDatabase();
Cursor cursor = sqLiteDatabase.rawQuery("select * from orange_user where username=? and password=?", new String[]{username, password});
if (cursor.getCount() > 0) {
return true;
}
return false;
}
/**
*
*/
Runnable runnable = new Runnable() {
@Override
public void run() {
String username = usernameText.getText().toString();
String password = paswdEdit.getText().toString();
OrangeUser orangeUser = new OrangeUser();
orangeUser.setUsername(username);
orangeUser.setPassword(password);
OkHttpUser okHttpUser = new OkHttpUser();
OrangeUser orangeUser1 = null;
try {
orangeUser1 = okHttpUser.userLogin(orangeUser);
if (orangeUser1 != null) {
Intent intent1 = new Intent(MainActivity.this, IndexActivity.class);
Bundle bundle = new Bundle();
bundle.putString("username", usernameText.getText().toString());
bundle.putString("password", orangeUser1.getPassword());
bundle.putString("city", orangeUser1.getCity());
bundle.putString("sex", orangeUser1.getSex());
intent1.putExtras(bundle);
startActivity(intent1);
} else {
//解决在子线程中调用Toast的异常情况处理
Looper.prepare();
Toast.makeText(MainActivity.this, "账号或者密码错误", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} catch (IOException e) {
e.printStackTrace();
}
}
};
}

@ -1,10 +1,9 @@
package com.orangesale.cn.activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Looper;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
@ -17,7 +16,10 @@ import androidx.appcompat.app.AppCompatActivity;
import com.lljjcoder.citypickerview.widget.CityPicker;
import com.orangesale.cn.R;
import com.orangesale.cn.dataoperation.OrangeDatabase;
import com.orangesale.cn.entity.OrangeUser;
import com.orangesale.cn.netrequest.OkHttpUser;
import java.io.IOException;
public class RegisterActivity extends AppCompatActivity implements View.OnClickListener, RadioGroup.OnCheckedChangeListener {
private EditText usernameEdit, passwordEdit, surePasswordEdit;
@ -60,7 +62,9 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL
break;
case R.id.reg_register:
//注册验证方法
validateRegister();
//validateRegister();
Thread thread = new Thread(runnable);
thread.start();
break;
}
@ -106,44 +110,6 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL
}
/**
*
*/
public void validateRegister() {
String username = usernameEdit.getText().toString();
String password = passwordEdit.getText().toString();
String surePassword = surePasswordEdit.getText().toString();
String city = cityText.getText().toString();
//判断两次密码是否输入一致
if (password.equals(surePassword)) {
//这里也可以再进行其它的验证,如是否符合要求等,符合就进行插入数据库操作
if (!username.equals("") || !password.equals("")) {
if (!city.equals("")) {
Bundle bundle = new Bundle();
bundle.putString("username", username);
bundle.putString("password", password);
bundle.putString("sex", sexStr);
bundle.putString("city", city);
//本节将使用安卓自身带的SQLite数据库的方式存储注册的信息之前直接传输显示在界面是的方式
OrangeDatabase orangeDatabase = new OrangeDatabase(RegisterActivity.this);
SQLiteDatabase sqLiteDatabase = orangeDatabase.getWritableDatabase();
insertData(sqLiteDatabase, bundle);
Intent intent = new Intent(RegisterActivity.this, IndexActivity.class);
intent.putExtras(bundle);
startActivity(intent);
} else {
Toast.makeText(RegisterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(RegisterActivity.this, "账号或密码未填写", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//根据用户选择来改变sex的值
@ -151,18 +117,60 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL
}
/**
*
*
* @param sqLiteDatabase
* @param bundle
*
*/
private void insertData(SQLiteDatabase sqLiteDatabase, Bundle bundle) {
ContentValues contentValues = new ContentValues();
contentValues.put("username", bundle.getString("username"));
contentValues.put("password", bundle.getString("password"));
contentValues.put("sex", bundle.getString("sex"));
contentValues.put("city", bundle.getString("city"));
sqLiteDatabase.insert("orange_user", null, contentValues);
sqLiteDatabase.close();
}
Runnable runnable = new Runnable() {
@Override
public void run() {
String username = usernameEdit.getText().toString();
String password = passwordEdit.getText().toString();
String surePassword = surePasswordEdit.getText().toString();
String city = cityText.getText().toString();
//判断两次密码是否输入一致
if (password.equals(surePassword)) {
//这里也可以再进行其它的验证,如是否符合要求等,符合就进行插入数据库操作
if (!username.equals("") || !password.equals("")) {
if (!city.equals("")) {
Bundle bundle = new Bundle();
bundle.putString("username", username);
bundle.putString("password", password);
bundle.putString("sex", sexStr);
bundle.putString("city", city);
OrangeUser orangeUser = new OrangeUser();
orangeUser.setUsername(username);
orangeUser.setPassword(password);
orangeUser.setCity(city);
orangeUser.setSex(sexStr);
//将使用安卓自身带的SQLite数据库换成调用okhttp的方式
OkHttpUser okHttpUser = new OkHttpUser();
try {
if (okHttpUser.userRegister(orangeUser)) {
Intent intent = new Intent(RegisterActivity.this, IndexActivity.class);
intent.putExtras(bundle);
startActivity(intent);
} else {
Looper.prepare();
Toast.makeText(RegisterActivity.this, "注册失败!", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} catch (IOException e) {
e.printStackTrace();
}
} else {
Looper.prepare();
Toast.makeText(RegisterActivity.this, "请选择地址", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} else {
Looper.prepare();
Toast.makeText(RegisterActivity.this, "账号或密码未填写", Toast.LENGTH_SHORT).show();
Looper.loop();
}
} else {
Looper.prepare();
Toast.makeText(RegisterActivity.this, "两次密码输入不一致", Toast.LENGTH_SHORT).show();
Looper.loop();
}
}
};
}

@ -1,7 +1,6 @@
package com.orangesale.cn.adapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -10,27 +9,28 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.orangesale.cn.R;
import com.orangesale.cn.entity.Product;
import com.orangesale.cn.entity.OrangeProductPack;
import java.util.List;
public class ProductAdapter extends BaseAdapter {
private List<Product> productList;
//private List<Product> productList;
private List<OrangeProductPack> orangeProductList;
private LayoutInflater layoutInflater;
public ProductAdapter(Context context, List<Product> productList) {
this.productList = productList;
public ProductAdapter(Context context, List<OrangeProductPack> orangeProductList) {
this.orangeProductList = orangeProductList;
this.layoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return productList.size();
return orangeProductList.size();
}
@Override
public Object getItem(int position) {
return productList.get(position);
return orangeProductList.get(position);
}
@Override
@ -42,7 +42,6 @@ public class ProductAdapter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
Log.i("aa", "getView: "+"aa");
convertView = layoutInflater.inflate(R.layout.categoty_detail_content, null);
viewHolder = new ViewHolder();
viewHolder.productImage = convertView.findViewById(R.id.category_product_image);
@ -52,12 +51,11 @@ public class ProductAdapter extends BaseAdapter {
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
Product product = productList.get(position);
Log.i("product", "getView: "+product.toString());
OrangeProductPack product = orangeProductList.get(position);
if (product != null) {
viewHolder.productImage.setBackgroundResource(product.getImageUrlId());
viewHolder.productName.setText(product.getProductName());
viewHolder.productPrice.setText(String.valueOf(product.getProductPrice()));
viewHolder.productImage.setImageBitmap(product.getImgBitmap());
viewHolder.productName.setText(product.getName());
viewHolder.productPrice.setText(String.format("%s元", String.valueOf(product.getPrice())));
}
return convertView;
}
@ -66,4 +64,5 @@ public class ProductAdapter extends BaseAdapter {
ImageView productImage;
TextView productName, productPrice;
}
}

@ -0,0 +1,52 @@
package com.orangesale.cn.entity;
import java.sql.Timestamp;
public class OrangeMessage {
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Timestamp getSendTime() {
return sendTime;
}
public void setSendTime(Timestamp sendTime) {
this.sendTime = sendTime;
}
public String getUsed() {
return used;
}
public void setUsed(String used) {
this.used = used;
}
private Integer id;
private String content;
private Timestamp sendTime;
private String used;
@Override
public String toString() {
return "OrangeMessage{" +
"id=" + id +
", content='" + content + '\'' +
", sendTime=" + sendTime +
", used='" + used + '\'' +
'}';
}
}

@ -0,0 +1,64 @@
package com.orangesale.cn.entity;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class OrangeProduct {
private Integer id;
private String name;
private BigDecimal price;
private String imgUrl;
@Override
public String toString() {
return "OrangeProduct{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", imgUrl='" + imgUrl + '\'' +
", addTime=" + addTime +
'}';
}
public Timestamp getAddTime() {
return addTime;
}
public void setAddTime(Timestamp addTime) {
this.addTime = addTime;
}
private Timestamp addTime;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}

@ -0,0 +1,66 @@
package com.orangesale.cn.entity;
import android.graphics.Bitmap;
import java.math.BigDecimal;
import java.sql.Timestamp;
public class OrangeProductPack {
private Integer id;
private String name;
private Timestamp addTime;
private Bitmap imgBitmap;
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
private BigDecimal price;
@Override
public String toString() {
return "OrangeProductPack{" +
"id=" + id +
", name='" + name + '\'' +
", addTime=" + addTime +
", imgBitmap=" + imgBitmap +
", price=" + price +
'}';
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Timestamp getAddTime() {
return addTime;
}
public void setAddTime(Timestamp addTime) {
this.addTime = addTime;
}
public Bitmap getImgBitmap() {
return imgBitmap;
}
public void setImgBitmap(Bitmap imgBitmap) {
this.imgBitmap = imgBitmap;
}
}

@ -1,6 +1,7 @@
package com.orangesale.cn.fragment;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -14,8 +15,11 @@ import androidx.annotation.Nullable;
import com.orangesale.cn.R;
import com.orangesale.cn.adapter.ProductAdapter;
import com.orangesale.cn.entity.OrangeProductPack;
import com.orangesale.cn.entity.Product;
import com.orangesale.cn.netrequest.OkHttpClientProduct;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@ -27,6 +31,7 @@ public class IndexFragment extends Fragment implements View.OnClickListener {
private GridView gridView;
private ProductAdapter productAdapter;
private List<Product> productList;
private List<OrangeProductPack> list = new ArrayList<>();
@Nullable
@Override
@ -59,9 +64,8 @@ public class IndexFragment extends Fragment implements View.OnClickListener {
appleLine = view.findViewById(R.id.apple);
appleLine.setOnClickListener(this);
gridView = view.findViewById(R.id.index_famous_gridview);
initData();
productAdapter = new ProductAdapter(getActivity(), productList);
gridView.setAdapter(productAdapter);
//initData();
new SearchProductTask().execute();
}
@ -107,4 +111,27 @@ public class IndexFragment extends Fragment implements View.OnClickListener {
productList.add(product5);
}
/**
*
*/
class SearchProductTask extends AsyncTask<Void, Void, List<OrangeProductPack>> {
@Override
protected List<OrangeProductPack> doInBackground(Void... voids) {
OkHttpClientProduct clientProduct = new OkHttpClientProduct();
try {
list = clientProduct.getProductPack();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
@Override
protected void onPostExecute(List<OrangeProductPack> orangeProducts) {
productAdapter = new ProductAdapter(getActivity(), list);
gridView.setAdapter(productAdapter);
}
}
}

@ -1,6 +1,7 @@
package com.orangesale.cn.fragment;
import android.app.Fragment;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@ -15,9 +16,10 @@ import com.orangesale.cn.R;
import com.orangesale.cn.adapter.ListViewAdapter;
import com.orangesale.cn.adapter.ProductAdapter;
import com.orangesale.cn.entity.Condition;
import com.orangesale.cn.entity.Product;
import com.orangesale.cn.entity.OrangeProductPack;
import com.orangesale.cn.netrequest.OkHttpClientProduct;
import java.math.BigDecimal;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@ -26,7 +28,7 @@ public class ProductFragment extends Fragment {
private ListViewAdapter listViewAdapter;
private List<Condition> conditionList;
private GridView productGridView;
private List<Product> productList;
private List<OrangeProductPack> orangeProductList = new ArrayList<>();
@Nullable
@Override
@ -47,9 +49,7 @@ public class ProductFragment extends Fragment {
listViewAdapter = new ListViewAdapter(getActivity(), conditionList);
conditonListSpinner.setAdapter(listViewAdapter);
productGridView = view.findViewById(R.id.product_list);
initData();
ProductAdapter productAdapter = new ProductAdapter(getActivity(), productList);
productGridView.setAdapter(productAdapter);
new SearchProductTask().execute();
}
/**
@ -76,41 +76,26 @@ public class ProductFragment extends Fragment {
}
/**
*
*
*/
private void initData() {
productList = new ArrayList<>();
Product product = new Product();
product.setImageUrlId(R.drawable.juzip);
product.setProductName("橘子");
product.setProductPrice(new BigDecimal("9.9"));
Product product1 = new Product();
product1.setImageUrlId(R.drawable.orange);
product1.setProductName("橙子");
product1.setProductPrice(new BigDecimal("29.9"));
Product product2 = new Product();
product2.setImageUrlId(R.drawable.youzip);
product2.setProductName("柚子");
product2.setProductPrice(new BigDecimal("19.9"));
Product product3 = new Product();
product3.setImageUrlId(R.drawable.xiguap);
product3.setProductName("西瓜");
product3.setProductPrice(new BigDecimal("19.9"));
Product product4 = new Product();
product4.setImageUrlId(R.drawable.applep);
product4.setProductName("苹果");
product4.setProductPrice(new BigDecimal("49.9"));
Product product5 = new Product();
product5.setImageUrlId(R.drawable.lemonp);
product5.setProductName("柠檬");
product5.setProductPrice(new BigDecimal("9.9"));
productList.add(product);
productList.add(product1);
productList.add(product2);
productList.add(product3);
productList.add(product4);
productList.add(product5);
class SearchProductTask extends AsyncTask<Void, Void, List<OrangeProductPack>> {
@Override
protected List<OrangeProductPack> doInBackground(Void... voids) {
OkHttpClientProduct clientProduct = new OkHttpClientProduct();
try {
orangeProductList = clientProduct.getProductPack();
} catch (IOException e) {
e.printStackTrace();
}
return orangeProductList;
}
@Override
protected void onPostExecute(List<OrangeProductPack> orangeProducts) {
ProductAdapter productAdapter = new ProductAdapter(getActivity(), orangeProductList);
productGridView.setAdapter(productAdapter);
}
}

@ -0,0 +1,80 @@
package com.orangesale.cn.netrequest;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.orangesale.cn.entity.OrangeProduct;
import com.orangesale.cn.entity.OrangeProductPack;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpClientProduct {
/**
*
*
* @return
*/
public List<OrangeProduct> getProduct() throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://172.16.40.55:8081/orange/product/search")
.build();
Response response = okHttpClient.newCall(request).execute();
JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(response.body()).string());
List<OrangeProduct> list = JSON.parseObject(jsonObject.getString("data"), new TypeReference<List<OrangeProduct>>() {
});
return list;
}
/**
*
*
* @param imgUrl
* @return
* @throws IOException
*/
public Bitmap getImageBitMap(String imgUrl) throws IOException {
Bitmap bitmap;
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url(imgUrl)
.build();
Response response = okHttpClient.newCall(request).execute();
byte[] bytes = Objects.requireNonNull(response.body()).bytes();
bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
return bitmap;
}
/**
*
*
* @return
* @throws IOException
*/
public List<OrangeProductPack> getProductPack() throws IOException {
List<OrangeProductPack> packList = new ArrayList<>();
List<OrangeProduct> list = getProduct();
for (OrangeProduct orangeProduct : list) {
OrangeProductPack orangeProductPack = new OrangeProductPack();
orangeProductPack.setId(orangeProduct.getId());
orangeProductPack.setImgBitmap(getImageBitMap(orangeProduct.getImgUrl()));
orangeProductPack.setAddTime(orangeProduct.getAddTime());
orangeProductPack.setPrice(orangeProduct.getPrice());
packList.add(orangeProductPack);
}
return packList;
}
}

@ -0,0 +1,39 @@
package com.orangesale.cn.netrequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.orangesale.cn.entity.OrangeMessage;
import java.io.IOException;
import java.util.Objects;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class OkHttpMessage {
/**
*
*
* @return
*/
public OrangeMessage consumeMessage() throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder()
.url("http://172.16.40.55:8081/orange/message/consumeMessage")
.build();
Response response = okHttpClient.newCall(request).execute();
JSONObject jsonObject = JSON.parseObject(Objects.requireNonNull(response.body()).string());
OrangeMessage orangeMessage = JSON.toJavaObject(jsonObject.getJSONObject("data"), OrangeMessage.class);
/**
*
*/
Request request1 = new Request.Builder()
.url("http://172.16.40.55:8081/orange/message/updateMessage")
.build();
okHttpClient.newCall(request1).execute();
return orangeMessage;
}
}

@ -0,0 +1,67 @@
package com.orangesale.cn.netrequest;
import android.util.Log;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.orangesale.cn.entity.OrangeUser;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpUser {
/**
*
*
* @param orangeUser
*/
public OrangeUser userLogin(OrangeUser orangeUser) throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
//数据类型为json格式
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
//将对象转为JSON字符串
String jsonStr = JSONObject.toJSONString(orangeUser);
RequestBody requestBody = RequestBody.create(jsonStr, mediaType);
Request request = new Request.Builder()
.url("http://172.16.40.55:8081/orange/user/login")
.post(requestBody)
.build();
Response response = okHttpClient.newCall(request).execute();
JSONObject jsonObject = JSON.parseObject(response.body().string());
JSONObject jsonObject1 = jsonObject.getJSONObject("data");
OrangeUser orangeUser1 = JSON.toJavaObject(jsonObject1, OrangeUser.class);
return orangeUser1;
}
/**
*
*
* @param orangeUser
* @return
* @throws IOException
*/
public boolean userRegister(OrangeUser orangeUser) throws IOException {
OkHttpClient okHttpClient = new OkHttpClient();
//数据类型为json格式
MediaType mediaType = MediaType.parse("application/json; charset=utf-8");
//将对象转为JSON字符串
String jsonStr = JSONObject.toJSONString(orangeUser);
RequestBody requestBody = RequestBody.create(jsonStr, mediaType);
Request request = new Request.Builder()
.url("http://172.16.40.55:8081/orange/user/register")
.post(requestBody)
.build();
Response response = okHttpClient.newCall(request).execute();
JSONObject jsonObject = JSON.parseObject(response.body().string());
Log.i("register", "userRegister: "+jsonObject);
return jsonObject.getBoolean("flag");
}
}

@ -0,0 +1,105 @@
package com.orangesale.cn.service;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.IBinder;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import com.orangesale.cn.R;
import com.orangesale.cn.entity.OrangeMessage;
import com.orangesale.cn.netrequest.OkHttpMessage;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
public class TimeService extends Service {
private static Timer timer = null;
private NotificationManager manager;
private NotificationCompat.Builder builder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
*
*/
private void cleanAllNotification() {
manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancelAll();
if (timer != null) {
timer.cancel();
timer = null;
}
}
/**
*
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
long period = 60 * 1000; //1分钟一个周期
if (timer == null) {
timer = new Timer();
}
timer.schedule(new TimerTask() {
@Override
public void run() {
new ConsumeMessageTask().execute();
}
}, 0, period);
return super.onStartCommand(intent, flags, startId);
}
class ConsumeMessageTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
/**
* NotificationChannelandroid8.0ApptargetSDKVersion>=26
* channel
* Failed to post notification on channel null
*/
OkHttpMessage okHttpMessage = new OkHttpMessage();
OrangeMessage orangeMessage;
try {
orangeMessage = okHttpMessage.consumeMessage();
if (!Objects.isNull(orangeMessage)) {
Log.i("orangeMessage", "run: " + orangeMessage.toString());
NotificationChannel channel = new NotificationChannel("channel", "通知", NotificationManager.IMPORTANCE_DEFAULT);
manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(channel);
builder = new NotificationCompat.Builder(TimeService.this);
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
builder.setContentTitle("来自橙一色的系统通知消息" + " " + formatter.format(date));
builder.setSmallIcon(R.drawable.chengzi);
builder.setChannelId("channel");
builder.setContentText(orangeMessage.getContent());
builder.setAutoCancel(true);
builder.setDefaults(Notification.DEFAULT_ALL);
Notification notification = builder.build();
manager.notify(1, notification);
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
}

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 790 B

After

Width:  |  Height:  |  Size: 790 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Before

Width:  |  Height:  |  Size: 554 B

After

Width:  |  Height:  |  Size: 554 B

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

@ -6,9 +6,9 @@
android:orientation="vertical">
<ImageView
android:id="@+id/category_product_image"
android:layout_width="wrap_content"
android:layout_width="120dp"
android:layout_marginTop="5dp"
android:layout_height="wrap_content"
android:layout_height="120dp"
android:layout_gravity="center" />
<TextView

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save