此次大作业实现功能包括:
1.数据库的搭建
2.登录注册界面及主界面界面的设计
3.碎片的应用
4.webBlockly的嵌套
我曾在不同活动调用数据库的bug、数据库的检索和碎片的实现上花了很多时间,
所幸这些问题都解决了,有部分注释标注了曾经的bug所在。
一些调试代码已经删除,使代码看起来简洁一些。





AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.example.finaltest"><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.FinalTest"android:usesCleartextTraffic="true"tools:targetApi="m"><activityandroid:name=".PoetryActivity"android:exported="false" /><activityandroid:name=".PoetryContentActivity"android:exported="false" /><activityandroid:name=".AccessLOLBlocklyActivity"android:exported="false" /><activityandroid:name=".AccessBilibiliActivity"android:exported="false" /><activityandroid:name=".RegisterActivity"android:exported="false" /><activityandroid:name=".LoginActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name=".ShowActivity"android:exported="false" /></application></manifest>

AccessBilibiliActivity

package com.example.finaltest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class AccessBilibiliActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_access_bilibili);WebView webView=(WebView) findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.loadUrl("http://www.bilibili.com");}
}

AccessLOLBlocklyActivity

package com.example.finaltest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class AccessLOLBlocklyActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_access_lolblockly);WebView webView=(WebView) findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.setWebViewClient(new WebViewClient());webView.getSettings().setAllowFileAccess(true);webView.loadUrl("file:///android_asset/blockly/code/lolBlockly.html");}
}

LoginAcitivity

package com.example.finaltest;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;
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;public class LoginActivity extends AppCompatActivity {private EditText accountEdit;private EditText passwordEdit;private Button login;private Button register;private MyDatabaseHelper databaseHelper;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_login);databaseHelper=new MyDatabaseHelper(this,"AccountCollector.db",null,1);SQLiteDatabase database=databaseHelper.getWritableDatabase();accountEdit=(EditText) findViewById(R.id.account);passwordEdit=(EditText) findViewById(R.id.password);login=(Button) findViewById(R.id.login);login.setOnClickListener(new View.OnClickListener() {@SuppressLint("Range")@Overridepublic void onClick(View v) {String account=accountEdit.getText().toString();String password=passwordEdit.getText().toString();Cursor cursor=database.query("Account",null,"account=?",new String[]{account},null,null,null);if (cursor.moveToFirst()&&password.equals(cursor.getString(cursor.getColumnIndex("password")))){//曾经的BUG2:需先判断cursor是否找到,否则后者可能非法访问Intent intent=new Intent(LoginActivity.this, ShowActivity.class);startActivity(intent);Toast.makeText(LoginActivity.this,"欢迎,"+account,Toast.LENGTH_LONG).show();}else {Toast.makeText(LoginActivity.this,"账号或密码错误",Toast.LENGTH_SHORT).show();}cursor.close();}});register=(Button) findViewById(R.id.register);register.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(LoginActivity.this,RegisterActivity.class);startActivity(intent);}});}
}

MyDatabaseHelper

package com.example.finaltest;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_ACCOUNT="create table Account("+"id integer primary key autoincrement,"+"account text,"+"password text)";private Context myContext;public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){super(context,name,factory,version);myContext=context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_ACCOUNT);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

Poetry

package com.example.finaltest;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;public class MyDatabaseHelper extends SQLiteOpenHelper {public static final String CREATE_ACCOUNT="create table Account("+"id integer primary key autoincrement,"+"account text,"+"password text)";private Context myContext;public MyDatabaseHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version){super(context,name,factory,version);myContext=context;}@Overridepublic void onCreate(SQLiteDatabase db) {db.execSQL(CREATE_ACCOUNT);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

PoetryActivity

package com.example.finaltest;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;public class PoetryActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_poetry);}
}

PoetryContentActivity

