package com.example.smallshop;
import android.app.AlertDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.example.smallshop.database.DBUser;
public class BlankFragment_me extends Fragment {
public BlankFragment_me() {
// Required empty public constructor
}
public static BlankFragment_me newInstance( ) {
BlankFragment_me fragment = new BlankFragment_me();
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public static RequestQueue requestQueue;//请求队列声明
TextView myname,sentence;
LinearLayout myrecord,change_address,myinfo,about,contact;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.fragment_blank_me, container, false);
myrecord=v.findViewById(R.id.myrecord);
myname=v.findViewById(R.id.myname);
change_address=v.findViewById(R.id.change_address);
myinfo=v.findViewById(R.id.myinfo);
about=v.findViewById(R.id.about);
contact=v.findViewById(R.id.contact);
myname.setText("欢迎您!亲爱的"+Login.user.getName());
about.setOnClickListener(this::onClick_);
change_address.setOnClickListener(this::onClick_);
myrecord.setOnClickListener(this::onClick_);
contact.setOnClickListener(this::onClick_);
myinfo.setOnClickListener(this::onClick_);
//sentence.setText(getNeed());
//创建请求队列
requestQueue= Volley.newRequestQueue(getContext());
//reqString();
return v;
}
void onClick_(View v){
switch (v.getId()){
case R.id.myrecord:
//Toast.makeText(getContext(), "record", Toast.LENGTH_SHORT).show();
Intent intent=new Intent(getActivity(),MyRecord.class);
startActivity(intent);
break;
case R.id.contact:
joinQQ();
break;
case R.id.myinfo:
Intent intent1=new Intent(getActivity(),MyInfo.class);
startActivity(intent1);
break;
case R.id.change_address:
changeAddress();
break;
case R.id.about:
Intent intent3=new Intent(getActivity(),About.class);
startActivity(intent3);
break;
}
}
//修改收货地址
void changeAddress(){
View view= LayoutInflater.from(getActivity() )
.inflate(R.layout.layout_change_address, null);
AlertDialog.Builder customBuilder= new AlertDialog.Builder(getContext())
.setTitle("修改收货地址")
.setView(view) ;
AlertDialog dialog= customBuilder.create();
dialog.show();
//自定义按钮并注册监听器
EditText ed_number=view.findViewById(R.id.ed_number);
ed_number.setHint(Login.user.getAddress());
Button btn_ok=view.findViewById(R.id.btn_ok);
Button btn_cancel=view.findViewById(R.id.btn_cancel);
btn_ok.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Toast.makeText(getActivity(), ed_number.getText().toString(), Toast.LENGTH_LONG).show();
DBUser db=new DBUser(getActivity());
Login.user.setAddress(ed_number.getText().toString());
if(db.change(Login.user)){
Toast.makeText(getContext(), "修改成功!", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getContext(), "修好失败!", Toast.LENGTH_SHORT).show();
}
dialog.dismiss();
}
});
btn_cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
void joinQQ() {
try {
String url = "mqqwpa://im/chat?chat_type=wpa&uin=" + "2684976663";
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
} catch (Exception e) {
e.printStackTrace();
Toast.makeText(getContext(), "客服很忙暂时没在线喔亲", Toast.LENGTH_SHORT).show();
}
}
String address = "http://api.tianapi.com/tianqi/index?key=1475202419d304f2b1a0376fd24619a5";
String city="杭州市";
//得到api返回的数据
void reqString(){
//String url=address+"&city="+city;
String url="https://v1.hitokoto.cn/";
StringRequest stringRequest=new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String s) {
Log.d("***********",s.toString());
sentence.setText(getNeed(s));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
Log.d("--------",volleyError.toString());
}
});//字符串
requestQueue.add(stringRequest);
}
String getNeed(String jsonString){
String n="";
int times=0;
char[] myCharArray;
myCharArray = jsonString.toCharArray();
for(int i=0;i<myCharArray.length;i++){
if(myCharArray[i]==':' ){
times++;
continue;
}
if(times==3 && myCharArray[i]==',' ){
break;
}
if(times==3){
n+=myCharArray[i];
}
}
Log.d("sentence =",n);
return n;
}
}
基于App+SQLITE商城购物
5星 · 超过95%的资源 需积分: 0 72 浏览量
更新于2024-06-18
1
收藏 67.6MB ZIP 举报
【基于App+SQLite商城购物】项目是一个典型的移动应用开发实例,它将教我们如何在Android平台上构建一个功能齐全的在线商城应用。SQLite是这个项目的核心,它是Android系统内置的轻量级数据库,用于存储和管理应用程序的数据。在这个项目中,SQLite将被用来创建商品数据库,包括商品的详细信息,如名称、价格、库存等。
我们需要了解Android Studio,这是Google提供的官方Android应用开发集成开发环境(IDE)。通过Android Studio,我们可以编写、调试和发布Android应用。在创建项目时,我们会选择"Empty Activity"模板,然后逐渐添加必要的UI组件和业务逻辑。
在项目中,我们将会学习到如何使用SQLiteOpenHelper子类来创建和管理数据库。这个类是SQLite与Android应用交互的桥梁,我们可以定义数据库的版本,升级策略,以及在数据库初始化时执行的SQL脚本。例如,我们需要创建一个`Product`表,包含`id`(主键)、`name`、`price`、`description`和`stock`等字段。
接下来,我们将实现数据访问对象(DAO)层,包含插入、更新、删除和查询商品的方法。这些方法通常封装在SQLiteOpenHelper的子类中,通过SQL语句操作数据。例如,`insertProduct()`用于添加新商品,`updateProduct()`用于更新商品信息,`deleteProduct()`用于删除商品,而`queryAllProducts()`或`queryProductById()`则用于获取商品列表或特定商品详情。
在Android UI设计方面,我们将使用XML布局文件来定义界面元素,比如RecyclerView展示商品列表,每个列表项可以是一个自定义的View,包含商品图片、名称、价格等信息。点击列表项后,可以跳转到商品详情页面,显示更多详细信息。此外,还会用到搜索框进行商品筛选,以及购物车功能,需要处理添加、删除商品到购物车的逻辑,并实时更新购物车的总价。
为了使应用更具交互性,我们可以利用Android的事件监听机制,如OnClickListener和OnItemSelectedListener,以及Adapter和ViewHolder模式,提高数据绑定和视图重用的效率。在实现购物车功能时,可能还需要使用SharedPreferences来临时保存用户的选择,直到他们确认购买。
视频讲解将详细展示以上步骤,帮助理解每个部分的功能和实现方式。同时,提供的文档会给出更详细的代码解释和项目结构分析。通过这个项目,开发者不仅可以掌握SQLite在Android中的应用,还能加深对Android UI设计、数据绑定、事件处理等基础知识的理解。
“基于App+SQLite商城购物”项目是一个全面的Android应用开发实践,涵盖了数据库管理、UI设计、数据交互等多个关键知识点,对于想要提升Android开发技能的程序员来说,这是一个非常有价值的资源。
小菜菜taohaha
- 粉丝: 1
- 资源: 1
最新资源
- 燃料电池电池超级电容复合能量管理策略simulink仿真模型 燃料电池 电池 超级电容复合能量管理策略 1、传统PI; 2、等效燃油(氢)耗最低(ECMS); 3、等效能耗最低(EEMS); 4、分频
- Boost电路 simulink 仿真 boost 电路模块搭建和用传递函数进行验证 电流开环控制 电流闭环控制 电压电流双闭环控制 闭环控制包括:PID 控制,超前补偿,前馈控制,解耦控制 控
- 光伏PCS - 储能双向功率流器 1. 双向DC DC和 3 Level 逆变器 2. 仿真和源码都含有并网和离网 3. 原理图PDF 4. 参考文档
- MATLAB代码-基于拉丁超立方法的风光场景生成与削减摘要:与蒙特卡洛法不同,拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度,属于分层抽样技术,设定风光出力遵从正态分布normr
- 永磁同步电机最大转矩电流比控制MTPA+弱磁控制MATLAB simulink仿真模型,带有设计原理说明文档 仿真模型已经调试好,可直接运行出波形,仿真波形完美无缺
- jQuery仿方块人物头像消除游戏源码.zip
- 18b基于模型预测控制(自带的mpc模块)和最优控制理论的Carsim与Matlab simulink联合仿真实现汽车主动避撞和跟车功能(acc自适应巡航),包含simulink模型(其中有车辆逆纵向
- IGBT开关特性模型,MATLAB Simscape模型 该模型展示了IGBT的详细的开关模型,用于创建开关损耗列表数据 有助于理解IGBT米勒平台、瞬态开关行为 也可以用于MOOSFET
- 西门子西门子1200 总线控制V90伺服程序模板 ,包含plc程序,西门子触摸屏程序,eplan电气图纸一份 有两种控制模式 1.基于111报文自己编写的PN通讯控制V90伺服程序 2.基于工艺对象
- eth-utils-readthedocs-io-en-latest.zip
- SVC静止无功补偿 含一个TCR 三个TSC 模型为离散模型,静态无功补偿器(SVC)容量为300MVar,用于调节6000MVA,735kV的电力系统 SVC由一台额定容量为735kV 16kV、
- 高压无感FOC,风机控制,采用滑膜观测器,启动顺滑,独特的处理方式,STM32F030,载频14KHz,支持顺逆风启动,代码逻辑清晰,测试视频可以加好友! 文件包含:原理图,PCB,源代码
- 永磁同步电机矢量控制FOC仿真 两种控制策略,一种是id=0,另一种是MTPA 提供对应的参考文献;
- 西门子smart 200 rtu方式通讯四台三菱E700变频器资料 硬件:smart plc.三菱E700变频器,mcgs触摸屏(电脑仿真也可) 功能:指针写法,通过modbus rtu方式,实现对
- TMDC二维材料增强耦合
- 毕业设计基于Javaweb的宠物医院管理系统源码+数据库(高分毕设)