package com.example.finaltest;import androidx.appcompat.app.AppCompatActivity;import android.content.Context;
import android.content.Intent;
import android.os.Bundle;public class PoetryContentActivity extends AppCompatActivity {public static void actionStart(Context context, String poetryTitle, String poetryContent){Intent intent=new Intent(context,PoetryContentActivity.class);intent.putExtra("poetry_title",poetryTitle);intent.putExtra("poetry_content",poetryContent);context.startActivity(intent);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.poetry_content);String poetryTitle=getIntent().getStringExtra("poetry_title");String poetryContent=getIntent().getStringExtra("poetry_content");PoetryContentFragment poetryContentFragment=(PoetryContentFragment) getSupportFragmentManager().findFragmentById(R.id.poetry_content_fragment);poetryContentFragment.refresh(poetryTitle,poetryContent);}
}

PoetryContentFragment

package com.example.finaltest;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;public class PoetryContentFragment extends Fragment {private View view;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {view=inflater.inflate(R.layout.poetry_content_fragment,container,false);return view;}public void refresh(String poetryTitle,String poetryContent){View visibilityLayout=view.findViewById(R.id.visibility_layout);visibilityLayout.setVisibility(view.VISIBLE);TextView poetryTitleText=(TextView) view.findViewById(R.id.poetry_title);TextView poetryContentText=(TextView) view.findViewById(R.id.poetry_content);poetryTitleText.setText(poetryTitle);poetryContentText.setText(poetryContent);}
}

PoetryTitleFragment

package com.example.finaltest;import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class PoetryTitleFragment extends Fragment {private boolean isTwoPane;@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view=inflater.inflate(R.layout.poetry_title_fragment,container,false);RecyclerView poetryTitleRecyclerView=(RecyclerView) view.findViewById(R.id.poetry_title_recycler_view);LinearLayoutManager layoutManager=new LinearLayoutManager(getActivity());poetryTitleRecyclerView.setLayoutManager(layoutManager);PoetryAdapter adapter=new PoetryAdapter(getPoetry());poetryTitleRecyclerView.setAdapter(adapter);return view;}private List<Poetry>getPoetry(){List<Poetry>poetryList=new ArrayList<>();Poetry poetry1=new Poetry();Poetry poetry2=new Poetry();Poetry poetry3=new Poetry();Poetry poetry4=new Poetry();Poetry poetry5=new Poetry();Poetry poetry6=new Poetry();Poetry poetry7=new Poetry();Poetry poetry8=new Poetry();Poetry poetry9=new Poetry();Poetry poetry10=new Poetry();Poetry poetry11=new Poetry();Poetry poetry12=new Poetry();Poetry poetry13=new Poetry();Poetry poetry14=new Poetry();Poetry poetry15=new Poetry();Poetry poetry16=new Poetry();Poetry poetry17=new Poetry();Poetry poetry18=new Poetry();Poetry poetry19=new Poetry();Poetry poetry20=new Poetry();poetry1.setTitle("观沧海");poetry1.setContent("                                                                                     东临碣石,以观沧海。\n" +"                                                                                     水何澹澹,山岛竦峙。\n" +"                                                                                     树木丛生,百草丰茂。\n" +"                                                                                     秋风萧瑟,洪波涌起。\n" +"                                                                                     日月之行,若出其中;\n" +"                                                                                     星汉灿烂,若出其里。\n" +"                                                                                     幸甚至哉,歌以咏志。");poetryList.add(poetry1);poetry2.setTitle("子衿");poetry2.setContent("                                                                                     青青子衿,悠悠我心。\n" +"                                                                                   纵我不往,子宁不嗣音?\n" +"                                                                                     青青子佩,悠悠我思。\n" +"                                                                                     纵我不往,子宁不来?\n" +"                                                                                     挑兮达兮,在城阙兮。\n" +"                                                                                     一日不见,如三月兮。");poetryList.add(poetry2);poetry3.setTitle("短歌行");poetry3.setContent("                                                                                     对酒当歌,人生几何!\n" +"                                                                                     譬如朝露,去日苦多。\n" +"                                                                                     慨当以慷,忧思难忘。\n" +"                                                                                     何以解忧?唯有杜康。\n" +"                                                                                     青青子衿,悠悠我心。\n" +"                                                                                     但为君故,沉吟至今。\n" +"                                                                                     呦呦鹿鸣,食野之苹。\n" +"                                                                                     我有嘉宾,鼓瑟吹笙。\n" +"                                                                                     明明如月,何时可掇?\n" +"                                                                                     忧从中来,不可断绝。\n" +"                                                                                     越陌度阡,枉用相存。\n" +"                                                                                     契阔谈䜩,心念旧恩。\n" +"                                                                                     月明星稀,乌鹊南飞。\n" +"                                                                                     绕树三匝,何枝可依?\n" +"                                                                                     山不厌高,海不厌深。\n" +"                                                                                     周公吐哺,天下归心。");poetryList.add(poetry3);poetry4.setTitle("龟虽寿");poetry4.setContent("                                                                                     神龟虽寿,犹有竟时。\n" +"                                                                                     腾蛇乘雾,终为土灰。\n" +"                                                                                     老骥伏枥,志在千里。\n" +"                                                                                     烈士暮年,壮心不已。\n" +"                                                                                     盈缩之期,不但在天;\n" +"                                                                                     养怡之福,可得永年。\n" +"                                                                                     幸甚至哉,歌以咏志。");poetryList.add(poetry4);poetry5.setTitle("冬十月");poetry5.setContent("                                                                                     孟冬十月,北风徘徊,\n" +"                                                                                     天气肃清,繁霜霏霏。\n" +"                                                                                     鵾鸡晨鸣,鸿雁南飞,\n" +"                                                                                     鸷鸟潜藏,熊罴窟栖。\n" +"                                                                                     钱镈停置,农收积场,\n" +"                                                                                     逆旅整设,以通贾商。\n" +"                                                                                     幸甚至哉!歌以咏志。\n");poetryList.add(poetry5);poetry6.setTitle("关雎");poetry6.setContent("                                                                 关关雎鸠,在河之洲。窈窕淑女,君子好逑。\n" +"                                                                 参差荇菜,左右流之。窈窕淑女,寤寐求之。\n" +"                                                                 求之不得,寤寐思服。悠哉悠哉,辗转反侧。\n" +"                                                                 参差荇菜,左右采之。窈窕淑女,琴瑟友之。\n" +"                                                                 参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。");poetryList.add(poetry6);poetry7.setTitle("樛木");poetry7.setContent("                                                                 南有樛木,葛藟累之。乐只君子,福履绥之。\n" +"                                                                 南有樛木,葛藟荒之。乐只君子,福履将之。\n" +"                                                                 南有樛木,葛藟萦之。乐只君子,福履成之。");poetryList.add(poetry7);poetry8.setTitle("桃夭");poetry8.setContent("                                                                 桃之夭夭,灼灼其华。之子于归,宜其室家。\n" +"                                                                 桃之夭夭,有蕡其实。之子于归,宜其家室。\n" +"                                                                 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。");poetryList.add(poetry8);poetry9.setTitle("兔罝");poetry9.setContent("                                                                 肃肃兔罝,椓之丁丁。赳赳武夫,公侯干城。\n" +"                                                                 肃肃兔罝,施于中逵。赳赳武夫,公侯好仇。\n" +"                                                                 肃肃兔罝,施于中林。赳赳武夫,公侯腹心。");poetryList.add(poetry9);poetry10.setTitle("芣苢");poetry10.setContent("                                                                 采采芣苢,薄言采之。采采芣苢,薄言有之。\n" +"                                                                 采采芣苢,薄言掇之。采采芣苢,薄言捋之。\n" +"                                                                 采采芣苢,薄言袺之。采采芣苢,薄言襭之");poetryList.add(poetry10);poetry11.setTitle("汉广");poetry11.setContent("                                                                 南有乔木,不可休思;汉有游女,不可求思。\n" +"                                                                 汉之广矣,不可泳思;江之永矣,不可方思。\n" +"                                                                 翘翘错薪,言刈其楚;之子于归,言秣其马。\n" +"                                                                 汉之广矣,不可泳思;江之永矣,不可方思。\n" +"                                                                 翘翘错薪,言刈其蒌;之子于归,言秣其驹。\n" +"                                                                 汉之广矣,不可泳思;江之永矣,不可方思。");poetryList.add(poetry11);poetry12.setTitle("汝坟");poetry12.setContent("                                                                 遵彼汝坟,伐其条枚。未见君子,惄如调饥。\n" +"                                                                 遵彼汝坟,伐其条肄。既见君子,不我遐弃。\n" +"                                                                 鲂鱼赪尾,王室如毁。虽则如毁,父母孔迩。");poetryList.add(poetry12);poetry13.setTitle("鹊巢");poetry13.setContent("                                                                 维鹊有巢,维鸠居之。之子于归,百两御之。\n" +"                                                                 维鹊有巢,维鸠方之。之子于归,百两将之。\n" +"                                                                 维鹊有巢,维鸠盈之。之子于归,百两成之。");poetryList.add(poetry13);poetry14.setTitle("采蘩");poetry14.setContent("                                                                 于以采蘩?于沼于沚。于以用之?公侯之事。\n" +"                                                                 于以采蘩?于涧之中。于以用之?公侯之宫。\n" +"                                                                 被之僮僮,夙夜在公。被之祁祁,薄言还归。");poetryList.add(poetry14);poetry15.setTitle("采蘋");poetry15.setContent("                                                                 于以采蘋?南涧之滨。于以采藻?于彼行潦。\n" +"                                                                 于以盛之?维筐及筥。于以湘之?维锜及釜。\n" +"                                                                 于以奠之?宗室牖下。谁其尸之?有齐季女。");poetryList.add(poetry15);poetry16.setTitle("羔羊");poetry16.setContent("                                                                 羔羊之皮,素丝五紽。退食自公,委蛇委蛇。\n" +"                                                                 羔羊之革,素丝五緎。委蛇委蛇,自公退食。\n" +"                                                                 羔羊之缝,素丝五总。委蛇委蛇,退食自公。");poetryList.add(poetry16);poetry17.setTitle("何彼襛矣");poetry17.setContent("                                                                 何彼襛矣,唐棣之华?曷不肃雝?王姬之车。\n" +"                                                                 何彼襛矣,华如桃李?平王之孙,齐侯之子。\n" +"                                                                 其钓维何?维丝伊缗。齐侯之子,平王之孙。");poetryList.add(poetry17);poetry18.setTitle("绿衣");poetry18.setContent("                                                                 绿兮衣兮,绿衣黄里。心之忧矣,曷维其已?\n" +"                                                                 绿兮衣兮,绿衣黄裳。心之忧矣,曷维其亡?\n" +"                                                                 绿兮丝兮,女所治兮。我思古人,俾无訧兮。\n" +"                                                                 絺兮绤兮,凄其以风。我思古人,实获我心。");poetryList.add(poetry18);poetry19.setTitle("终风");poetry19.setContent("                                                                 终风且暴,顾我则笑。谑浪笑敖,中心是悼。\n" +"                                                                 终风且霾,惠然肯来。莫往莫来,悠悠我思。\n" +"                                                                 终风且曀,不日有曀。寤言不寐,愿言则嚏。\n" +"                                                                 曀曀其阴,虺虺其雷。寤言不寐,愿言则怀。");poetryList.add(poetry19);poetry20.setTitle("击鼓");poetry20.setContent("                                                                 击鼓其镗,踊跃用兵。土国城漕,我独南行。\n" +"                                                                 从孙子仲,平陈与宋。不我以归,忧心有忡。\n" +"                                                                 爰居爰处?爰丧其马?于以求之?于林之下。\n" +"                                                                 死生契阔,与子成说。执子之手,与子偕老。\n" +"                                                                 于嗟阔兮,不我活兮。于嗟洵兮,不我信兮。");poetryList.add(poetry20);return poetryList;}@Overridepublic void onActivityCreated(@Nullable Bundle savedInstanceState) {super.onActivityCreated(savedInstanceState);isTwoPane= getActivity().findViewById(R.id.poetry_content_layout) != null;}class PoetryAdapter extends RecyclerView.Adapter<PoetryAdapter.ViewHolder> {private List<Poetry> poetryList;class ViewHolder extends RecyclerView.ViewHolder {TextView poetryTitleText;public ViewHolder(View view) {super(view);poetryTitleText = (TextView) view.findViewById(R.id.poetry_title);}}public PoetryAdapter(List<Poetry> _poetryList) {poetryList = _poetryList;}@NonNull@Overridepublic ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.poetry_item, parent, false);final ViewHolder viewHolder = new ViewHolder(view);view.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Poetry poetry = poetryList.get(viewHolder.getAdapterPosition());if (isTwoPane) {PoetryContentFragment poetryContentFragment = (PoetryContentFragment) getFragmentManager().findFragmentById(R.id.poetry_content_fragment);poetryContentFragment.refresh(poetry.getTitle(), poetry.getContent());} else {PoetryContentActivity.actionStart(getActivity(), poetry.getTitle(), poetry.getContent());}}});return viewHolder;}@Overridepublic void onBindViewHolder(@NonNull ViewHolder holder, int position) {Poetry poetry = poetryList.get(position);holder.poetryTitleText.setText(poetry.getTitle());}@Overridepublic int getItemCount() {return poetryList.size();}}
}

RegisterActivity

package com.example.finaltest;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.content.ContentValues;
import android.content.DialogInterface;
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;public class RegisterActivity extends AppCompatActivity {private MyDatabaseHelper databaseHelper;private EditText registerAccountEdit;private EditText registerPasswordEdit1;private EditText registerPasswordEdit2;private Button registerConfirm;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);databaseHelper=new MyDatabaseHelper(this,"AccountCollector.db",null,1);//曾经的BUG1:数据库的调用需要在onCreate()中重新newSQLiteDatabase database=databaseHelper.getWritableDatabase();registerAccountEdit=(EditText)findViewById(R.id.r_account);registerPasswordEdit1=(EditText)findViewById(R.id.r_password1);registerPasswordEdit2=(EditText)findViewById(R.id.r_password2);registerConfirm=(Button)findViewById(R.id.r_confirm);registerConfirm.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {String registerAccount=registerAccountEdit.getText().toString();String registerPassword1=registerPasswordEdit1.getText().toString();String registerPassword2=registerPasswordEdit2.getText().toString();Cursor cursor=database.query("Account",null,"account=?",new String[]{registerAccount},null,null,null);if (!cursor.moveToFirst()&&registerPassword1.equals(registerPassword2)){ContentValues values=new ContentValues();values.put("account",registerAccount);values.put("password",registerPassword1);database.insert("Account",null,values);values.clear();AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);dialog.setTitle("注册成功");dialog.setMessage("请返回登录界面");dialog.setPositiveButton("好", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Intent intent=new Intent(RegisterActivity.this,LoginActivity.class);startActivity(intent);}});dialog.show();}else if (!cursor.moveToFirst()){AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);dialog.setTitle("注册失败");dialog.setMessage("两次密码输入不一致");dialog.setPositiveButton("好", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}else {AlertDialog.Builder dialog=new AlertDialog.Builder(RegisterActivity.this);dialog.setTitle("注册失败");dialog.setMessage("用户名已存在");dialog.setPositiveButton("好", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}cursor.close();}});}
}

ShowActivity

package com.example.finaltest;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;public class ShowActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_show);ImageView imageView1=(ImageView) findViewById(R.id.poetry);ImageView imageView2=(ImageView) findViewById(R.id.game);ImageView imageView3=(ImageView) findViewById(R.id.bili);ImageView imageView4=(ImageView) findViewById(R.id.logout);imageView1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(ShowActivity.this,PoetryActivity.class);startActivity(intent);}});imageView2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(ShowActivity.this,AccessLOLBlocklyActivity.class);startActivity(intent);}});imageView3.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent=new Intent(ShowActivity.this,AccessBilibiliActivity.class);startActivity(intent);}});imageView4.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {AlertDialog.Builder dialog=new AlertDialog.Builder(ShowActivity.this);dialog.setTitle("退出登录");dialog.setMessage("你确定吗?");dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {finish();}});dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});dialog.show();}});}
}

activity_access_bilibili.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".AccessBilibiliActivity"><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/web_view"/></androidx.constraintlayout.widget.ConstraintLayout>

activity_access_lolblockly.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".AccessLOLBlocklyActivity"><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/web_view"/></androidx.constraintlayout.widget.ConstraintLayout>

activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"android:background="@drawable/bg1"tools:context=".LoginActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:gravity="center"android:text="请登录"android:textSize="36sp" /><LinearLayoutandroid:layout_width="500dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="用户名:"android:textSize="18sp" /><EditTextandroid:id="@+id/account"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1"android:hint="请输入用户名"/></LinearLayout><LinearLayoutandroid:layout_width="500dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="密码:"android:textSize="18sp" /><EditTextandroid:id="@+id/password"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1"android:inputType="textPassword"android:hint="请输入密码"/></LinearLayout><LinearLayoutandroid:layout_width="600dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><Buttonandroid:id="@+id/login"android:layout_width="0dp"android:layout_height="60dp"android:layout_weight="1"android:text="登录"android:textSize="18sp" /><TextViewandroid:layout_width="0dp"android:layout_height="60dp"android:layout_weight="1" /><Buttonandroid:id="@+id/register"android:layout_width="0dp"android:layout_height="60dp"android:layout_weight="1"android:text="注册"android:textSize="18sp" /></LinearLayout></LinearLayout>

activity_poetry.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:id="@+id/poetry_title_layout"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".PoetryActivity"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/poetry_title_fragment"android:name="com.example.finaltest.PoetryTitleFragment"/></androidx.constraintlayout.widget.ConstraintLayout>

activity_poetry.xml(sw600dp)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="1"android:id="@+id/nws_title_fragment"android:name="com.example.finaltest.PoetryTitleFragment"/><FrameLayoutandroid:layout_width="0dp"android:layout_height="match_parent"android:layout_weight="3"android:id="@+id/poetry_content_layout"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/poetry_content_fragment"android:name="com.example.finaltest.PoetryContentFragment"/></FrameLayout></LinearLayout>

activity_register.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"android:background="@drawable/bg1"tools:context=".RegisterActivity"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:gravity="center"android:text="请注册"android:textSize="36sp" /><LinearLayoutandroid:layout_width="500dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="用户名:"android:textSize="18sp" /><EditTextandroid:id="@+id/r_account"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1"android:hint="请输入用户名"/></LinearLayout><LinearLayoutandroid:layout_width="500dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="密码:"android:textSize="18sp" /><EditTextandroid:id="@+id/r_password1"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1"android:inputType="textPassword"android:hint="请输入密码"/></LinearLayout><LinearLayoutandroid:layout_width="500dp"android:layout_height="60dp"android:layout_gravity="center"android:orientation="horizontal"><TextViewandroid:layout_width="90dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:text="确认密码:"android:textSize="18sp" /><EditTextandroid:id="@+id/r_password2"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_weight="1"android:inputType="textPassword"android:hint="请再次输入密码"/></LinearLayout><Buttonandroid:layout_width="400dp"android:layout_height="wrap_content"android:id="@+id/r_confirm"android:text="确定"android:layout_gravity="center"/></LinearLayout>

activity_show.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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"android:background="@drawable/bg2"tools:context=".ShowActivity"><ImageViewandroid:id="@+id/poetry"android:layout_width="200dp"android:layout_height="200dp"android:layout_marginBottom="10dp"android:visibility="visible"android:background="@drawable/img1"app:layout_constraintBottom_toTopOf="@+id/bili"app:layout_constraintEnd_toEndOf="@+id/bili"app:layout_constraintHorizontal_bias="1.0"app:layout_constraintStart_toStartOf="@+id/bili" /><ImageViewandroid:id="@+id/game"android:layout_width="200dp"android:layout_height="200dp"android:visibility="visible"android:background="@drawable/img2"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.385"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.407" /><ImageViewandroid:id="@+id/bili"android:layout_width="200dp"android:layout_height="200dp"android:layout_marginEnd="20dp"android:visibility="visible"android:background="@drawable/img3"app:layout_constraintBottom_toBottomOf="@+id/logout"app:layout_constraintEnd_toStartOf="@+id/logout"app:layout_constraintTop_toTopOf="@+id/logout"app:layout_constraintVertical_bias="0.0" /><ImageViewandroid:id="@+id/logout"android:layout_width="200dp"android:layout_height="200dp"android:layout_marginTop="10dp"android:visibility="visible"android:background="@drawable/img4"app:layout_constraintEnd_toEndOf="@+id/game"app:layout_constraintHorizontal_bias="0.0"app:layout_constraintStart_toStartOf="@+id/game"app:layout_constraintTop_toBottomOf="@+id/game" /></androidx.constraintlayout.widget.ConstraintLayout>

poetry_content.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"android:orientation="vertical"tools:context=".PoetryContentActivity"><fragmentandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/poetry_content_fragment"android:name="com.example.finaltest.PoetryContentFragment"/>
</LinearLayout>

poetry_content_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/visibility_layout"android:orientation="vertical"android:visibility="invisible"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/poetry_title"android:gravity="center"android:padding="10dp"android:textSize="20sp"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:background="#000000"/><TextViewandroid:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"android:id="@+id/poetry_content"android:padding="15dp"android:textSize="18sp"/></LinearLayout><Viewandroid:layout_width="1dp"android:layout_height="match_parent"android:layout_alignParentLeft="true"android:background="#000000"/></RelativeLayout>

poetry_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/poetry_title"android:maxLines="1"android:ellipsize="end"android:textSize="18sp"android:paddingLeft="10dp"android:paddingRight="10dp"android:paddingTop="15dp"android:paddingBottom="15dp"/>

poetry_title_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.recyclerview.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/poetry_title_recycler_view"/></LinearLayout>

另外:
1.blockly放在assets中,自动生成的代码过长,建议自己去develop
2.登录注册系统需自己搭建SQLite数据库(安卓自带),详情参考《Android第一行代码》By 郭霖

Android+Blockly大作业(含登录注册系统、碎片式浏览、Blockly设计)相关推荐

  1. Python Socket联机自动匹配双人五子棋(含登录注册系统与界面,数据库连接,可作结课作业,可用于学习)

    1.前言 首先,关于源码的获取,本人提供了三种方式: 直接从文章里面Ctrl+C,Ctrl+V,然后按照我已给的文件结构搞一下即可: 通过积分下载上传到CSDN的资源: 点开本人的主页,点击" ...

  2. HTML5期末大作业:在线电影网站设计——电影速递网(12页面)含登录注册HTML+CSS+JavaScript

    HTML5期末大作业:在线电影网站设计--电影速递网(12页面)含登录注册HTML+CSS+JavaScript 临近期末, 你还在为HTML网页设计结课作业,老师的作业要求感到头大?HTML网页作业 ...

  3. JavaWeb登录注册系统/界面(邮箱验证码,数据库连接,详细注释,可作结课作业,可用于学习,可接入其他主系统)

    目录 1.前言 2.系统实机演示 3.系统分析与设计 (1)主要软件与工具 (2)系统分析 (3)系统规划 4.系统设计与构建 (1)JavaWeb创建 (2)JavaWeb运行 (3)先期依赖准备: ...

  4. 软件工程大作业——在线零食销售系统

    软件工程大作业 在线零食销售系统 (Online snack sales system) 目  录 第1章 引言 1.1 研究背景 1.2 国内外研究现状 1.3 目标和意义 第2章 可行性分析 2. ...

  5. 模拟UNIX文件系统的设计及实现操作系统大作业(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye "计算机操作系统"课程设计大作业 (含答案) 一.题目:   模拟UNIX文 ...

  6. WordPress登录注册系统的优化

    WordPress的登录注册系统有很多问题,不符合一般用户的使用习惯,举例来说: (1)注册时候无法自行设置登录密码,系统将自行生成一段非常复杂的密码给用户,根本无法记忆,只能再次重置密码. (2)用 ...

  7. 【Android+OkHttp3+Jsoup】 模拟登录教务系统 抓取课表和成绩

    原文链接:https://blog.csdn.net/u013347241/article/details/52711018 今天这篇文章为大家带来的是模拟登录教务系统并抓取课表和成绩的详细实现过程. ...

  8. android servlet 登陆,Android Studio+Servlet+MySql实现登录注册

    一.Android 项目当中设置明文传输 1.设置明文传输的xml 2.引入上述创建的xml android:networkSecurityConfig="@xml/network_secu ...

  9. java注册登录客户端_GitHub - a-voyager/LoginSystem_Client: 登录注册系统(桌面客户端)——Java课程实践...

    基于HTTP协议和MySQL的多平台登录注册系统 摘要 基于HTTP协议和MySQL的多平台登录注册系统主要用于模拟演示互联网中常见的BS/CS模式登录注册系统.目前网络互访一般基于两种协议HTTP协 ...

最新文章

  1. jQuery.fly插件实现添加购物车抛物线效果
  2. Eclipse的JQuery提示插件-Spket(别试了,没什么效果,且安装设置麻烦)
  3. 【转】Unity3D将来时:IL2CPP(上)
  4. 怎样快速画出一个正方体_人教版小学数学五年级下册 长方体和正方体的体积 教案、课件,公开课视频...
  5. VTK:模型之FinanceFieldData
  6. .NET 6 Preview 6 Released
  7. 微信小程序正则判断姓名和手机号
  8. Java面向对象-抽象类
  9. php的变量引用与销毁机制
  10. sql server 2000里ldf损坏,只有mdf的恢复
  11. 键盘驱动出现黄色感叹号解决方法
  12. 团队作业9——展示博客
  13. [机器学习]模型评估指标:ROC/AUC,KS,GINI,Lift/Gain, PSI 总结
  14. 达芬奇机器人变身‘模仿达人’,通过看视频模仿手术缝合、穿针、打结等动作...
  15. AtCoder Beginner Contest 192
  16. 新概念2 课文和单词(5)
  17. 推荐几个学术工具软件给大家
  18. VDI云桌面功能目标
  19. MySQL各种优化基于《高性能MySQL第三版》
  20. 【渝粤题库】陕西师范大学165105商务礼仪作业(高起专)

热门文章

  1. 一些我们关于端到端语音翻译的思考和尝试
  2. 2D/3D加速器概念
  3. 如何实现只有一个路由器不同网段pc间的互通
  4. docker中安装mongo3.2
  5. OpenVSwitch与OpenDayLight的连接过程
  6. 从360遇上苹果说起
  7. 学习MVC之租房网站(二)-框架搭建及准备工作
  8. 计算机硬盘写入量,如何查询固态硬盘SSD的总写入量?
  9. 信息安全与管理2002_李付贵
  10. Android网卡网速测试