commit f9ac77251275a7476fc5c3fb3ecde637275b70f9
Author: zhangsan <646228430@qq.com>
Date: Thu Apr 25 10:33:59 2024 +0800
first_commit
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..a2d7c21
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..79126cd
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..bc9196e
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,60 @@
+plugins {
+ id 'com.android.application'
+ id 'kotlin-android'
+ id 'kotlin-android-extensions'
+}
+
+android {
+ compileSdk 31
+
+ defaultConfig {
+ applicationId "com.zjgsu.jianshu"
+ minSdk 21
+ targetSdk 31
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+// implementation 'android.recyclerview:recyclerview:1.0.0'
+ implementation 'io.github.bmob:android-sdk:3.9.4'
+ implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
+ implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
+ implementation 'com.squareup.okhttp3:okhttp:4.8.1'
+ implementation 'com.squareup.okio:okio:2.2.2'
+ implementation 'com.google.code.gson:gson:2.8.5'
+ implementation 'androidx.core:core-ktx:1.3.2'
+ implementation 'androidx.appcompat:appcompat:1.2.0'
+ implementation 'com.google.android.material:material:1.3.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.2'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
+ implementation 'androidx.recyclerview:recyclerview:1.0.0'
+ implementation 'de.hdodenhof:circleimageview:3.0.1'
+ implementation 'com.google.android.material:material:1.0.0'
+ implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
+ implementation 'com.github.bumptech.glide:glide:3.7.0'
+ implementation 'com.ms-square:expandableTextView:0.1.4'
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'junit:junit:4.12'
+ implementation 'com.jakewharton:butterknife:7.0.1'
+ implementation 'com.facebook.fresco:fresco:0.9.0+'
+}
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/src/androidTest/java/com/zjgsu/jianshu/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/zjgsu/jianshu/ExampleInstrumentedTest.kt
new file mode 100644
index 0000000..9487043
--- /dev/null
+++ b/app/src/androidTest/java/com/zjgsu/jianshu/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.zjgsu.jianshu
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.zjgsu.jianshu", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..16a2fd9
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/assets/introduction.txt b/app/src/main/assets/introduction.txt
new file mode 100644
index 0000000..cc5a1be
--- /dev/null
+++ b/app/src/main/assets/introduction.txt
@@ -0,0 +1,9 @@
+《围城》是钱钟书唯一的一部长篇小说,堪称中国现当代长篇小说的经典。小说塑造了抗战开初一类知识分子的群像,生动反映了在国家特定时期,特殊人群的行为操守、以及困惑。从另一个角度记述了当时的情景、氛围。虽然有具体的历史背景,但这部小说揭示的只是人群的弱点,在今天依然能够引起人们的共鸣。《围城》是中国现代文学史上一部风格独特的讽刺小说。被誉为“新儒林外史”。
+《当尼采哭泣》是一本经典的心理推理小说,书中人物多来自真实的历史,作者假托19世纪末的两位大师:尼采和布雷尔,基于史实将两人合理虚构连结成医生与病人,开启一段扣人心弦的“谈话治疗”。如诗般的语言,理性缜密的思辩,情节充满悬疑,高潮迭起,结局却出人意表……
+作为20世纪中文小说100强的《台北人》,是一部深具复杂性的短篇小说集,由十四个一流的短篇小说构成,串联成一体,则效果遽然增加,不但小说之幅面变广,使我们看到社会之“众生相”,更重要的,由于主题命意之一再重复,与互相陪衬辅佐,使我们能更进一步深入了解作品之含义,并使我们得以一窥隐藏在作品内的作者之人生观与宇宙观。
+这是一部渭河平原五十年变迁的雄奇史诗,一轴中国农村班斓多彩、触目惊心的长幅画卷。主人公六娶六丧,神秘的序曲预示着不祥。一个家族两代子孙,为争夺白鹿原的统治代代争斗不已,上演了一幕幕惊心动魄的活剧
+《平凡的世界》是一部现实主义小说,也是一部小说形式的家族史。作者浓缩了中国西北农村的历史变迁过程,在小说中全景式地表现了中国当代城乡的社会生活。在近十年的广阔背景下,通过复杂的矛盾纠葛,刻划社会各阶层众多普通人的形象。劳动与爱情,挫折与追求,痛苦与欢乐,日常生活与巨大社会冲突,纷繁地交织在一起,深刻地展示了普通人在大时代历史进程中所走过的艰难曲折的道路。
+卓有成效是管理者必须做到的事,但是在所有的知识组织中,每一位知识工作者其实都是管理者――即使他没有所谓的职权,只要他能为组织做出突出的贡献。德鲁克集中论述了一个管理者如何做到卓有成效。这本书是德鲁克最著名的管理学著作之一,倾注了德鲁克极大的心血。
+如果只用一种方式了解某个事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的其他事物相联系。通过联系,你可将想法内化于心,从各种角度看问题,直至找到适合自己的方法。这本书介绍了整体性学习策略的核心思想和具体技术,详细介绍了快速阅读法、流笔记法、比喻法、内在化等七大方法,并为高效学习提供了从生活到时间管理的整体解决方案。
+导致失败最常见的原因之一就是,人们往往在暂时的挫折面前退却。任何人在取得成功之前,必然要遇到很多暂时的挫折甚至失败。如果一个人遭遇了失败,那么最容易也最顺理成章的做法就是放弃。大多数人正是这样做的。全美国500位最成功人士的经验告诉我们,他们最伟大的成功在于,面临失败时他们能坚持再迈一步。意志的力量是无穷的,除非人为地限制它。贫穷与财富都是意念的产物。《思考致富》是美国成功学家、作家拿破仑?希尔的代表作,被誉为人类历史上最优秀的励志著作之一。
+整个世界好像串通好了要一致阻碍你拥有专注力。每时每刻,你忙于应付外界的各种干扰。这种情况下,若你还能取得一星半点的成就,那简直是奇迹!要想改变这种手忙脚乱四处救火的情形,你必须拥有专注力!从现在开始,认清对你来说最重要的事,排除一切无关干扰,专注地投入其中。你的成功概率将以指数方式增长!实现你心中真正渴望的目标!
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/AccountManagerActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/AccountManagerActivity.kt
new file mode 100644
index 0000000..f7381d9
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/AccountManagerActivity.kt
@@ -0,0 +1,11 @@
+package com.zjgsu.jianshu.Activity
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import com.zjgsu.jianshu.R
+class AccountManagerActivity:AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_accountmanager)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/BookIntro.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/BookIntro.kt
new file mode 100644
index 0000000..8b1cf21
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/BookIntro.kt
@@ -0,0 +1,53 @@
+package com.zjgsu.jianshu.Activity
+
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import androidx.appcompat.app.AppCompatActivity
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Book_informationActivity
+import com.zjgsu.jianshu.R
+import kotlinx.android.synthetic.main.activity_book_info.*
+import kotlinx.android.synthetic.main.activity_bookintro.*
+import kotlinx.android.synthetic.main.expandable3.*
+import kotlinx.android.synthetic.main.expandable4.*
+
+class BookIntro:AppCompatActivity() {
+ private lateinit var Bookname: String
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_bookintro)
+ supportActionBar?.hide()
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ Bookname = intent.getStringExtra("Book_name").toString()
+ Log.d("zy123","yes")
+ inits()
+ intro_titleback.setOnClickListener {
+ val intent = Intent(this, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", Bookname)
+ startActivity(intent)
+ finish()
+ }
+ }
+ private fun inits(){
+ val query = BmobQuery()
+ query.addWhereEqualTo("name", Bookname)
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ expandable3.text = i.introduce
+ expandable4.text = i.evaluate
+ thebkname.text=Bookname
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt
new file mode 100644
index 0000000..ea081bb
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/BookShelfActivity.kt
@@ -0,0 +1,154 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import android.view.Menu
+import android.view.MenuItem
+import android.view.View
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.GridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.BookShelf
+import kotlinx.android.synthetic.main.activity_bookshelf.*
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_perception.*
+import kotlinx.android.synthetic.main.bookshelf_item.*
+import kotlinx.android.synthetic.main.expandable.*
+import kotlin.concurrent.thread
+import com.google.android.material.snackbar.Snackbar
+
+import android.view.LayoutInflater
+import android.view.View.OnLongClickListener
+
+import android.view.ViewGroup
+
+import android.widget.TextView
+
+import androidx.recyclerview.widget.RecyclerView
+import android.view.MotionEvent
+import android.view.View.OnTouchListener
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+
+class BookShelfActivity : AppCompatActivity() {
+ val Booklist = ArrayList()
+ val Booklist2 = ArrayList()
+ lateinit var adapter:BookshelfAdapter
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_bookshelf)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager=GridLayoutManager(this,3)
+ recyclerView2.layoutManager=layoutManager
+ adapter=BookshelfAdapter(this,Booklist)
+ recyclerView2.adapter=adapter
+ adapter.setRecyclerViewOnItemClickListener(object : BookshelfAdapter.RecyclerViewOnItemClickListener {
+ override fun onItemClickListener(view: View?, position: Int) {
+ Log.d("zyzh","12311")
+ adapter.setSelectItem(position)
+ }
+
+ override fun onItemLongClickListener(view: View?, position: Int): Boolean {
+ Log.d("zy11","123121")
+ adapter.setShowBox()
+ adapter.setSelectItem(position)
+ adapter.notifyDataSetChanged()
+ return true
+ }
+ })
+
+ swipeRefresh2.setOnRefreshListener {
+ refreshBookShelf(adapter)
+ }
+ setupBottomNavigation()
+ }
+ override fun onCreateOptionsMenu(menu: Menu?): Boolean {
+ menuInflater.inflate(R.menu.nav_bookshelf,menu)
+ return true
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when(item.getItemId()) {
+ R.id.addBook-> {
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ R.id.editor->{
+ adapter.initMap()
+ adapter.setShowBox()
+ adapter.notifyDataSetChanged()
+// bookshelf_checkBox.visibility=View.VISIBLE
+ }
+ }
+ return super.onContextItemSelected(item);
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.addWhereEqualTo("userid", UserId)
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ Booklist.add(Book_Shelf(i.b_name))
+ val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist)
+ recyclerView2.adapter = adapter
+ }
+ Booklist.add(Book_Shelf("添加"))
+ Booklist2.add(Book_Shelf("添加"))
+ val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist)
+ recyclerView2.adapter = adapter
+ }
+ }
+ })
+ }
+ private fun refreshBookShelf(adapter: BookshelfAdapter) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initbookshelf()
+ adapter.notifyDataSetChanged()
+ swipeRefresh2.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initbookshelf(){
+ Booklist.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.addWhereEqualTo("userid", UserId)
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ Booklist.add(Book_Shelf(i.b_name))
+ }
+ Booklist.add(Book_Shelf("添加"))
+ val adapter =BookshelfAdapter(this@BookShelfActivity,Booklist)
+ recyclerView2.adapter = adapter
+ }else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun setupBottomNavigation() {
+ bookcity.setOnClickListener {
+ NavigationHelper.navigateTo(this, MainActivity::class.java)
+ }
+ bookshelf.setOnClickListener {
+ NavigationHelper.navigateTo(this, BookShelfActivity::class.java)
+ }
+ reading_comprehension.setOnClickListener {
+ NavigationHelper.navigateTo(this, PerceptionActivity::class.java)
+ }
+ homepage.setOnClickListener {
+ NavigationHelper.navigateTo(this, MyActivity::class.java)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/Book_informationActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/Book_informationActivity.kt
new file mode 100644
index 0000000..bd9939e
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/Book_informationActivity.kt
@@ -0,0 +1,322 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+
+import android.util.Log
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+import android.os.Bundle
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.listener.SaveListener
+import com.zjgsu.jianshu.Activity.BookIntro
+import com.zjgsu.jianshu.Adapter.GoodsuibiAdapter
+import com.zjgsu.jianshu.Bmob.BookShelf
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import kotlinx.android.synthetic.main.activity_book_info.*
+import kotlinx.android.synthetic.main.title.*
+
+
+class Book_informationActivity : AppCompatActivity() {
+ private var author_name: String = ""
+ private val perceptionList = ArrayList()
+ var Mycomment: Boolean = false
+ private lateinit var Bookname: String
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_book_info)
+ supportActionBar?.hide()
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ Bookname = intent.getStringExtra("Book_name").toString()
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数
+ recyclerView3.layoutManager = layoutManager
+ var adapter = GoodsuibiAdapter(perceptionList)
+ recyclerView3.adapter = adapter
+ val query = BmobQuery()
+ query.addWhereEqualTo("name", Bookname)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ book_imageview.setImageBitmap(bitmap)
+
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ if (p.buxing + p.tuijian + p.buxing != 0) {
+ var tuijian_res: Double = 0.0
+ tuijian_res = (p.tuijian) * 100.0 / (p.buxing + p.tuijian + p.yiban)
+ progressBar_henhao.progress =
+ p.tuijian * 100 / (p.buxing + p.tuijian + p.yiban)
+ progressBar_yiban.progress =
+ p.yiban * 100 / (p.buxing + p.tuijian + p.yiban)
+ progressBar_buxing.progress =
+ p.buxing * 100 / (p.buxing + p.tuijian + p.yiban)
+ val str: String = String.format("%.2f", tuijian_res)
+ textView10.text = "简书推荐值 " + str + "%"
+ }
+ }
+ }
+ }
+ }
+ })
+// val query1 = BmobQuery()
+// query1.addWhereEqualTo("objectId", Bookname)
+// query1.findObjects(object : FindListener() {
+// override fun done(p0: MutableList?, p1: BmobException?) {
+// if (p1 == null) {
+// if (p0 != null && p0.size > 0) {
+// for (p in p0) {
+// object : Thread() {
+// override fun run() {
+// try {
+// val url = Uri.parse(p!!.view1.url)
+// mVideoView1.setVideoURI(url)
+// mVideoView1.start()
+//
+// } catch (e: Exception) {
+// e.printStackTrace()
+// }
+// }
+// }.start()
+// }
+// }
+// }
+// }
+// })
+// query1.findObjects(object : FindListener() {
+// override fun done(p0: MutableList?, p1: BmobException?) {
+// if (p1 == null) {
+// if (p0 != null && p0.size > 0) {
+// for (p in p0) {
+// object : Thread() {
+// override fun run() {
+// try {
+// val url = Uri.parse(p!!.view2.url)
+// mVideoView2.setVideoURI(url)
+// mVideoView2.start()
+// } catch (e: Exception) {
+// e.printStackTrace()
+// }
+// }
+// }.start()
+// }
+// }
+// }
+// }
+// })
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ Book_name_View.text = i.name
+ book_authorname.text = i.author_name
+ author_name=i.author_name
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ book_authorname.setOnClickListener {
+ val intent = Intent(this, author_introductionActivity::class.java)
+ intent.putExtra("author_name", author_name)
+ startActivity(intent)
+ }
+ b_henhao.setOnClickListener {
+ if (Mycomment == false) {
+ Mycomment = true
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ i.settuijian(i.tuijian + 1)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@Book_informationActivity,
+ "评价成功!",
+ Toast.LENGTH_LONG
+ ).show()
+ } else {
+ Log.d(
+ "保存数据!!!!!!!!!!!!!!!!!!",
+ p0.message.toString()
+ )
+ }
+ }
+ })
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ } else
+ Toast.makeText(this, "仅能评价一次!", Toast.LENGTH_SHORT).show()
+ }
+ b_yiban.setOnClickListener {
+ if (Mycomment == false) {
+ Mycomment = true
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ i.setyiban(i.yiban + 1)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@Book_informationActivity,
+ "评价成功!",
+ Toast.LENGTH_LONG
+ ).show()
+ } else {
+ Log.d(
+ "保存数据!!!!!!!!!!!!!!!!!!",
+ p0.message.toString()
+ )
+ }
+ }
+ })
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ } else
+ Toast.makeText(this, "仅能评价一次!", Toast.LENGTH_SHORT).show()
+ }
+ b_buxing.setOnClickListener {
+ if (Mycomment == false) {
+ Mycomment = true
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ i.setbuxing(i.buxing + 1)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@Book_informationActivity,
+ "评价成功!",
+ Toast.LENGTH_LONG
+ ).show()
+ } else {
+ Log.d(
+ "保存数据!!!!!!!!!!!!!!!!!!",
+ p0.message.toString()
+ )
+ }
+ }
+ })
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ } else
+ Toast.makeText(this, "仅能评价一次!", Toast.LENGTH_SHORT).show()
+ }
+ titleback.setOnClickListener {
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ titleAddBook.setOnClickListener {
+ val query = BmobQuery()
+ query.addWhereEqualTo("userid", UserId)
+ query.addWhereEqualTo("b_name", Bookname)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ Toast.makeText(this@Book_informationActivity, "书本已在您的书架中!", Toast.LENGTH_SHORT)
+ } else {
+ val bookshelf_record = BookShelf()
+ bookshelf_record.settb_name(Bookname)
+ bookshelf_record.setuserid(UserId)
+ bookshelf_record.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ titleAddBook.setImageResource(R.drawable.bookshelf2)
+ Toast.makeText(this@Book_informationActivity,"添加成功",Toast.LENGTH_SHORT).show()
+ } else {
+
+ }
+ }
+ })
+ }
+ }
+ }
+ })
+ }
+ book_imageview.setOnClickListener {
+ val intent = Intent(this, BookIntro::class.java)
+ intent.putExtra("Book_name", Bookname)
+ startActivity(intent)
+ finish()
+ }
+ }
+
+ private fun inits() {
+ val myquery = BmobQuery()
+ myquery.addWhereEqualTo("b_name", Bookname)
+ myquery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ perceptionList.add(Perception(i.objectId))
+ val adapter = GoodsuibiAdapter(perceptionList)
+ recyclerView3.adapter = adapter
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ val myquery2 = BmobQuery()
+ myquery2.addWhereEqualTo("userid", UserId)
+ myquery2.addWhereEqualTo("b_name", Bookname)
+ myquery2.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ titleAddBook.setImageResource(R.drawable.bookshelf2)
+ }
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/FindpwdActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/FindpwdActivity.kt
new file mode 100644
index 0000000..a124413
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/FindpwdActivity.kt
@@ -0,0 +1,78 @@
+package com.zjgsu.jianshu
+
+import android.content.DialogInterface
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.os.Process
+import android.util.Log
+import android.view.View
+import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_findpwd.*
+import kotlinx.android.synthetic.main.activity_findpwd.image_findpwd_backtoLogin
+import kotlinx.android.synthetic.main.activity_register.*
+
+class FindpwdActivity:AppCompatActivity() {
+ private var msg:String=""
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_findpwd)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ image_findpwd_backtoLogin.setOnClickListener{
+ val intent=Intent(this,LoginActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ inits()
+ }
+ private val click2 = DialogInterface.OnClickListener { arg0, arg1 -> arg0.cancel()
+ val intent=Intent(this,LoginActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ public fun showdialog(view:View){
+ val alertdialog:AlertDialog.Builder=AlertDialog.Builder(this)
+ alertdialog.setMessage(msg)
+ alertdialog.setNegativeButton("确认", click2);
+ val alertdialog1:AlertDialog=alertdialog.create();
+ alertdialog1.show();
+ }
+ public fun inits(){
+ bt_find_nextstep.setOnClickListener{
+ var flag:Boolean=false
+ val user_account: String = et_find_account.text.toString()
+ val user_email:String=et_find_mail.text.toString()
+ if(user_account.isEmpty()||user_email.isEmpty()) {
+ Toast.makeText(this, "账号或邮箱不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy",user_account)
+ }
+ else{
+ val bmobQuery = BmobQuery()
+ var tempPwd:String=""
+ bmobQuery.findObjects(object :FindListener(){
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)&&user_email.equals(i.email)) {
+ flag = true
+ tempPwd=i.password
+ msg="您的密码为: "+tempPwd
+ showdialog(bt_find_nextstep)
+ }
+ }
+ if(flag!=true)
+ Toast.makeText(this@FindpwdActivity,"账号不存在,请重新输入!",Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/LoginActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/LoginActivity.kt
new file mode 100644
index 0000000..950bc9f
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/LoginActivity.kt
@@ -0,0 +1,78 @@
+package com.zjgsu.jianshu
+
+import android.content.Context
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.widget.TextView
+import android.widget.Toast
+import androidx.core.content.ContextCompat
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.BmobUser
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_login.*
+import kotlinx.android.synthetic.main.activity_register.*
+
+class LoginActivity : AppCompatActivity() {
+ // var mBtnLogin:TextView= TextView(this)
+ override fun onCreate(savedInstanceState: Bundle?) {
+ var flag: Boolean = false
+ var done: Boolean = false
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_login)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ forget_password.setOnClickListener {
+ val intent = Intent(this, FindpwdActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bt_register.setOnClickListener {
+ val intent = Intent(this, RegisterActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bt_login.setOnClickListener {
+ val use_account: String = et_blackOutName.text.toString()
+ val use_pwd: String = et_UserPassword.text.toString()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (use_account.equals(i.account) && use_pwd.equals(i.password)) {
+ val editor=getSharedPreferences("userinf", Context.MODE_PRIVATE).edit()
+ editor.putString("user_id",i.objectId)
+ editor.apply()
+ flag = true
+ val intent = Intent(this@LoginActivity, MainActivity::class.java)
+ intent.putExtra("userid",i.objectId)
+ startActivity(intent)
+ Toast.makeText(this@LoginActivity, "登陆成功!", Toast.LENGTH_SHORT)
+ .show()
+ break
+ }
+ }
+ done = true
+ }
+ }
+ })
+ if (done) {
+ var a: String = ""
+ if (flag)
+ a = "1"
+ else
+ a = "0"
+ Log.d("zynnnb", a)
+ if (use_account.isEmpty() || use_pwd.isEmpty())
+ Toast.makeText(this, "账号或密码不能为空白", Toast.LENGTH_SHORT).show()
+ else if (flag != true)
+ Toast.makeText(this@LoginActivity, "账号或密码不正确", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/MainActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/MainActivity.kt
new file mode 100644
index 0000000..b96d36b
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/MainActivity.kt
@@ -0,0 +1,363 @@
+//package com.zjgsu.jianshu
+//import android.content.ClipData
+//import android.content.Intent
+//import androidx.appcompat.app.AppCompatActivity
+//import android.os.Bundle
+//import android.text.TextUtils
+//import android.util.Log
+//import android.view.Menu
+//import android.view.MenuItem
+//import android.widget.Adapter
+//import android.widget.SearchView
+//import android.widget.Toast
+//import androidx.core.view.GravityCompat
+//import androidx.recyclerview.widget.StaggeredGridLayoutManager
+//import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+//import cn.bmob.v3.Bmob
+//import cn.bmob.v3.BmobQuery
+//import cn.bmob.v3.exception.BmobException
+//import cn.bmob.v3.listener.FindListener
+//import kotlinx.android.synthetic.main.activity_main.*
+//import kotlinx.android.synthetic.main.activity_xinli.*
+//import java.io.BufferedReader
+//import java.io.IOException
+//import java.io.InputStream
+//import java.io.InputStreamReader
+//import java.lang.StringBuilder
+//import kotlin.concurrent.thread
+//
+//var UserId: String = ""
+//
+//class MainActivity : AppCompatActivity() {
+// private var user_id: String = ""
+// private var bookList = ArrayList()
+// private var bookList1 = ArrayList()
+// private var bookList2 = ArrayList()
+// private var bookList3 = ArrayList()
+// public fun Search(query: String): ArrayList {
+// val bookList1 = ArrayList()
+// for (source in bookList) {
+// if (source.name.contains(query))
+// bookList1.add(
+// Book(
+// source.name,
+// source.introduce,
+// source.tuijian,
+// source.yiban,
+// source.buxing
+// )
+// )
+// }
+// return bookList1
+// }
+//
+// override fun onCreate(savedInstanceState: Bundle?) {
+// super.onCreate(savedInstanceState)
+// setContentView(R.layout.activity_main)
+// supportActionBar?.let {
+// it.setDisplayHomeAsUpEnabled(true)
+// it.setHomeAsUpIndicator(R.drawable.menu)
+// }
+// Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+// UserId = intent.getStringExtra("userid").toString()
+// inits()
+// val layoutManager =
+// StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+// recyclerView.layoutManager = layoutManager
+// var adapter = BookAdapter(bookList)
+// recyclerView.adapter = adapter
+// swipeRefresh.setOnRefreshListener {
+// refreshBooks(adapter)
+// }
+// navView.setCheckedItem(R.id.goodbook)
+// navView.setNavigationItemSelectedListener {
+// val intentwenxue = Intent(this, WenXueActivity::class.java)
+// val intentguanli = Intent(this, guanliActivity::class.java)
+// val intentxinli = Intent(this, xinliActivity::class.java)
+// val intentkexue = Intent(this, kexueActivity::class.java)
+// val intentzhexue = Intent(this, zhexueActivity::class.java)
+// when (it.itemId) {
+// R.id.wenxue -> startActivity(intentwenxue)
+// R.id.guanli -> startActivity(intentguanli)
+// R.id.xinli -> startActivity(intentxinli)
+// R.id.zhexue -> startActivity(intentzhexue)
+// R.id.kexue -> startActivity(intentkexue)
+// }
+// drawerLayout.closeDrawers()
+// true
+// }
+// main_searchview.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+// // 设置搜索文本监听{
+// override fun onQueryTextSubmit(query: String): Boolean { //搜索时触发事件
+// return false
+// }
+//
+// override fun onQueryTextChange(newText: String): Boolean {
+// if (TextUtils.isEmpty(newText)) {
+// bookList.clear()
+// bookList.addAll(bookList2)
+// } else {
+// bookList1.clear()
+// bookList.clear()
+// bookList1.addAll(bookList2)
+// for (source in bookList1) {
+// if (source.name.contains(newText)) {
+// bookList.add(
+// Book(
+// source.name,
+// source.introduce,
+// source.tuijian,
+// source.yiban,
+// source.buxing
+// )
+// )
+// }
+// }
+// for (i in bookList)
+// Log.d("zy123", i.name)
+// bookList3.addAll(bookList)
+// thread {
+// Thread.sleep(2000)
+// runOnUiThread {
+// initBooks()
+// adapter.notifyDataSetChanged()
+// }
+// }
+// }
+// return false
+// }
+// })
+// book_recommend.setOnClickListener {
+// val intent = Intent(this, MainActivity::class.java)
+// startActivity(intent)
+// finish()
+// }
+// book_bookshelf.setOnClickListener {
+// val intent = Intent(this, BookShelfActivity::class.java)
+// startActivity(intent)
+// finish()
+// }
+// reading_comprehension.setOnClickListener {
+// val intent = Intent(this, PerceptionActivity::class.java)
+// startActivity(intent)
+// finish()
+// }
+// self.setOnClickListener {
+// val intent = Intent(this, MyActivity::class.java)
+// startActivity(intent)
+// finish()
+// }
+// }
+//
+// private fun refreshBooks(adapter: BookAdapter) {
+// thread {
+// Thread.sleep(2000)
+// runOnUiThread {
+// initBooks()
+// adapter.notifyDataSetChanged()
+// swipeRefresh.isRefreshing = false
+// Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+// }
+// }
+// }
+//
+// override fun onOptionsItemSelected(item: MenuItem): Boolean {
+// when (item.itemId) {
+// android.R.id.home -> drawerLayout.openDrawer(GravityCompat.START)
+// }
+// return true
+// }
+//
+// private fun initBooks() {
+// if (bookList3.isNotEmpty()) {
+// bookList.clear()
+// bookList.addAll(bookList3)
+// val adapter = BookAdapter(bookList)
+// recyclerView.adapter = adapter
+// bookList3.clear()
+// } else {
+// bookList.clear()
+// val bmobQuery = BmobQuery()
+// bmobQuery.findObjects(object : FindListener() {
+// override fun done(list: List, e: BmobException?) {
+// var cnt: Int = 0
+// if (e == null) {
+// for (i in list) {
+// if (cnt < 15) {
+// bookList.add(
+// Book(
+// i.name,
+// i.introduce,
+// i.tuijian,
+// i.yiban,
+// i.buxing
+// )
+// )
+// val adapter = BookAdapter(bookList)
+// recyclerView.adapter = adapter
+// cnt++
+// }
+// }
+//// bookList.sortBy { it.tuijian * 100 / (it.buxing + it.tuijian + it.buxing) }
+// } else {
+// Log.d("error", "error")
+// }
+// }
+// })
+// }
+// }
+//
+//
+// private fun inits() {
+//// initsIntroduction()
+//// val books= mutableListOf(Book("围城","1111111111111",R.drawable.weicheng),Book("当尼采哭泣","2222222222",R.drawable.nicai),Book("台北人","333333333",R.drawable.taibei))
+//// for(index in 0..2) {
+//// bookList.add(books[index])
+//// bookList2.add(books[index])
+//// val adapter = BookAdapter(this@MainActivity, bookList)
+//// recyclerView.adapter = adapter
+//// }
+// val bmobQuery = BmobQuery()
+// bmobQuery.findObjects(object : FindListener() {
+// override fun done(list: List, e: BmobException?) {
+// var cnt: Int = 0
+// if (e == null) {
+// for (i in list) {
+// if (cnt < 15) {
+// bookList.add(Book(i.name, i.introduce, i.tuijian, i.yiban, i.buxing))
+// bookList2.add(Book(i.name, i.introduce, i.tuijian, i.yiban, i.buxing))
+// val adapter = BookAdapter(bookList)
+// recyclerView.adapter = adapter
+// cnt++
+// }
+// }
+//// bookList.add(Book("www","www",11,12,13))
+// } else {
+// Log.d("error", "error")
+// }
+// }
+// })
+// }
+//}
+
+
+package com.zjgsu.jianshu
+
+import android.app.Person
+import android.content.Intent
+import android.os.Bundle
+import android.text.TextUtils
+import android.util.Log
+import android.view.MenuItem
+import android.widget.SearchView
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+
+var UserId: String = ""
+class MainActivity : AppCompatActivity() {
+ private lateinit var adapter: BookAdapter
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_main)
+ supportActionBar?.setDisplayHomeAsUpEnabled(true)
+ supportActionBar?.setHomeAsUpIndicator(R.drawable.menu)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")
+ adapter = BookAdapter(bookList)
+ recyclerView.layoutManager = StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)
+ recyclerView.adapter = adapter
+
+ swipeRefresh.setOnRefreshListener {
+ loadBooks() //下拉刷新
+ }
+
+ main_searchview.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
+ override fun onQueryTextSubmit(query: String): Boolean = false
+
+ override fun onQueryTextChange(newText: String): Boolean {
+ val filteredList = if (TextUtils.isEmpty(newText)) {
+ bookList
+ } else {
+ bookList.filter { it.name.contains(newText) }
+ }
+ adapter.updateBooks(filteredList) //搜索框刷新
+ return true
+ }
+ })
+
+ navView.setCheckedItem(R.id.goodbook)
+ navView.setNavigationItemSelectedListener { menuItem ->
+ startActivity(Intent(this, when(menuItem.itemId) {
+ R.id.wenxue -> WenXueActivity::class.java
+ R.id.guanli -> guanliActivity::class.java
+ R.id.xinli -> xinliActivity::class.java
+ R.id.zhexue -> zhexueActivity::class.java
+ R.id.kexue -> kexueActivity::class.java
+ else -> MainActivity::class.java
+ }))
+ drawerLayout.closeDrawers()
+ true
+ }
+
+ loadBooks()
+ setupBottomNavigation()
+ }
+
+ private fun loadBooks() {
+ val query = BmobQuery()
+ query.findObjects(object : FindListener() {
+ override fun done(books: List?, e: BmobException?) {
+ swipeRefresh.isRefreshing = false
+ if (e == null) {
+ bookList.clear()
+ books?.let {
+ bookList.addAll(it.map { b ->
+ // 使用安全调用和Elvis操作符提供默认值或进行错误处理
+ val url = b.picture?.url ?: "default_url_or_handling_case"
+ Book(b.name, b.introduce, url)
+ })
+ }
+ adapter.notifyDataSetChanged()
+ } else {
+ Toast.makeText(this@MainActivity, "Failed to retrieve books: ${e.message}", Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+
+ private fun setupBottomNavigation() {
+ bookcity.setOnClickListener {
+ NavigationHelper.navigateTo(this, MainActivity::class.java)
+ }
+ bookshelf.setOnClickListener {
+ NavigationHelper.navigateTo(this, BookShelfActivity::class.java)
+ }
+ reading_comprehension.setOnClickListener {
+ NavigationHelper.navigateTo(this, PerceptionActivity::class.java)
+ }
+ homepage.setOnClickListener {
+ NavigationHelper.navigateTo(this, MyActivity::class.java)
+ }
+ }
+
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ if (item.itemId == android.R.id.home) {
+ drawerLayout.openDrawer(GravityCompat.START)
+ return true
+ }
+ return super.onOptionsItemSelected(item)
+ }
+}
+
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/MediaPlayerActivity.java b/app/src/main/java/com/zjgsu/jianshu/Activity/MediaPlayerActivity.java
new file mode 100644
index 0000000..e0adef7
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/MediaPlayerActivity.java
@@ -0,0 +1,161 @@
+package com.zjgsu.jianshu.Activity;
+import android.app.Activity;
+import android.app.LocalActivityManager;
+import android.graphics.BitmapFactory;
+import android.graphics.Matrix;
+import android.os.Bundle;
+import android.util.DisplayMetrics;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.animation.Animation;
+import android.view.animation.TranslateAnimation;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.VideoView;
+import com.zjgsu.jianshu.R;
+import androidx.viewpager.widget.PagerAdapter;
+import androidx.viewpager.widget.ViewPager;
+
+import java.util.ArrayList;
+
+public class MediaPlayerActivity extends Activity implements View.OnClickListener{
+
+ private ViewPager viewPager;
+ private ArrayList pageview;
+ private TextView videoLayout;
+ private TextView musicLayout;
+ // 滚动条图片
+ private ImageView scrollbar;
+ // 滚动条初始偏移量
+ private int offset = 0;
+ // 当前页编号
+ private int currIndex = 0;
+ // 滚动条宽度
+ private int bmpW;
+ //一倍滚动量
+ private int one;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.pageview);
+ viewPager = (ViewPager) findViewById(R.id.viewPager);
+ //查找布局文件用LayoutInflater.inflate
+ LayoutInflater inflater =getLayoutInflater();
+ View view1 = inflater.inflate(R.layout.video_player, null);
+ View view2 = inflater.inflate(R.layout.media_player, null);
+ videoLayout = (TextView)findViewById(R.id.videoLayout);
+ musicLayout = (TextView)findViewById(R.id.musicLayout);
+ scrollbar = (ImageView)findViewById(R.id.scrollbar);
+ videoLayout.setOnClickListener(this);
+ musicLayout.setOnClickListener(this);
+ pageview =new ArrayList();
+ //添加想要切换的界面
+ pageview.add(view1);
+ pageview.add(view2);
+ //数据适配器
+ PagerAdapter mPagerAdapter = new PagerAdapter(){
+
+ @Override
+ //获取当前窗体界面数
+ public int getCount() {
+ // TODO Auto-generated method stub
+ return pageview.size();
+ }
+
+ @Override
+ //判断是否由对象生成界面
+ public boolean isViewFromObject(View arg0, Object arg1) {
+ // TODO Auto-generated method stub
+ return arg0==arg1;
+ }
+ //使从ViewGroup中移出当前View
+ public void destroyItem(View arg0, int arg1, Object arg2) {
+ ((ViewPager) arg0).removeView(pageview.get(arg1));
+ }
+
+ //返回一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中
+ public Object instantiateItem(View arg0, int arg1){
+ ((ViewPager)arg0).addView(pageview.get(arg1));
+ return pageview.get(arg1);
+ }
+ };
+ //绑定适配器
+ viewPager.setAdapter(mPagerAdapter);
+ //设置viewPager的初始界面为第一个界面
+ viewPager.setCurrentItem(0);
+ //添加切换界面的监听器
+ viewPager.addOnPageChangeListener(new MyOnPageChangeListener());
+ // 获取滚动条的宽度
+ bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.weicheng).getWidth();
+ //为了获取屏幕宽度,新建一个DisplayMetrics对象
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ //将当前窗口的一些信息放在DisplayMetrics类中
+ getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
+ //得到屏幕的宽度
+ int screenW = displayMetrics.widthPixels;
+ //计算出滚动条初始的偏移量
+ offset = (screenW / 2 - bmpW) / 2;
+ //计算出切换一个界面时,滚动条的位移量
+ one = offset * 2 + bmpW;
+ Matrix matrix = new Matrix();
+ matrix.postTranslate(offset, 0);
+ //将滚动条的初始位置设置成与左边界间隔一个offset
+ scrollbar.setImageMatrix(matrix);
+ }
+
+ public class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {
+
+ @Override
+ public void onPageSelected(int arg0) {
+ Animation animation = null;
+ switch (arg0) {
+ case 0:
+ /**
+ * TranslateAnimation的四个属性分别为
+ * float fromXDelta 动画开始的点离当前View X坐标上的差值
+ * float toXDelta 动画结束的点离当前View X坐标上的差值
+ * float fromYDelta 动画开始的点离当前View Y坐标上的差值
+ * float toYDelta 动画开始的点离当前View Y坐标上的差值
+ **/
+ animation = new TranslateAnimation(one, 0, 0, 0);
+ break;
+ case 1:
+ animation = new TranslateAnimation(offset, one, 0, 0);
+ break;
+ }
+ //arg0为切换到的页的编码
+ currIndex = arg0;
+ // 将此属性设置为true可以使得图片停在动画结束时的位置
+ animation.setFillAfter(true);
+ //动画持续时间,单位为毫秒
+ animation.setDuration(200);
+ //滚动条开始动画
+ scrollbar.startAnimation(animation);
+ }
+
+ @Override
+ public void onPageScrolled(int arg0, float arg1, int arg2) {
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int arg0) {
+ }
+ }
+
+ @Override
+ public void onClick(View view){
+ switch (view.getId()){
+ case R.id.videoLayout:
+ //点击"视频“时切换到第一页
+ viewPager.setCurrentItem(0);
+ break;
+ case R.id.musicLayout:
+ //点击“音乐”时切换的第二页
+ viewPager.setCurrentItem(1);
+ break;
+ }
+ }
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/MyActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/MyActivity.kt
new file mode 100644
index 0000000..53f309a
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/MyActivity.kt
@@ -0,0 +1,113 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Activity.AccountManagerActivity
+import com.zjgsu.jianshu.Activity.MyPostActivity
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_my.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class MyActivity : AppCompatActivity() {
+
+ //登录的用户名
+ public val user_account="0509"
+// public val user="斤鱼"
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_my)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754") //连接bmob
+ val query = BmobQuery()
+ query.addWhereEqualTo("objectId", UserId)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if(p0!=null&&p0.size>0) {
+ for (p in p0) {
+ tUserName.text=p.nickName
+ tUserSignature.text=p.signature
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.face.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ iv_avatar.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ //个人信息修改
+ re_myinfo.setOnClickListener {
+ val extra_account=user_account
+ val intent= Intent(this,ReMyinfoActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+// Log.d("helloSend","$signatureData")
+// Log.d("helloSend","$userData")
+ startActivity(intent)
+ finish()
+ }
+ //我的发布
+ myPost.setOnClickListener {
+ val intent= Intent(this,MyPostActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ //账号管理
+ account_manager.setOnClickListener{
+ val intent= Intent(this,AccountManagerActivity::class.java)
+ val userData=user_account
+ intent.putExtra("extra_user_data",userData)
+ startActivity(intent)
+ finish()
+ }
+
+ tuichu.setOnClickListener {
+ val intent= Intent(this,LoginActivity::class.java)
+ UserId=""
+ startActivity(intent)
+ finish()
+ }
+ setupBottomNavigation()
+ }
+ private fun setupBottomNavigation() {
+ bookcity.setOnClickListener {
+ NavigationHelper.navigateTo(this, MainActivity::class.java)
+ }
+ bookshelf.setOnClickListener {
+ NavigationHelper.navigateTo(this, BookShelfActivity::class.java)
+ }
+ reading_comprehension.setOnClickListener {
+ NavigationHelper.navigateTo(this, PerceptionActivity::class.java)
+ }
+ homepage.setOnClickListener {
+ NavigationHelper.navigateTo(this, MyActivity::class.java)
+ }
+ }
+}
+
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/MyPostActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/MyPostActivity.kt
new file mode 100644
index 0000000..afec7ed
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/MyPostActivity.kt
@@ -0,0 +1,55 @@
+package com.zjgsu.jianshu.Activity
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import androidx.recyclerview.widget.LinearLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.*
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import kotlinx.android.synthetic.main.activity_my_post.*
+
+class MyPostActivity : AppCompatActivity() {
+ private val PerceptionList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_my_post)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+
+ val layoutManager=LinearLayoutManager(this)
+ myPost_recyclerView.layoutManager = layoutManager
+ val adapter =PerceptionAdapter(PerceptionList)
+
+ myPost_recyclerView.adapter = adapter
+
+ Log.d("myLog",myPost_recyclerView.adapter.toString())
+ mypost_back.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list){
+ if(i.userid== UserId) {
+ PerceptionList.add(Perception(i.objectId))
+ val adapter = PerceptionAdapter(PerceptionList)
+ myPost_recyclerView.adapter = adapter
+ }
+ }
+ }
+ else {
+ Log.d("error","error")}
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/PerceptionActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/PerceptionActivity.kt
new file mode 100644
index 0000000..015b446
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/PerceptionActivity.kt
@@ -0,0 +1,89 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.recyclerview.widget.LinearLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Activity.sendPerceptionActivity
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import kotlinx.android.synthetic.main.activity_perception.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class PerceptionActivity : AppCompatActivity() {
+ private val PerceptionList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_perception)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager=LinearLayoutManager(this)
+ perception_recyclerView.layoutManager = layoutManager
+ val adapter =PerceptionAdapter(PerceptionList)
+
+ perception_recyclerView.adapter = adapter
+ perception_swipeRefresh.setOnRefreshListener {
+ refreshPerception(adapter)
+ }
+
+ Log.d("myLog",perception_recyclerView.adapter.toString())
+
+ fab.setOnClickListener {
+ Toast.makeText(this,"新建随笔",Toast.LENGTH_SHORT).show()
+ }
+ fab.setOnClickListener {
+ val intent=Intent(this,sendPerceptionActivity::class.java)
+ intent.putExtra("userid", UserId)
+ startActivity(intent)
+ finish()
+ }
+ setupBottomNavigation()
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list){
+ PerceptionList.add(Perception(i.objectId))
+ val adapter =PerceptionAdapter(PerceptionList)
+ perception_recyclerView.adapter = adapter
+ }
+ }
+ else {
+ Log.d("error","error")}
+ }
+ })
+ }
+ private fun refreshPerception(adapter: PerceptionAdapter) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ inits()
+ adapter.notifyDataSetChanged()
+ perception_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun setupBottomNavigation() {
+ bookcity.setOnClickListener {
+ NavigationHelper.navigateTo(this, MainActivity::class.java)
+ }
+ bookshelf.setOnClickListener {
+ NavigationHelper.navigateTo(this, BookShelfActivity::class.java)
+ }
+ reading_comprehension.setOnClickListener {
+ NavigationHelper.navigateTo(this, PerceptionActivity::class.java)
+ }
+ homepage.setOnClickListener {
+ NavigationHelper.navigateTo(this, MyActivity::class.java)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/Perception_informationActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/Perception_informationActivity.kt
new file mode 100644
index 0000000..a412a08
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/Perception_informationActivity.kt
@@ -0,0 +1,196 @@
+package com.zjgsu.jianshu.Activity
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.SaveListener
+import com.zjgsu.jianshu.*
+import com.zjgsu.jianshu.Adapter.CommentAdapter
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Bmob.Comment_bmob
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_perception_infomation.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class Perception_informationActivity:AppCompatActivity() {
+ private lateinit var perceptionid:String
+ private lateinit var bookName:String
+ private val commentlist=ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_perception_infomation)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ perceptionid = intent.getStringExtra("PerceptionId").toString()
+ Log.d("mytest",perceptionid)
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ comment_recyclerview.layoutManager = layoutManager
+ var adapter = CommentAdapter(commentlist)
+ comment_recyclerview.adapter = adapter
+ submitComment.setOnClickListener {
+ val comment=Comment_bmob()
+ comment.text=yourcomment.text.toString()
+ comment.perceptionid=perceptionid
+ comment.comment_personid= UserId
+ comment.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ Toast.makeText(
+ this@Perception_informationActivity,
+ "评论成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ yourcomment.text=null
+ } else {
+ Toast.makeText(
+ this@Perception_informationActivity,
+ "评论失败!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+ inf_bookInf.setOnClickListener{
+ val intent = Intent(this, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", bookName)
+ startActivity(intent)
+ finish()
+ }
+ }
+ private fun inits(){
+ val query = BmobQuery()
+ query.addWhereEqualTo("objectId",perceptionid)
+ //加载用户头像
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ //找发布用户
+ inf_textView_perception.text=p.perception
+ postTime.text="发表于 "+p.createdAt
+ val queryUser = BmobQuery()
+ queryUser.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (p.userid.equals(i.objectId)) {
+ inf_postPersonName.text=i.nickName
+// flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //加载图片
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.face?.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(3000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ inf_user_icon.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+
+
+ }
+ }
+ } else {
+ Log.d("myLog", "error")
+ }
+ }
+ })
+ }
+ }
+ }
+ }
+ })
+ //加载书籍封面
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ Log.d("myLog", p.b_name)
+ bookName = p.b_name
+ inf_bookName.text = bookName
+ val queryBook = BmobQuery()
+ queryBook.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (p.b_name.equals(i.name)) {
+ inf_bookAuthor.text =
+ i.author_name
+ //加载图片
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.picture?.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(3000)
+ val `in`: InputStream =
+ connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ inf_book_pic.setImageBitmap(
+ bitmap
+ )
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+
+
+ }
+ }
+ } else {
+ Log.d("myLog", "error")
+ }
+ }
+ })
+ }
+ }
+ }
+ }
+ })
+ val bmobquery=BmobQuery()
+ bmobquery.addWhereEqualTo("perceptionid",perceptionid)
+ bmobquery.findObjects(object:FindListener(){
+ override fun done(list:List,e:BmobException?){
+ if(e==null){
+ var cnt=0
+ for(i in list){
+ cnt++
+ commentlist.add(Comment(i.objectId))
+ val adapter = CommentAdapter(commentlist)
+ comment_recyclerview.adapter = adapter
+ }
+ comment_cnt.text="评论 "+cnt.toString()
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReAddressActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReAddressActivity.kt
new file mode 100644
index 0000000..85009bf
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReAddressActivity.kt
@@ -0,0 +1,85 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_re_email.*
+
+class ReAddressActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_email)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754") //连接bmob
+
+ t_title.setText("修改地址")
+ val extra_account = intent.getStringExtra("extra_account")
+ val extra_address = intent.getStringExtra("extra_address")
+ cur_email.setHint(extra_address)
+
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curAddress = cur_email.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ if (user_account.isEmpty()) {
+ Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的sex
+ i.setaddress(curAddress)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@ReAddressActivity,
+ "地址修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+
+
+ }
+ }
+
+ if (flag != true)
+ Toast.makeText(
+ this@ReAddressActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReEmailActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReEmailActivity.kt
new file mode 100644
index 0000000..c71cda5
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReEmailActivity.kt
@@ -0,0 +1,99 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_re_email.*
+import kotlinx.android.synthetic.main.activity_re_email.back2my
+
+class ReEmailActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_email)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754") //连接bmob
+
+ val emailPatten="^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+\$".toRegex()
+// val matched=emailPatten.matches(input = "812872040@qq.com")
+// Log.d("myLog",matched.toString())
+
+ val extra_account = intent.getStringExtra("extra_account")
+ val extra_email = intent.getStringExtra("extra_email")
+ cur_email.setHint(extra_email)
+ back2my.setOnClickListener() {
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curEmail = cur_email.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ if (user_account.isEmpty()) {
+ Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的sex
+ if (emailPatten.matches(input = curEmail) == true) {
+ i.setemail(curEmail)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@ReEmailActivity,
+ "邮箱修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+ }
+ else{
+ Toast.makeText(this@ReEmailActivity,"邮箱输入不合法!"
+ ,Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ if (flag != true)
+ Toast.makeText(
+ this@ReEmailActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReMyinfoActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReMyinfoActivity.kt
new file mode 100644
index 0000000..f96628e
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReMyinfoActivity.kt
@@ -0,0 +1,121 @@
+package com.zjgsu.jianshu
+
+import android.R.attr
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import androidx.appcompat.view.menu.MenuAdapter
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import kotlinx.android.synthetic.main.activity_my.*
+import kotlinx.android.synthetic.main.activity_re_myinfo.*
+import android.R.attr.data
+import com.zjgsu.jianshu.Bmob.User_bmob
+
+
+class ReMyinfoActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_myinfo)
+ //返回个人信息
+ back.setOnClickListener(){
+ val intent=Intent(this,MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+
+
+ val extra_account=intent.getStringExtra("extra_account")
+// Log.d("helloReceive","$extraUserData")
+ Log.d("myLog",extra_account.toString())
+
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754") //连接bmob
+ val query = BmobQuery()
+// query.addWhereEqualTo("account",extra_account)
+ query.findObjects(object : FindListener() {
+ var flag:Boolean=false
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (extra_account.equals(i.account)) {
+ flag = true
+ tCurrentName.setText(i.nickName)
+ tCurrentSignature.setText(i.signature)
+ tCurrentAddress.setText((i.address))
+ tCurrentEmail.setText(i.email)
+ tCurrentTel.setText(i.phone)
+ tCurrentSex.setText(i.sex)
+ }
+ }
+ if(flag==false){
+ Log.d("myLog","can't find account")
+ }
+ }
+ }
+
+
+ })
+
+ //跳转修改昵称
+ re_name.setOnClickListener(){
+ val extra_user_data=tCurrentName.text
+ val intent=Intent(this,ReNameActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_user_data",extra_user_data)
+// startActivity(intent
+ startActivityForResult(intent,1)
+ finish()
+ }
+ //跳转修改个性签名
+ re_signature.setOnClickListener(){
+ val extra_signature=tCurrentSignature.text
+ val intent=Intent(this,ReSignatureActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_signature",extra_signature)
+ startActivityForResult(intent,1)
+ finish()
+ }
+ //跳转修改性别
+ re_sex.setOnClickListener(){
+ val extra_sex=tCurrentSex.text
+ val intent=Intent(this,ReSexActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_sex",extra_sex)
+ startActivityForResult(intent,1)
+ finish()
+ }
+ //跳转修改邮箱
+ re_email.setOnClickListener(){
+ val extra_email=tCurrentEmail.text
+ val intent=Intent(this,ReEmailActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_email",extra_email)
+ startActivityForResult(intent,1)
+ finish()
+ }
+ //跳转修改手机号
+ re_telephone.setOnClickListener(){
+ val extra_tel=tCurrentTel.text
+ val intent=Intent(this,RePhoneActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_tel",extra_tel)
+ startActivity(intent)
+ finish()
+ }
+ //跳转修改地址
+ re_address.setOnClickListener(){
+ val extra_address=tCurrentAddress.text
+ val intent=Intent(this,ReAddressActivity::class.java)
+ intent.putExtra("extra_account",extra_account)
+ intent.putExtra("extra_address",extra_address)
+ startActivity(intent)
+ finish()
+ }
+ }
+
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReNameActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReNameActivity.kt
new file mode 100644
index 0000000..d0f479e
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReNameActivity.kt
@@ -0,0 +1,90 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_findpwd.*
+import kotlinx.android.synthetic.main.activity_re_myinfo.*
+import kotlinx.android.synthetic.main.activity_re_name.*
+import kotlinx.android.synthetic.main.activity_re_name.back2my
+import kotlinx.android.synthetic.main.activity_register.*
+
+class ReNameActivity : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_name)
+ back2my.setOnClickListener() {
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ val extra_account = intent.getStringExtra("extra_account")
+ val oldName = intent.getStringExtra("extra_user_data")
+ et_rename.setHint(oldName)
+ //读取输入
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curName: String = et_rename.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent=Intent(this,MyActivity::class.java)
+ if (user_account.isEmpty() || curName.isEmpty()) {
+ Toast.makeText(this, "账号或昵称不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的nickName
+ i.setnickName(curName)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@ReNameActivity,
+ "昵称修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+
+ }
+ }
+ }
+ else {
+ Log.d("myLog","error")
+ }
+ if (flag != true)
+ Toast.makeText(
+ this@ReNameActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ })
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/RePhoneActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/RePhoneActivity.kt
new file mode 100644
index 0000000..70fc4b6
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/RePhoneActivity.kt
@@ -0,0 +1,97 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+
+import kotlinx.android.synthetic.main.activity_re_phone.*
+
+class RePhoneActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_phone)
+
+ back2my.setOnClickListener() {
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ val telPatten="^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}\$".toRegex()
+// Log.d("myLog",telPatten.matches(input = "19883120190").toString())
+
+ val extra_account = intent.getStringExtra("extra_account")
+ val extra_tel = intent.getStringExtra("extra_tel")
+ Log.d("myLog",extra_tel.toString())
+ cur_tel.setHint(extra_tel.toString())
+
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curTel = cur_tel.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ if (user_account.isEmpty()) {
+ Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的sex
+ if (telPatten.matches(input = curTel) == true) {
+ i.setphone(curTel)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@RePhoneActivity,
+ "电话号码修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+ }
+ else{
+ Toast.makeText(this@RePhoneActivity,"手机号输入不合法!"
+ , Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ if (flag != true)
+ Toast.makeText(
+ this@RePhoneActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReSexActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReSexActivity.kt
new file mode 100644
index 0000000..4faa620
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReSexActivity.kt
@@ -0,0 +1,108 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.ArrayAdapter
+import android.widget.Toast
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_re_name.*
+import kotlinx.android.synthetic.main.activity_re_sex.*
+import kotlinx.android.synthetic.main.activity_re_sex.back2my
+import kotlinx.android.synthetic.main.activity_re_sex.btnOk
+import kotlinx.android.synthetic.main.activity_re_sex.et_account
+import kotlinx.android.synthetic.main.activity_re_sex.et_resex
+
+class ReSexActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_re_sex)
+
+ val extra_account = intent.getStringExtra("extra_account")
+ val extra_sex = intent.getStringExtra("extra_sex")
+ val hint_text=extra_sex+' '+ et_resex.hint
+ Log.d("myLog",hint_text)
+
+ et_resex.setHint(hint_text)
+
+ back2my.setOnClickListener() {
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+
+ val sexChoice = arrayOf("男", "女", "未知")
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curSex = et_resex.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ if (user_account.isEmpty()) {
+ Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的sex
+ if (curSex.toInt() in sexChoice.indices) {
+ if(curSex.toInt()==0)
+ i.setsex("男")
+ if(curSex.toInt()==1)
+ i.setsex("女")
+ if(curSex.toInt()==2)
+ i.setsex("未知")
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@ReSexActivity,
+ "性别修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+ } else {
+ Toast.makeText(
+ this@ReSexActivity,
+ "请输入‘男’、‘女、’未知‘",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ }
+ if (flag != true)
+ Toast.makeText(
+ this@ReSexActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/ReSignatureActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/ReSignatureActivity.kt
new file mode 100644
index 0000000..075260d
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/ReSignatureActivity.kt
@@ -0,0 +1,93 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_re_myinfo.*
+import kotlinx.android.synthetic.main.activity_re_name.*
+
+class ReSignatureActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754") //连接bmob
+
+ setContentView(R.layout.activity_re_name)
+ t_title.setText("修改个性签名")
+
+ val extra_account = intent.getStringExtra("extra_account")
+ val extra_signature=intent.getStringExtra("extra_signature")
+ et_rename.setHint(extra_signature)
+
+ back2my.setOnClickListener(){
+ val intent = Intent(this, ReMyinfoActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ btnOk.setOnClickListener {
+ var flag: Boolean = false
+ val user_account: String = et_account.text.toString()
+ var curSignature=et_rename.text.toString()
+ //
+// val intent=Intent(this,ReMyinfoActivity::class.java)
+ val intent= Intent(this,ReMyinfoActivity::class.java)
+ if (user_account.isEmpty() ) {
+ Toast.makeText(this, "账号不能为空!", Toast.LENGTH_SHORT).show()
+ Log.d("zy", user_account)
+ } else {
+ val bmobQuery = BmobQuery()
+ var tempPwd: String = ""
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (user_account.equals(i.account)) {
+ flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //-------更新数据库中的nickName
+ i.setsignature(curSignature)
+ i.update(i.objectId, object : UpdateListener() {
+ override fun done(p0: BmobException?) {
+ if (p0 == null) {
+ Toast.makeText(
+ this@ReSignatureActivity,
+ "个性签名修改成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ //跳转个人信息页面,但是跳转之后原来的信息消失,需要重新进才能刷新
+ startActivity(intent)
+// startActivityForResult(intent,1)
+ finish()
+ } else {
+ Log.d("myLog", "can't modify name")
+ }
+ }
+ })
+
+ }
+ }
+ }
+ else {
+ Log.d("myLog","error")
+ }
+ if (flag != true)
+ Toast.makeText(
+ this@ReSignatureActivity,
+ "账号不存在,请重新输入!",
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ })
+ }
+ }
+
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/RegisterActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/RegisterActivity.kt
new file mode 100644
index 0000000..2bb1721
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/RegisterActivity.kt
@@ -0,0 +1,120 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.QueryListListener
+import cn.bmob.v3.listener.SaveListener
+import cn.bmob.v3.listener.UpdateListener
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_register.*
+
+class RegisterActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_register)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ }
+
+ private fun inits() {
+ image_backtoLogin.setOnClickListener{
+ val intent=Intent(this,LoginActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ button_check.setOnClickListener {
+ var flag: Boolean = false
+ val use_account: String = et_reg_account.text.toString()
+ Log.d("zhangyu", use_account)
+ val bmobQuery = BmobQuery()
+// bmobQuery.addWhereEqualTo("account", use_account)
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (use_account.equals(i.account)) {
+ Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT)
+ .show()
+ flag=true
+ }
+ }
+ if(flag!=true)
+ Toast.makeText(this@RegisterActivity,"可以注册",Toast.LENGTH_SHORT).show()
+ }
+ }
+ })
+ }
+ bt_reg_register.setOnClickListener {
+ var sex: String = ""
+ if (rg_reg_man.isChecked)
+ sex = "男"
+ else if (rg_reg_woman.isChecked)
+ sex = "女"
+ else
+ sex = "未知"
+ val user = User_bmob()
+ val use_account: String = et_reg_account.text.toString()
+ val use_pwd: String = et_reg_pwd.text.toString()
+ val use_agapwd: String = et_reg_agapwd.text.toString()
+ val use_name: String = et_reg_name.text.toString()
+ val use_mail: String = et_reg_email.text.toString()
+ val use_phone: String = et_reg_phone.text.toString()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (use_account.equals(i.account)) {
+ Toast.makeText(this@RegisterActivity, "账号已注册!", Toast.LENGTH_SHORT)
+ .show()
+ }
+ }
+ }
+ }
+ })
+ if (use_account.isEmpty() || use_pwd.isEmpty() || use_agapwd.isEmpty())
+ Toast.makeText(this, "账号或密码不能为空白!", Toast.LENGTH_SHORT).show()
+ if (use_mail.isEmpty())
+ Toast.makeText(this, "邮箱不能为空白!", Toast.LENGTH_SHORT).show()
+ else if (use_agapwd != use_pwd) {
+ Toast.makeText(this, "两次密码输入不一致!", Toast.LENGTH_SHORT).show()
+ }
+ else {
+ user.setaccount(use_account)
+ user.setpassword(use_pwd)
+ user.setemail(use_mail)
+ user.setnickName(use_name)
+ user.setphone(use_phone)
+ user.setsex(sex)
+ user.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ Toast.makeText(
+ this@RegisterActivity,
+ objectId + "注册成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ } else {
+ Toast.makeText(
+ this@RegisterActivity,
+ "注册失败!" + e.message,
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ val intent = Intent(this, LoginActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/WenXueActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/WenXueActivity.kt
new file mode 100644
index 0000000..e9ab9ae
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/WenXueActivity.kt
@@ -0,0 +1,141 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.view.MenuItem
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Adapter.BookAdapter2
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_wenxue.*
+import kotlinx.android.synthetic.main.activity_xinli.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class WenXueActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_wenxue)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.menu)
+ }
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ wenxue_recyclerView.layoutManager = layoutManager
+ var adapter = BookAdapter2(bookList)
+ wenxue_recyclerView.adapter = adapter
+ wenxue_swipeRefresh.setOnRefreshListener {
+ refreshBooks(adapter)
+ }
+ wenxue_navView.setCheckedItem(R.id.wenxue)
+ wenxue_navView.setNavigationItemSelectedListener {
+ val intentwenxue = Intent(this, WenXueActivity::class.java)
+ val intentguanli = Intent(this, guanliActivity::class.java)
+ val intentxinli = Intent(this, xinliActivity::class.java)
+ val intentkexue=Intent(this,kexueActivity::class.java)
+ val intentzhexue=Intent(this,zhexueActivity::class.java)
+ val intentgood=Intent(this,MainActivity::class.java)
+ when (it.itemId) {
+ R.id.wenxue -> startActivity(intentwenxue)
+ R.id.guanli -> startActivity(intentguanli)
+ R.id.xinli -> startActivity(intentxinli)
+ R.id.kexue->startActivity(intentkexue)
+ R.id.zhexue->startActivity(intentzhexue)
+ R.id.goodbook->startActivity(intentgood)
+ }
+ wenxue_drawerLayout.closeDrawers()
+ true
+ }
+
+ wenxue_back.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookcity.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookshelf.setOnClickListener{
+ val intent = Intent(this, BookShelfActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ reading_comprehension.setOnClickListener {
+ val intent = Intent(this, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ homepage.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ android.R.id.home -> wenxue_drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==1){
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+// bookList2.add(Book(i.name, i.introduce))
+ val adapter = BookAdapter2(bookList)
+ wenxue_recyclerView.adapter = adapter
+ }
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun refreshBooks(adapter: BookAdapter2) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initBooks()
+ adapter.notifyDataSetChanged()
+ wenxue_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initBooks() {
+ bookList.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==1)
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/author_introductionActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/author_introductionActivity.kt
new file mode 100644
index 0000000..e95c6fa
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/author_introductionActivity.kt
@@ -0,0 +1,103 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import kotlinx.android.synthetic.main.activity_anthor_introduction.*
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.book_author_item.*
+import kotlinx.android.synthetic.main.expandable.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class author_introductionActivity : AppCompatActivity() {
+ private var bookList = ArrayList()
+ private var author_selfintro:String=""
+ private val url_list = mutableListOf()
+ private var flag: Int =0
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_anthor_introduction)
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ book_authorname1.text = intent.getStringExtra("author_name")
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数
+ recyclerView1.layoutManager = layoutManager
+ var adapter = Book_authorAdapter(bookList)
+ recyclerView1.adapter = adapter
+ expand_collapse.setOnClickListener{
+ val myDialog:MyDialog= MyDialog(this)
+ myDialog.setTitle("作者介绍")
+ myDialog.setMessage(author_selfintro)
+ myDialog.setCancel("cancel",MyDialog.IOnCancelListener {
+ fun onCancel(dialog:MyDialog) {
+ Toast.makeText(this,"取消",Toast.LENGTH_SHORT).show()
+ }
+ })
+ myDialog.setConfirm("confirm",MyDialog.IOnConfirmListener {
+ fun OnConfirm(dialog:MyDialog){
+ Toast.makeText(this,"确认",Toast.LENGTH_SHORT).show()
+ }
+ })
+ myDialog.show()
+ }
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.addWhereEqualTo("author_name",book_authorname1.text.toString())
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(flag==0){
+ author_selfintro=i.author_introduce
+ flag=1
+ url_list.add(i!!.picture.url)
+ //加载authorPic
+ object : Thread() {
+ override fun run() {
+ try {
+ //作者
+ val url = URL(i!!.authorpic.url)
+ Log.d("myLog", url.toString())
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+// Log.d("myLog","fine")
+ //yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
+ author_img.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ bookList.add(BookAuthor(i.name, i.author_name))
+ val adapter = Book_authorAdapter(bookList)
+ recyclerView1.adapter = adapter
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ expand_text_view.text=author_selfintro
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/guanliActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/guanliActivity.kt
new file mode 100644
index 0000000..5285b5b
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/guanliActivity.kt
@@ -0,0 +1,139 @@
+package com.zjgsu.jianshu
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.view.MenuItem
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Adapter.BookAdapter2
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_guanli.*
+import kotlinx.android.synthetic.main.activity_xinli.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class guanliActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_guanli)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.menu)
+ }
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ guanli_recyclerView.layoutManager = layoutManager
+ var adapter = BookAdapter2(bookList)
+ guanli_recyclerView.adapter = adapter
+ guanli_swipeRefresh.setOnRefreshListener {
+ refreshBooks(adapter)
+ }
+ guanli_navView.setCheckedItem(R.id.guanli)
+ guanli_navView.setNavigationItemSelectedListener {
+ val intentwenxue = Intent(this, WenXueActivity::class.java)
+ val intentguanli = Intent(this, guanliActivity::class.java)
+ val intentxinli = Intent(this, xinliActivity::class.java)
+ val intentkexue=Intent(this,kexueActivity::class.java)
+ val intentzhexue=Intent(this,zhexueActivity::class.java)
+ val intentgood=Intent(this,MainActivity::class.java)
+ when (it.itemId) {
+ R.id.wenxue -> startActivity(intentwenxue)
+ R.id.guanli -> startActivity(intentguanli)
+ R.id.kexue->startActivity(intentkexue)
+ R.id.zhexue->startActivity(intentzhexue)
+ R.id.xinli->startActivity(intentxinli)
+ R.id.goodbook->startActivity(intentgood)
+ }
+ guanli_drawerLayout.closeDrawers()
+ true
+ }
+ guanli_back.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookshelf.setOnClickListener{
+ val intent = Intent(this, BookShelfActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookcity.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ reading_comprehension.setOnClickListener {
+ val intent = Intent(this, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ homepage.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ android.R.id.home -> guanli_drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==2){
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+// bookList2.add(Book(i.name, i.introduce))
+ val adapter = BookAdapter2(bookList)
+ guanli_recyclerView.adapter = adapter
+ }
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun refreshBooks(adapter: BookAdapter2) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initBooks()
+ adapter.notifyDataSetChanged()
+ guanli_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initBooks() {
+ bookList.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==2)
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/kexueActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/kexueActivity.kt
new file mode 100644
index 0000000..7e56d57
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/kexueActivity.kt
@@ -0,0 +1,141 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.view.MenuItem
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Adapter.BookAdapter2
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_kexue.*
+import kotlinx.android.synthetic.main.activity_xinli.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class kexueActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_kexue)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.menu)
+ }
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ kexue_recyclerView.layoutManager = layoutManager
+ var adapter = BookAdapter2(bookList)
+ kexue_recyclerView.adapter = adapter
+ kexue_swipeRefresh.setOnRefreshListener {
+ refreshBooks(adapter)
+ }
+ kexue_navView.setCheckedItem(R.id.kexue)
+ kexue_navView.setNavigationItemSelectedListener {
+ val intentwenxue = Intent(this, WenXueActivity::class.java)
+ val intentguanli = Intent(this, guanliActivity::class.java)
+ val intentxinli = Intent(this, xinliActivity::class.java)
+ val intentkexue=Intent(this,kexueActivity::class.java)
+ val intentzhexue=Intent(this,zhexueActivity::class.java)
+ val intentgood=Intent(this,MainActivity::class.java)
+ when (it.itemId) {
+ R.id.wenxue -> startActivity(intentwenxue)
+ R.id.guanli -> startActivity(intentguanli)
+ R.id.xinli -> startActivity(intentxinli)
+ R.id.kexue->startActivity(intentkexue)
+ R.id.zhexue->startActivity(intentzhexue)
+ R.id.goodbook->startActivity(intentgood)
+ }
+ kexue_drawerLayout.closeDrawers()
+ true
+ }
+
+ kexue_back.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookcity.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookshelf.setOnClickListener{
+ val intent = Intent(this, BookShelfActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ reading_comprehension.setOnClickListener {
+ val intent = Intent(this, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ homepage.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ android.R.id.home -> kexue_drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==4){
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+// bookList2.add(Book(i.name, i.introduce))
+ val adapter = BookAdapter2(bookList)
+ kexue_recyclerView.adapter = adapter
+ }
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun refreshBooks(adapter: BookAdapter2) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initBooks()
+ adapter.notifyDataSetChanged()
+ kexue_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initBooks() {
+ bookList.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==4)
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/sendPerceptionActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/sendPerceptionActivity.kt
new file mode 100644
index 0000000..2482fc3
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/sendPerceptionActivity.kt
@@ -0,0 +1,121 @@
+package com.zjgsu.jianshu.Activity
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.os.Bundle
+import android.util.Log
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.SaveListener
+import com.zjgsu.jianshu.*
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import kotlinx.android.synthetic.main.activity_sendperception.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class sendPerceptionActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ lateinit var myuserid:String
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_sendperception)
+ supportActionBar?.hide()
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ myuserid=intent.getStringExtra("userid").toString()
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.HORIZONTAL)//第一个参数是列数
+ send_recyclerview.layoutManager = layoutManager
+ var adapter = send_perceptionAdapter(bookList)
+ send_recyclerview.adapter = adapter
+ delete.setOnClickListener {
+ val intent= Intent(this,PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ submit.setOnClickListener {
+ if(selectedBook.equals("")){
+ Toast.makeText(this,"请选择一本书!",Toast.LENGTH_SHORT).show()
+ }
+ else {
+ val perception = Perception_bmob()
+ perception.perception = mycontent.text.toString()
+ perception.userid = myuserid
+ perception.b_name = selectedBook
+ perception.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ Toast.makeText(
+ this@sendPerceptionActivity, "发布成功!",
+ Toast.LENGTH_SHORT
+ ).show()
+ val intent =
+ Intent(this@sendPerceptionActivity, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ } else {
+ Toast.makeText(
+ this@sendPerceptionActivity,
+ "发布失败" + e.message,
+ Toast.LENGTH_SHORT
+ ).show()
+ }
+ }
+ })
+ }
+ }
+ }
+ private fun inits(){
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ bookList.add(BookAuthor(i.name, i.author_name))
+ val adapter = send_perceptionAdapter(bookList)
+ send_recyclerview.adapter = adapter
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ val query=BmobQuery()
+ query.findObjects(object:FindListener(){
+ override fun done(list:List,e:BmobException?){
+ if(e==null){
+ for(i in list){
+ if(i.objectId.equals(UserId)) {
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.face.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ touxiang.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/testgood.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/testgood.kt
new file mode 100644
index 0000000..e907409
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/testgood.kt
@@ -0,0 +1,54 @@
+//package com.zjgsu.jianshu
+//
+//import android.content.Intent
+//import android.graphics.Bitmap
+//import android.graphics.BitmapFactory
+//import androidx.appcompat.app.AppCompatActivity
+//import android.os.Bundle
+//import android.util.Log
+//import androidx.recyclerview.widget.StaggeredGridLayoutManager
+//import cn.bmob.v3.Bmob
+//import cn.bmob.v3.BmobQuery
+//import cn.bmob.v3.exception.BmobException
+//import cn.bmob.v3.listener.FindListener
+//import com.zjgsu.jianshu.Activity.AccountManagerActivity
+//import com.zjgsu.jianshu.Activity.MyPostActivity
+//import com.zjgsu.jianshu.Adapter.CommentAdapter
+//import com.zjgsu.jianshu.Bmob.Comment_bmob
+//import kotlinx.android.synthetic.main.activity_main.*
+//import kotlinx.android.synthetic.main.activity_my.*
+//import kotlinx.android.synthetic.main.activity_perception_infomation.*
+//import kotlinx.android.synthetic.main.test11.*
+//import java.io.InputStream
+//import java.net.HttpURLConnection
+//import java.net.URL
+//
+//class testgood : AppCompatActivity() {
+// private val commentlist=ArrayList()
+// override fun onCreate(savedInstanceState: Bundle?) {
+// super.onCreate(savedInstanceState)
+// setContentView(R.layout.test11)
+// Bmob.initialize(this, "3ef45cbaebfff5cc05e559f8206b523f") //连接bmob
+// val bmobquery=BmobQuery()
+// bmobquery.addWhereEqualTo("perceptionid","e0cd40a953")
+// bmobquery.findObjects(object:FindListener(){
+// override fun done(list:List, e:BmobException?){
+// if(e==null){
+// var cnt=0
+// for(i in list){
+// cnt++
+// commentlist.add(Comment(i.objectId))
+// val adapter = CommentAdapter(commentlist)
+// recyclerView100.adapter = adapter
+// }
+// comment_cnt.text="评论 "+cnt.toString()
+// }
+// }
+// })
+// val layoutManager =
+// StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+// recyclerView100.layoutManager = layoutManager
+// var adapter = CommentAdapter(commentlist)
+// }
+//}
+//
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/xinliActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/xinliActivity.kt
new file mode 100644
index 0000000..829a625
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/xinliActivity.kt
@@ -0,0 +1,138 @@
+package com.zjgsu.jianshu
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.view.MenuItem
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Adapter.BookAdapter2
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_xinli.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class xinliActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_xinli)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.menu)
+ }
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ xinli_recyclerView.layoutManager = layoutManager
+ var adapter = BookAdapter2(bookList)
+ xinli_recyclerView.adapter = adapter
+ xinli_swipeRefresh.setOnRefreshListener {
+ refreshBooks(adapter)
+ }
+ xinli_navView.setCheckedItem(R.id.xinli)
+ xinli_navView.setNavigationItemSelectedListener {
+ val intentwenxue = Intent(this, WenXueActivity::class.java)
+ val intentguanli = Intent(this, guanliActivity::class.java)
+ val intentxinli = Intent(this, xinliActivity::class.java)
+ val intentkexue=Intent(this,kexueActivity::class.java)
+ val intentzhexue=Intent(this,zhexueActivity::class.java)
+ val intentgood=Intent(this,MainActivity::class.java)
+ when (it.itemId) {
+ R.id.wenxue -> startActivity(intentwenxue)
+ R.id.guanli -> startActivity(intentguanli)
+ R.id.kexue->startActivity(intentkexue)
+ R.id.zhexue->startActivity(intentzhexue)
+ R.id.xinli->startActivity(intentxinli)
+ R.id.goodbook->startActivity(intentgood)
+ }
+ xinli_drawerLayout.closeDrawers()
+ true
+ }
+ xinli_back.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookshelf.setOnClickListener{
+ val intent = Intent(this, BookShelfActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookcity.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ reading_comprehension.setOnClickListener {
+ val intent = Intent(this, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ homepage.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ android.R.id.home -> xinli_drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==3){
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+// bookList2.add(Book(i.name, i.introduce))
+ val adapter = BookAdapter2(bookList)
+ xinli_recyclerView.adapter = adapter
+ }
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun refreshBooks(adapter: BookAdapter2) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initBooks()
+ adapter.notifyDataSetChanged()
+ xinli_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initBooks() {
+ bookList.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==3)
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Activity/zhexueActivity.kt b/app/src/main/java/com/zjgsu/jianshu/Activity/zhexueActivity.kt
new file mode 100644
index 0000000..243156c
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Activity/zhexueActivity.kt
@@ -0,0 +1,141 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.PersistableBundle
+import android.util.Log
+import android.view.MenuItem
+import android.widget.Toast
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.GravityCompat
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import cn.bmob.v3.Bmob
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Adapter.BookAdapter2
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.*
+import kotlinx.android.synthetic.main.activity_zhexue.*
+import kotlinx.android.synthetic.main.activity_xinli.*
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+import kotlin.concurrent.thread
+
+class zhexueActivity:AppCompatActivity() {
+ private var bookList = ArrayList()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_zhexue)
+ supportActionBar?.let {
+ it.setDisplayHomeAsUpEnabled(true)
+ it.setHomeAsUpIndicator(R.drawable.menu)
+ }
+ Bmob.initialize(this, "8f9f1d1ea520b0ce4f84a6fa83a5f754")//连接bmob
+ inits()
+ val layoutManager =
+ StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL)//第一个参数是列数
+ zhexue_recyclerView.layoutManager = layoutManager
+ var adapter = BookAdapter2(bookList)
+ zhexue_recyclerView.adapter = adapter
+ zhexue_swipeRefresh.setOnRefreshListener {
+ refreshBooks(adapter)
+ }
+ zhexue_navView.setCheckedItem(R.id.zhexue)
+ zhexue_navView.setNavigationItemSelectedListener {
+ val intentwenxue = Intent(this, WenXueActivity::class.java)
+ val intentguanli = Intent(this, guanliActivity::class.java)
+ val intentxinli = Intent(this, xinliActivity::class.java)
+ val intentzhexue=Intent(this,zhexueActivity::class.java)
+ val intentkexue=Intent(this,kexueActivity::class.java)
+ val intentgood=Intent(this,MainActivity::class.java)
+ when (it.itemId) {
+ R.id.wenxue -> startActivity(intentwenxue)
+ R.id.guanli -> startActivity(intentguanli)
+ R.id.xinli -> startActivity(intentxinli)
+ R.id.zhexue->startActivity(intentzhexue)
+ R.id.kexue->startActivity(intentkexue)
+ R.id.goodbook->startActivity(intentgood)
+ }
+ zhexue_drawerLayout.closeDrawers()
+ true
+ }
+
+ zhexue_back.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookcity.setOnClickListener{
+ val intent = Intent(this, MainActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ bookshelf.setOnClickListener{
+ val intent = Intent(this, BookShelfActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ reading_comprehension.setOnClickListener {
+ val intent = Intent(this, PerceptionActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ homepage.setOnClickListener {
+ val intent = Intent(this, MyActivity::class.java)
+ startActivity(intent)
+ finish()
+ }
+ }
+ override fun onOptionsItemSelected(item: MenuItem): Boolean {
+ when (item.itemId) {
+ android.R.id.home -> zhexue_drawerLayout.openDrawer(GravityCompat.START)
+ }
+ return true
+ }
+ private fun inits() {
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==5){
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+// bookList2.add(Book(i.name, i.introduce))
+ val adapter = BookAdapter2(bookList)
+ zhexue_recyclerView.adapter = adapter
+ }
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+ private fun refreshBooks(adapter: BookAdapter2) {
+ thread {
+ Thread.sleep(2000)
+ runOnUiThread {
+ initBooks()
+ adapter.notifyDataSetChanged()
+ zhexue_swipeRefresh.isRefreshing = false
+ Toast.makeText(this, "刷新成功!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ private fun initBooks() {
+ bookList.clear()
+ val bmobQuery = BmobQuery()
+ bmobQuery.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if(i.category_id==5)
+ bookList.add(Book(i.name, i.introduce,i.picture.url))
+ }
+ } else {
+ Log.d("error", "error")
+ }
+ }
+ })
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter.kt
new file mode 100644
index 0000000..68f0932
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter.kt
@@ -0,0 +1,93 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+
+class BookAdapter(var bookList: List) : RecyclerView.Adapter() {
+inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val bookList_Image: ImageView = view.findViewById(R.id.book_Image)
+ val bookList_Name: TextView = view.findViewById(R.id.book_Name)
+ val bookList_Introduce: TextView = view.findViewById(R.id.book_Introduce)
+ val innerLinearLayout: LinearLayout = view.findViewById(R.id.bookItem_innerLinearLayout)
+ val outerLinearLayout:LinearLayout=view.findViewById(R.id.bookItem_outerLinearLayout)
+ val rankimg:ImageView=view.findViewById(R.id.bookItem_rankimg)
+}
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.book_item, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val book = bookList[position]
+ holder.bookList_Name.text = book.name
+ holder.bookList_Introduce.text = book.introduce
+ val backgrounds = arrayOf(R.drawable.color_lightpurple, R.drawable.color_lightblue,R.drawable.color_lightgreen, R.drawable.color_flesh)
+ holder.innerLinearLayout.setBackgroundResource(backgrounds[position % backgrounds.size])
+ if (position == 0) { // 假设第一名使用金牌图片
+ holder.rankimg.setImageResource(R.drawable.gold)
+ } else if (position == 1) { // 第二名使用其他图片,以此类推
+ holder.rankimg.setImageResource(R.drawable.silver)
+ }
+ else if(position==2){
+ holder.rankimg.setImageResource(R.drawable.copper)
+ }
+ val query = BmobQuery()
+ query.addWhereEqualTo("name", book.name)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.bookList_Image.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+// Glide.with(context).load(book.imageId).into(holder.bookList_Image)
+ holder.outerLinearLayout.setOnClickListener{
+ val intent = Intent(holder.itemView.context, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", book.name)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ }
+ override fun getItemCount() = bookList.size
+ fun updateBooks(newBooks: List) {
+ bookList = newBooks
+ notifyDataSetChanged()
+ }
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter2.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter2.kt
new file mode 100644
index 0000000..de01b7c
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookAdapter2.kt
@@ -0,0 +1,94 @@
+package com.zjgsu.jianshu.Adapter
+
+import com.zjgsu.jianshu.Book
+import com.zjgsu.jianshu.Book_informationActivity
+import com.zjgsu.jianshu.R
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.appcompat.widget.ActivityChooserView
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.datatype.BmobFile
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.bumptech.glide.Glide
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class BookAdapter2(val bookList: List) : RecyclerView.Adapter() {
+
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val bookList_Image: ImageView = view.findViewById(R.id.book_Image)
+ val bookList_Name: TextView = view.findViewById(R.id.book_Name)
+ val bookList_Introduce: TextView = view.findViewById(R.id.book_Introduce)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = View.inflate(parent.context, R.layout.book_item, null)
+ return ViewHolder(view)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val book = bookList[position]
+ holder.bookList_Name.text = book.name
+ holder.bookList_Introduce.text = book.introduce
+ val query = BmobQuery()
+ query.addWhereEqualTo("name", book.name)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.bookList_Image.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+// Glide.with(context).load(book.imageId).into(holder.bookList_Image)
+
+ holder.bookList_Image.setOnClickListener {
+ val intent = Intent(holder.itemView.context, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", book.name)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ holder.bookList_Introduce.setOnClickListener {
+ val intent = Intent(holder.itemView.context, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", book.name)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ holder.bookList_Name.setOnClickListener {
+ val intent = Intent(holder.itemView.context, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", book.name)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ }
+
+ override fun getItemCount() = bookList.size
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/Book_authorAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/Book_authorAdapter.kt
new file mode 100644
index 0000000..78f2813
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/Book_authorAdapter.kt
@@ -0,0 +1,116 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.*
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.SaveListener
+import com.zjgsu.jianshu.Bmob.BookShelf
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.view.*
+import kotlinx.android.synthetic.main.book_author_item.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class Book_authorAdapter(val bookList:List):RecyclerView.Adapter() {
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val bookList_Image: ImageView = view.findViewById(R.id.book_Image1)
+ val addButton:Button=view.findViewById(R.id.addButton)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.book_author_item, parent, false)
+ return ViewHolder(view)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val book = bookList[position]
+ val query = BmobQuery()
+ query.addWhereEqualTo("name",book.name)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.bookList_Image.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ val query1=BmobQuery()
+ query1.addWhereEqualTo("userid", UserId)
+ query1.addWhereEqualTo("b_name",book.name)
+ query1.findObjects(object :FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ holder.addButton.setText("已添加")
+ }
+ }
+ }
+ })
+ holder.bookList_Image.setOnClickListener {
+ val intent= Intent(holder.itemView.context,Book_informationActivity::class.java)
+ intent.putExtra("Book_name",book.name)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ holder.addButton.setOnClickListener{
+// val intent = Intent(holder.itemView.context,BookShelfActivity::class.java)
+// intent.putExtra("Book_name",book.name)
+// ContextCompat.startActivity(holder.itemView.context,intent,null)
+ val query= BmobQuery()
+ query.addWhereEqualTo("userid", UserId)
+ query.addWhereEqualTo("b_name",book.name)
+ query.findObjects(object :FindListener(){
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if(p1==null){
+ if(p0!=null&&p0.size>0){
+// Toast.makeText(author_introductionActivity, "11", Toast.LENGTH_SHORT)
+ }
+ else{
+ val bookshelf_record=BookShelf()
+ bookshelf_record.settb_name(book.name)
+ bookshelf_record.setuserid(UserId)
+ bookshelf_record.save(object : SaveListener() {
+ override fun done(objectId: String?, e: BmobException?) {
+ if (e == null) {
+ holder.addButton.text="已添加"
+ } else {
+ }
+ }
+ })
+ }
+ }
+ }
+ })
+ }
+ }
+ override fun getItemCount() =bookList.size
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/BookshelfAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookshelfAdapter.kt
new file mode 100644
index 0000000..466473f
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/BookshelfAdapter.kt
@@ -0,0 +1,214 @@
+package com.zjgsu.jianshu
+
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.opengl.Visibility
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.CheckBox
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+import android.widget.AdapterView.OnItemLongClickListener
+import android.widget.AdapterView.VISIBLE
+import android.widget.Toast
+import android.view.View.OnLongClickListener
+
+import android.widget.CompoundButton
+
+import android.view.animation.Animation
+import com.zjgsu.jianshu.Bmob.Book_bmob
+
+
+class BookshelfAdapter(val context: Context, val bookshelf: ArrayList) : RecyclerView.Adapter(),
+ View.OnLongClickListener, View.OnClickListener {
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val book_img: ImageView = view.findViewById(R.id.bookshelf_bkimg)
+ val book_name: TextView = view.findViewById(R.id.bookshelf_bkname)
+// val mCheckBox: CheckBox = view.findViewById(R.id.bookshelf_checkBox)
+ }
+ private var onItemClickListener: RecyclerViewOnItemClickListener? = null
+ private var isshowBox: Boolean = false
+ private val map: MutableMap = HashMap()
+ private var flag: Boolean = false
+ fun initMap() {
+ for (i in bookshelf.indices) {
+ map[i] = false
+ }
+ Log.d("initmap", "no")
+ }
+
+ fun setSelectItem(position: Int) {
+ //对当前状态取反
+ if (map[position]!!) {
+ map[position] = false
+ } else {
+ map[position] = true
+ }
+ notifyItemChanged(position)
+ }
+
+ fun setShowBox() {
+ //取反
+ isshowBox = !isshowBox
+ }
+
+ fun getMap(): Map {
+ return map
+ }
+
+ // fun setOnItemLongClickListener(onItemLongClickListener: RecyclerViewOnItemLongClickListener) {
+// this.onItemLongClickListener = onItemLongClickListener;
+// }
+// interface RecyclerViewOnItemClickListener {
+// fun onItemClickListener(view: View?, position: Int)
+// }
+// interface RecyclerViewOnItemLongClickListener {
+// fun onItemLongClickListener(view: View, position: Int): Boolean;
+// }
+ interface RecyclerViewOnItemClickListener {
+ //点击事件
+ fun onItemClickListener(view: View?, position: Int)
+
+ //长按事件
+ fun onItemLongClickListener(view: View?, position: Int): Boolean
+ }
+
+ fun setRecyclerViewOnItemClickListener(onItemClickListener: RecyclerViewOnItemClickListener?) {
+ this.onItemClickListener = onItemClickListener
+ }
+
+ override fun onClick(v: View) {
+ if (onItemClickListener != null) {
+ //注意这里使用getTag方法获取数据
+ onItemClickListener!!.onItemClickListener(v, v.tag as Int)
+ }
+ }
+
+ override fun onLongClick(v: View): Boolean {
+ initMap()
+ return onItemClickListener != null && onItemClickListener!!.onItemLongClickListener(
+ v,
+ (v.tag as Int)
+ )
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(context).inflate(R.layout.bookshelf_item, parent, false)
+ view.setOnLongClickListener(this)
+ view.setOnClickListener(this)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+// Log.d("check", isshowBox.toString())
+// if (isshowBox) {
+// holder.mCheckBox.visibility = VISIBLE
+// } else {
+// holder.mCheckBox.visibility = View.INVISIBLE
+// }
+// holder.mCheckBox.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked -> //用map集合保存
+// map[position] = isChecked
+// })
+ // 设置CheckBox的状态
+ if (map[position] == null) {
+ map[position] = false
+ }
+// holder.mCheckBox.isChecked = map[position]!!
+// holder.itemView.setOnClickListener{
+// if(!flag){
+// holder.mCheckBox.visibility=View.VISIBLE
+// flag=true
+// }
+// else{
+// holder.mCheckBox.visibility=View.INVISIBLE
+// flag=false
+// }
+// }
+ val book = bookshelf[position]
+// if (holder is ViewHolder) {
+// val viewHolder: ViewHolder = holder
+// if (selected == position) {
+// viewHolder.mCheckBox.setChecked(true)
+// viewHolder.itemView.setSelected(true)
+// } else {
+// viewHolder.mCheckBox.setChecked(false)
+// viewHolder.itemView.setSelected(false)
+// }
+// if (onItemClickListener != null) {
+// viewHolder.itemView.setOnClickListener(View.OnClickListener {
+// onItemClickListener!!.onItemClickListener(
+// viewHolder.itemView,
+// viewHolder.adapterPosition
+// )
+// })
+// }
+// }
+ var flag: Boolean = false
+ holder.book_img.setTag("1")
+ if (book.bkname.equals("添加")) {
+ holder.book_img.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ holder.book_img.setImageResource(R.drawable.add)
+ flag = true
+ }
+ holder.book_name.text = book.bkname
+ val query = BmobQuery()
+ query.addWhereEqualTo("name", book.bkname)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ object : Thread() {
+ override fun run() {
+ try {
+ if (flag) {
+
+ } else {
+ holder.book_img.setTag("0")
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap = BitmapFactory.decodeStream(`in`)
+ holder.book_img.setImageBitmap(bitmap)
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ holder.book_img.setOnClickListener {
+ val res = holder.book_img.getTag()
+ if (res == "0") {
+ val intent = Intent(holder.itemView.context, Book_informationActivity::class.java)
+ intent.putExtra("Book_name", book.bkname)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ } else {
+ val intent = Intent(context, MainActivity::class.java)
+ context.startActivity(intent)
+ }
+ }
+ }
+
+ override fun getItemCount() = bookshelf.size
+}
+
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/CommentAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/CommentAdapter.kt
new file mode 100644
index 0000000..2a78884
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/CommentAdapter.kt
@@ -0,0 +1,82 @@
+package com.zjgsu.jianshu.Adapter
+
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Comment_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import com.zjgsu.jianshu.Book_authorAdapter
+import com.zjgsu.jianshu.Comment
+import com.zjgsu.jianshu.R
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+class CommentAdapter(val commentlist: List) :
+ RecyclerView.Adapter() {
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val user_icon: ImageView = view.findViewById(R.id.inf_comment_user_icon)
+ val user_name: TextView = view.findViewById(R.id.inf_comment_postPersonName)
+ val content: TextView = view.findViewById(R.id.inf_comment_textView_perception)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.comment_item, parent, false)
+ return ViewHolder(view)
+ }
+
+ override fun onBindViewHolder(holder: CommentAdapter.ViewHolder, position: Int) {
+ val comment = commentlist[position]
+ val query = BmobQuery()
+ query.addWhereEqualTo("objectId", comment.commentid)
+ query.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ holder.content.text = i.text
+ Log.d("zytt",i.text)
+ val query2 = BmobQuery()
+ query2.addWhereEqualTo("objectId",i.comment_personid)
+ query2.findObjects(object:FindListener(){
+ override fun done(list:List,e:BmobException?){
+ if(e==null){
+ for(j in list){
+ holder.user_name.text=j.nickName
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(j!!.face.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.user_icon.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+ })
+ }
+ override fun getItemCount() = commentlist.size
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/GoodsuibiAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/GoodsuibiAdapter.kt
new file mode 100644
index 0000000..47816cd
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/GoodsuibiAdapter.kt
@@ -0,0 +1,84 @@
+package com.zjgsu.jianshu.Adapter
+
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import com.zjgsu.jianshu.Perception
+import com.zjgsu.jianshu.R
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+
+class GoodsuibiAdapter(val perceptionList: List) : RecyclerView.Adapter() {
+
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val user_Image: ImageView = view.findViewById(R.id.user_Image)
+ val user_name: TextView = view.findViewById(R.id.user_Name)
+ val perception: TextView = view.findViewById(R.id.goodContent)
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.goodsuibi_item, parent, false)
+ return ViewHolder(view)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val perception = perceptionList[position]
+ val query = BmobQuery()
+ query.addWhereEqualTo("objectId",perception.perceptionid)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ holder.perception.text = p.perception
+// holder.user_Image.setImageResource(R.drawable.touxiang)
+ val bmob=BmobQuery()
+ bmob.addWhereEqualTo("objectId",p.userid)
+ bmob.findObjects(object :FindListener(){
+ override fun done(p2: MutableList?, p3: BmobException?) {
+ if(p3==null){
+ if(p2!=null&&p2.size>0){
+ for(i in p2){
+ holder.user_name.text=i.nickName
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.face.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.user_Image.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ }
+ }
+ }
+ }
+ })
+ }
+ override fun getItemCount() =perceptionList.size
+
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/PerceptionAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/PerceptionAdapter.kt
new file mode 100644
index 0000000..4ae8b00
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/PerceptionAdapter.kt
@@ -0,0 +1,170 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import com.zjgsu.jianshu.Activity.Perception_informationActivity
+import com.zjgsu.jianshu.Bmob.Book_inf_bmob
+import com.zjgsu.jianshu.Bmob.Perception_bmob
+import com.zjgsu.jianshu.Bmob.User_bmob
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+
+
+class PerceptionAdapter(val perceptionList: List) : RecyclerView.Adapter() {
+
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val perceptionList_perception: TextView = view.findViewById(R.id.textView_perception)
+ //用户头像
+ val perceptionList_userIcon: ImageView = view.findViewById(R.id.user_icon)
+ val perceptionList_posetPerson: TextView = view.findViewById(R.id.postPersonName)
+ //书籍封面
+ val perceptionList_bookPic: ImageView = view.findViewById(R.id.book_pic)
+ val perceptionList_bookName: TextView = view.findViewById(R.id.bookName)
+ val perceptionList_bookAuthor: TextView = view.findViewById(R.id.bookAuthor)
+ val perceptionList_bookInf: View = view.findViewById(R.id.bookInf)
+ val comment:ImageView=view.findViewById(R.id.gotocomment)
+ lateinit var perceptionid:String
+
+
+ }
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.perception_item, parent, false)
+ return ViewHolder(view)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ var bookName:String=""
+ val perception = perceptionList[position]
+ //设置text
+ holder.perceptionid=perception.perceptionid
+ val query = BmobQuery()
+ query.addWhereEqualTo("objectId",perception.perceptionid)
+ //加载用户头像
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ Log.d("myLog123", p.post_person)
+ //找发布用户
+ holder.perceptionList_perception.text=p.perception
+ val queryUser = BmobQuery()
+ queryUser.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (p.userid.equals(i.objectId)) {
+ holder.perceptionList_posetPerson.setText(i.nickName)
+// flag = true //找到
+ Log.d("myLog", "find sucessflly")
+ //加载图片
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.face?.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(3000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.perceptionList_userIcon.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+
+
+ }
+ }
+ } else {
+ Log.d("myLog", "error")
+ }
+ }
+ })
+ }
+ }
+ }
+ }
+ })
+ //加载书籍封面
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ Log.d("myLog", p.b_name)
+ bookName=p.b_name
+ holder.perceptionList_bookName.text=bookName
+ val queryBook = BmobQuery()
+ queryBook.findObjects(object : FindListener() {
+ override fun done(list: List, e: BmobException?) {
+ if (e == null) {
+ for (i in list) {
+ if (p.b_name.equals(i.name)) {
+ holder.perceptionList_bookAuthor.text=i.author_name
+ //加载图片
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(i!!.picture?.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(3000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.perceptionList_bookPic.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+
+
+ }
+ }
+ } else {
+ Log.d("myLog", "error")
+ }
+ }
+ })
+ }
+ }
+ }
+ }
+ })
+
+ holder.perceptionList_bookInf.setOnClickListener(){
+ val intent= Intent(holder.itemView.context,Book_informationActivity::class.java)
+ intent.putExtra("Book_name",bookName)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ holder.perceptionList_perception.setOnClickListener {
+ val intent= Intent(holder.itemView.context,Perception_informationActivity::class.java)
+ intent.putExtra("PerceptionId",holder.perceptionid)
+ ContextCompat.startActivity(holder.itemView.context, intent, null)
+ }
+ //给评论图标设置点击事件
+ //给评论图标设置点击事件
+ holder.comment.setOnClickListener(View.OnClickListener { showPopupcomment() })
+ }
+
+ override fun getItemCount() =perceptionList.size
+
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Adapter/send_perceptionAdapter.kt b/app/src/main/java/com/zjgsu/jianshu/Adapter/send_perceptionAdapter.kt
new file mode 100644
index 0000000..18277ed
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Adapter/send_perceptionAdapter.kt
@@ -0,0 +1,121 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import android.graphics.Bitmap
+import android.graphics.BitmapFactory
+import android.graphics.Color
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.*
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.content.ContextCompat
+import androidx.recyclerview.widget.RecyclerView
+import cn.bmob.v3.BmobQuery
+import cn.bmob.v3.exception.BmobException
+import cn.bmob.v3.listener.FindListener
+import cn.bmob.v3.listener.SaveListener
+import com.zjgsu.jianshu.Activity.sendPerceptionActivity
+import com.zjgsu.jianshu.Bmob.BookShelf
+import com.zjgsu.jianshu.Bmob.Book_bmob
+import kotlinx.android.synthetic.main.activity_main.view.*
+import kotlinx.android.synthetic.main.book_author_item.*
+import java.io.InputStream
+import java.net.HttpURLConnection
+import java.net.URL
+lateinit var selectedBook:String
+class send_perceptionAdapter(val bookList:List):RecyclerView.Adapter() {
+ inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ val book_Image: ImageView = view.findViewById(R.id.book_Image2)
+ val book_Name: TextView = view.findViewById(R.id.book_name)
+ val background: LinearLayout = view.findViewById(R.id.bookpic_background)
+ }
+ private val map: MutableMap = HashMap()
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.bookpic_item, parent, false)
+// val viewHolder=ViewHolder(view)
+// viewHolder.book_Image.setOnClickListener {
+// val position=viewHolder.adapterPosition
+// val book=bookList[position]
+// var cnt=0
+// for (i in map){
+// if(i.value==true)
+// cnt++
+// }
+// if(cnt==0) {
+// if (map[position] == false) {
+// map[position] = true
+// viewHolder.background.setBackgroundColor(Color.CYAN)
+// selectedBook = book.name
+// } else {
+// map[position] = false
+// viewHolder.background.setBackgroundColor(Color.WHITE)
+// selectedBook = ""
+// }
+// }
+// else{
+// Toast.makeText(parent.context,"只能选择一本书!",Toast.LENGTH_SHORT).show()
+// }
+// }
+ return ViewHolder(view)
+ }
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val book = bookList[position]
+ val query = BmobQuery()
+ query.addWhereEqualTo("name",book.name)
+ query.findObjects(object : FindListener() {
+ override fun done(p0: MutableList?, p1: BmobException?) {
+ if (p1 == null) {
+ if (p0 != null && p0.size > 0) {
+ for (p in p0) {
+ holder.book_Name.text=p.name
+ object : Thread() {
+ override fun run() {
+ try {
+ val url = URL(p!!.picture.url)
+ val connection: HttpURLConnection =
+ url.openConnection() as HttpURLConnection
+ connection.setRequestMethod("GET")
+ connection.setConnectTimeout(5000)
+ val `in`: InputStream = connection.getInputStream()
+ val bitmap: Bitmap =
+ BitmapFactory.decodeStream(`in`)
+ holder.book_Image.setImageBitmap(bitmap)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+ }.start()
+ }
+ }
+ }
+ }
+ })
+ holder.book_Image.setOnClickListener {
+ var cnt=0
+ for (i in map){
+ if(i.value==true)
+ cnt++
+ }
+ if(cnt==0) {
+ map[position]=true
+ holder.background.setBackgroundColor(Color.CYAN)
+ selectedBook = book.name
+ }
+ else if(cnt==1){
+ if (map[position] == true){
+ map[position] = false
+ holder.background.setBackgroundColor(Color.WHITE)
+ selectedBook = ""
+ } else {
+
+ }
+ }
+ else{
+
+ }
+ }
+ }
+ override fun getItemCount() =bookList.size
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/AvatarImageView.java b/app/src/main/java/com/zjgsu/jianshu/AvatarImageView.java
new file mode 100644
index 0000000..d4b0bba
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/AvatarImageView.java
@@ -0,0 +1,4 @@
+package com.zjgsu.jianshu;
+
+public class AvatarImageView {
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/BookShelf.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/BookShelf.kt
new file mode 100644
index 0000000..48ae9b3
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/BookShelf.kt
@@ -0,0 +1,14 @@
+package com.zjgsu.jianshu.Bmob
+
+import cn.bmob.v3.BmobObject
+
+class BookShelf:BmobObject(){
+ var b_name:String = ""
+ var userid:String=""
+ fun settb_name(bookname: String){
+ this.b_name=bookname
+ }
+ fun setuserid(uid: String){
+ this.userid=uid
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_bmob.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_bmob.kt
new file mode 100644
index 0000000..e62d9ec
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_bmob.kt
@@ -0,0 +1,16 @@
+package com.zjgsu.jianshu.Bmob
+
+import cn.bmob.v3.BmobObject
+import cn.bmob.v3.datatype.BmobFile
+
+//class Book_bmob(val name:String, val picture: BmobFile, val introduce:String,val tuijian:Int,val yiban:Int,val buxing:Int,val is_like:Boolean,val category_id:Int)
+class Book_bmob: BmobObject(){
+ var name:String=""
+ var picture: BmobFile=BmobFile()
+ var introduce:String=""
+ var tuijian:Int=0
+ var yiban:Int=0
+ var buxing:Int=0
+ var category_id:Int=0
+
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_inf_bmob.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_inf_bmob.kt
new file mode 100644
index 0000000..c34dd8b
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/Book_inf_bmob.kt
@@ -0,0 +1,27 @@
+package com.zjgsu.jianshu.Bmob
+
+import cn.bmob.v3.BmobObject
+import cn.bmob.v3.datatype.BmobFile
+
+class Book_inf_bmob:BmobObject(){
+ var name: String=""
+ var picture: BmobFile= BmobFile()
+ var introduce: String=""
+ var author_name: String=""
+ var author_introduce: String=""
+ var evaluate: String=""
+ var authorpic:BmobFile=BmobFile()
+ var yiban:Int=0
+ var tuijian:Int=0
+ var buxing:Int=0
+ fun settuijian(tuijian1: Int){
+ this.tuijian=tuijian1
+ }
+ fun setyiban(yiban1: Int){
+ this.yiban=yiban1
+ }
+ fun setbuxing(buxing1: Int){
+ this.buxing=buxing1
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/Comment_bmob.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/Comment_bmob.kt
new file mode 100644
index 0000000..c1a4f77
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/Comment_bmob.kt
@@ -0,0 +1,9 @@
+package com.zjgsu.jianshu.Bmob
+
+import cn.bmob.v3.BmobObject
+
+class Comment_bmob:BmobObject() {
+ var text:String=""
+ var perceptionid:String=""
+ var comment_personid:String=""
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/Perception_bmob.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/Perception_bmob.kt
new file mode 100644
index 0000000..16426e3
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/Perception_bmob.kt
@@ -0,0 +1,9 @@
+package com.zjgsu.jianshu.Bmob
+import cn.bmob.v3.BmobObject
+
+class Perception_bmob:BmobObject() {
+ var perception: String = ""
+ var b_name: String = ""
+ var post_person: String = ""
+ var userid: String = ""
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Bmob/User_bmob.kt b/app/src/main/java/com/zjgsu/jianshu/Bmob/User_bmob.kt
new file mode 100644
index 0000000..c4a1693
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Bmob/User_bmob.kt
@@ -0,0 +1,65 @@
+package com.zjgsu.jianshu.Bmob
+
+import cn.bmob.v3.BmobObject
+import cn.bmob.v3.datatype.BmobFile
+
+class User_bmob:BmobObject(){
+ var account:String=""
+ var signature:String=""
+ var nickName:String=""
+ var password:String=""
+ var email:String=""
+ var sex:String=""
+ var phone:String=""
+ var address:String=""
+ var face:BmobFile=BmobFile()
+ fun setaccount(account:String){
+ this.account=account
+ }
+ fun getaccount():String{
+ return this.account
+ }
+ fun setsignature(signature:String){
+ this.signature=signature
+ }
+ fun getsignature():String{
+ return this.signature
+ }
+ fun setnickName(nickName:String){
+ this.nickName=nickName
+ }
+ fun getnickName():String{
+ return this.nickName
+ }
+ fun setpassword(password:String){
+ this.password=password
+ }
+ fun getpassword():String{
+ return this.password
+ }
+ fun setemail(email:String){
+ this.email=email
+ }
+ fun getemail():String{
+ return this.email
+ }
+ fun setsex(sex:String){
+ this.sex=sex
+ }
+ fun getsex():String{
+ return this.sex
+ }
+ fun setphone(phone:String){
+ this.phone=phone
+ }
+ fun getphone():String{
+ return this.phone
+ }
+ fun setaddress(address:String){
+ this.address=address
+ }
+ fun getaddress():String{
+ return this.address
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Book.kt b/app/src/main/java/com/zjgsu/jianshu/Book.kt
new file mode 100644
index 0000000..f123e90
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Book.kt
@@ -0,0 +1,8 @@
+package com.zjgsu.jianshu
+
+
+class Book(
+ var name: String,
+ var introduce: String,
+ var picUrl: String
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/BookAuthor.kt b/app/src/main/java/com/zjgsu/jianshu/BookAuthor.kt
new file mode 100644
index 0000000..1f71221
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/BookAuthor.kt
@@ -0,0 +1,3 @@
+package com.zjgsu.jianshu
+
+class BookAuthor(val name:String,val author_name:String)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Book_Shelf.kt b/app/src/main/java/com/zjgsu/jianshu/Book_Shelf.kt
new file mode 100644
index 0000000..15af46c
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Book_Shelf.kt
@@ -0,0 +1,5 @@
+package com.zjgsu.jianshu
+
+import cn.bmob.v3.datatype.BmobFile
+
+class Book_Shelf(val bkname:String)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Book_video.kt b/app/src/main/java/com/zjgsu/jianshu/Book_video.kt
new file mode 100644
index 0000000..0e8995c
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Book_video.kt
@@ -0,0 +1,5 @@
+package com.zjgsu.jianshu
+
+import cn.bmob.v3.datatype.BmobFile
+
+class Book_video(val name:String, val view1: BmobFile,val view2: BmobFile)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/Comment.kt b/app/src/main/java/com/zjgsu/jianshu/Comment.kt
new file mode 100644
index 0000000..1d1e238
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Comment.kt
@@ -0,0 +1,3 @@
+package com.zjgsu.jianshu
+
+class Comment(val commentid:String)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/DragableLuncher.java b/app/src/main/java/com/zjgsu/jianshu/DragableLuncher.java
new file mode 100644
index 0000000..b5fb6dc
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/DragableLuncher.java
@@ -0,0 +1,291 @@
+package com.zjgsu.jianshu;
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.widget.Scroller;
+
+public class DragableLuncher extends ViewGroup {
+
+ private Scroller mScroller;// 负责得到滚动属性的对象
+ private VelocityTracker mVelocityTracker;// 负责触摸的功能类
+
+ private int mScrollX = 0;// 滚动的起始X坐标
+ private float mLastMotionX;// 滚动结束X坐标
+ private int mCurrentScreen = 0;// 默认显示第几屏
+
+ private static final int SNAP_VELOCITY = 1000;
+
+ private final static int TOUCH_STATE_REST = 0;
+ private final static int TOUCH_STATE_SCROLLING = 1;
+
+ private int mTouchState = TOUCH_STATE_REST;
+
+ private int mTouchSlop = 0;//用户滑动的距离最小值
+
+ public DragableLuncher(Context context) {
+ super(context);
+ mScroller = new Scroller(context);
+ //获取触发移动事件的最短距离,系统内定?
+ mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
+
+ this.setLayoutParams(new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.FILL_PARENT));
+ }
+
+ public DragableLuncher(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mScroller = new Scroller(context);
+ //获取触发移动事件的最短距离,系统内定?
+ mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop();
+
+ this.setLayoutParams(new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.FILL_PARENT));
+
+ mCurrentScreen = 1;
+ }
+
+ /* touch事件拦截器,返回true继续执行onTouchEvent回调函数
+ * 即mTouchState ?= TOUCH_STATE_REST
+ */
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ //获取触发事件的类型,主要有:ACTION_DOWN、ACTION_MOVE、ACTION_UP
+ final int action = ev.getAction();
+ //当动作正在滑动 且 屏幕在滚动中
+ if ((action == MotionEvent.ACTION_MOVE) && (mTouchState != TOUCH_STATE_REST)) {
+ return true;
+ }
+ //获取触发点的X坐标
+ final float x = ev.getX();
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ //mLastMotionX相当于初始时按下的坐标点
+ mLastMotionX = x;
+ //一种特殊情况,界面按初速度滚动时,触屏
+ mTouchState = mScroller.isFinished() ? TOUCH_STATE_REST
+ : TOUCH_STATE_SCROLLING;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ // 获取滑动距离
+ final int xDiff = (int) Math.abs(x - mLastMotionX);
+ //X滑动距离大于mTouchSlop开始滚动,小于则放弃
+ boolean xMoved = xDiff > mTouchSlop;
+ if (xMoved) {
+ mTouchState = TOUCH_STATE_SCROLLING;//进入滑动状态
+ }
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ case MotionEvent.ACTION_UP:
+ mTouchState = TOUCH_STATE_REST;//改成闲置状态
+ break;
+ }
+
+ //判断进入滚动状态方可通过拦截器,否则不通过,通过后自动调用进一步的onTouchEvent
+ return mTouchState != TOUCH_STATE_REST;
+ }
+
+ //isOpen用以控制是否开启滚动效果,可在isOpenTouchAnima中设置
+ public boolean isOpen = true; // 设置是否打开触摸滑动
+
+ public boolean isOpenTouchAnima(boolean isOpen) {
+ this.isOpen = isOpen;
+ return isOpen;
+ }
+
+ //响应滑动时间
+
+ @Override
+ public boolean onTouchEvent(MotionEvent event) {
+ if (isOpen) {
+ //确保速率探测器不为空
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ //将event事件添加到探测器中,即绑定两者关系
+ mVelocityTracker.addMovement(event);
+
+ final int action = event.getAction();
+ final float x = event.getX();
+
+ //处理各种touch事件
+ switch (action) {
+ case MotionEvent.ACTION_DOWN:
+ //当页面正在滚动时按钮,则暂停滚动效果
+ if (!mScroller.isFinished()) {
+ mScroller.abortAnimation();
+ }
+ //只有ACTION_DOWN条件下的坐标才是初始坐标
+ mLastMotionX = x;
+ break;
+ case MotionEvent.ACTION_MOVE:
+ //移动距离,注:此处的移动带有方向,因此不取绝对值,负值向右,正值向左
+ final int deltaX = (int) (mLastMotionX - x);
+ mLastMotionX = x;
+ //deltaX<0表示向右
+ //mScrollX表示当前View滚动,左边框的X坐标,即:mScrollX>0为向右
+ if (deltaX < 0) {
+ if (mScrollX > 0) {
+ scrollBy(Math.max(-mScrollX, deltaX), 0);
+ }
+ } else if (deltaX > 0) {
+ //取得可滚动的最大距离
+ final int availableToScroll =
+ getChildAt(getChildCount() - 1).getRight()
+ - mScrollX - getWidth();
+ if (availableToScroll > 0) {
+ scrollBy(Math.min(availableToScroll, deltaX), 0);
+ }
+ }
+ break;
+ case MotionEvent.ACTION_UP:
+ //计算当前速率
+ final VelocityTracker velocityTracker = mVelocityTracker;
+ velocityTracker.computeCurrentVelocity(1000);
+ int velocityX = (int) velocityTracker.getXVelocity();
+
+ if (velocityX > SNAP_VELOCITY
+ && mCurrentScreen > 0) {
+ // 滑动到左边的界面
+ snapToScreen(mCurrentScreen - 1);
+ } else if (velocityX < -SNAP_VELOCITY
+ && mCurrentScreen < getChildCount() - 1) {
+ // 滑动到右边的界面
+ snapToScreen(mCurrentScreen + 1);
+ } else {
+ //滑动到判定的界面
+ snapToDestination();
+ }
+
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ mTouchState = TOUCH_STATE_REST;
+ break;
+ case MotionEvent.ACTION_CANCEL:
+ mTouchState = TOUCH_STATE_REST;
+ }
+ //
+ mScrollX = this.getScrollX();
+ } else {
+ return false;
+ }
+ return true;
+ }
+
+ //滑动到判定的界面
+ private void snapToDestination() {
+ final int screenWidth = getWidth();
+ final int whichScreen = (mScrollX + (screenWidth / 2)) / screenWidth;
+ snapToScreen(whichScreen);
+ }
+
+ /**
+ * 带动画效果显示界面
+ * 跳转到指定页面,id = whichScreen
+ */
+ public void snapToScreen(int whichScreen) {
+ mCurrentScreen = whichScreen;
+ final int newX = whichScreen * getWidth();
+ final int delta = newX - mScrollX;
+ mScroller.startScroll(mScrollX, 0, delta, 0, Math.abs(delta) * 2);
+ invalidate();
+ }
+
+ /**
+ * 不带动画效果显示界面
+ */
+ public void setToScreen(int whichScreen) {
+ mCurrentScreen = whichScreen;
+ final int newX = whichScreen * getWidth();
+ mScroller.startScroll(newX, 0, 0, 0, 10);
+ invalidate();
+ }
+
+ //获得当前屏幕是第几屏
+ public int getCurrentScreen() {
+ return mCurrentScreen;
+ }
+ //当主界面布局改变时调用
+
+
+ /*
+ * 在此方法内逐个设置页面在parent内显示的position
+ * 从左往右一张一张贴过去
+ */
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ int childLeft = 0;
+ final int count = getChildCount();
+
+ for (int i = 0; i < count; i++) {
+ final View child = getChildAt(i);
+
+ //View不是隐藏状态都进行显示
+ if (child.getVisibility() != View.GONE) {
+ final int childWidth = child.getMeasuredWidth();
+
+ //设置View在parent内的显示范围
+ //前两个参数:左上顶点的坐标
+ //后两个参数:右下顶点的坐标
+ child.layout(childLeft, 0, childLeft + childWidth,
+ child.getMeasuredHeight());
+
+ childLeft += childWidth;
+ }
+ }
+ }
+
+ //取得测量得到的高宽
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+ final int width = MeasureSpec.getSize(widthMeasureSpec);//提取出宽度
+
+ final int widthMode = MeasureSpec.getMode(widthMeasureSpec);//提取宽度的模式
+ if (widthMode != MeasureSpec.EXACTLY) {
+ /*测量规范模式
+ * MeasureSpec.AT_MOS
+ * ——The child can be as large as it wants up to the specified size.
+ * MeasureSpec.EXACTLY
+ * ——The parent has determined an exact size for the child.
+ * MeasureSpec.UNSPECIFIED
+ * ——The parent has not imposed any constraint on the child.
+ * */
+ throw new IllegalStateException("error mode.");
+ }
+
+
+ final int heightMode = MeasureSpec.getMode(heightMeasureSpec);//提取高度的模式
+ if (heightMode != MeasureSpec.EXACTLY) {
+ throw new IllegalStateException("error mode.");
+ }
+
+ // 子元素将被分配给同样的高和宽
+ final int count = getChildCount();
+ for (int i = 0; i < count; i++) {
+ getChildAt(i).measure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ //滚动到指定的屏幕
+ scrollTo(mCurrentScreen * width, 0);
+ }
+
+ //计算滚动的坐标
+ @Override
+ public void computeScroll() {
+ if (mScroller.computeScrollOffset()) {
+ mScrollX = mScroller.getCurrX();
+ scrollTo(mScrollX, 0);
+ postInvalidate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/MyDialog.java b/app/src/main/java/com/zjgsu/jianshu/MyDialog.java
new file mode 100644
index 0000000..5713b54
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/MyDialog.java
@@ -0,0 +1,120 @@
+package com.zjgsu.jianshu;
+
+import android.app.Dialog;
+import android.content.Context;
+import android.graphics.Point;
+import android.graphics.drawable.BitmapDrawable;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.Display;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.Button;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+
+public class MyDialog extends Dialog implements View.OnClickListener {
+ //声明xml文件里的组件
+ private TextView tv_title,tv_message;
+ private Button bt_cancel,bt_confirm;
+
+ //声明xml文件中组件中的text变量,为string类,方便之后改
+ private String title,message;
+ private String cancel,confirm;
+
+ //声明两个点击事件,等会一定要为取消和确定这两个按钮也点击事件
+ private IOnCancelListener cancelListener;
+ private IOnConfirmListener confirmListener;
+
+ //设置四个组件的内容
+ public void setTitle(String title) {
+ this.title = title;
+ }
+ public void setMessage(String message) {
+ this.message = message;
+ }
+ public void setCancel(String cancel,IOnCancelListener cancelListener) {
+ this.cancel = cancel;
+ this.cancelListener=cancelListener;
+ }
+ public void setConfirm(String confirm,IOnConfirmListener confirmListener){
+ this.confirm=confirm;
+ this.confirmListener=confirmListener;
+ }
+
+ //MyDialog类的构造方法
+ public MyDialog(@NonNull Context context) {
+ super(context);
+ }
+ public MyDialog(@NonNull Context context, int themeResId) {
+ super(context, themeResId);
+ }
+
+ //在app上以对象的形式把xml里面的东西呈现出来的方法!
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ //为了锁定app界面的东西是来自哪个xml文件
+ setContentView(R.layout.mydialog);
+
+ //设置弹窗的宽度
+ WindowManager m = getWindow().getWindowManager();
+ getWindow().setBackgroundDrawableResource(android.R.color.transparent);
+ Display d = m.getDefaultDisplay();
+ WindowManager.LayoutParams p =getWindow().getAttributes();
+ p.dimAmount=0.4f;
+ Point size = new Point();
+ d.getSize(size);
+ p.width = (int)(size.x * 0.8);//是dialog的宽度为app界面的80%
+ getWindow().setAttributes(p);
+
+ //找到组件
+ tv_title=findViewById(R.id.tv_title);
+ tv_message=findViewById(R.id.tv_message);
+ bt_cancel=findViewById(R.id.bt_cancel);
+ bt_confirm=findViewById(R.id.bt_confirm);
+
+ //设置组件对象的text参数
+ if (!TextUtils.isEmpty(title)){
+ tv_title.setText(title);
+ }
+ if (!TextUtils.isEmpty(message)){
+ tv_message.setText(message);
+ }
+// if (!TextUtils.isEmpty(cancel)){
+// bt_cancel.setText(cancel);
+// }
+
+ //为两个按钮添加点击事件
+ bt_confirm.setOnClickListener(this);
+ bt_cancel.setOnClickListener(this);
+ }
+
+ //重写onClick方法
+ public void onClick(View view) {
+ switch (view.getId()){
+ case R.id.bt_cancel:
+ if(cancelListener!=null){
+ cancelListener.onCancel(this);
+ }
+ dismiss();
+ break;
+ case R.id.bt_confirm:
+ if(confirmListener!=null){
+ confirmListener.onConfirm(this);
+ }
+ dismiss();//按钮按之后会消失
+ break;
+ }
+ }
+
+ //写两个接口,当要创建一个CustomDialog对象的时候,必须要实现这两个接口
+ //也就是说,当要弹出一个自定义dialog的时候,取消和确定这两个按钮的点击事件,一定要重写!
+ public interface IOnCancelListener{
+ void onCancel(MyDialog dialog);
+ }
+ public interface IOnConfirmListener{
+ void onConfirm(MyDialog dialog);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/NavigationHelper.kt b/app/src/main/java/com/zjgsu/jianshu/NavigationHelper.kt
new file mode 100644
index 0000000..aed03fe
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/NavigationHelper.kt
@@ -0,0 +1,13 @@
+package com.zjgsu.jianshu
+
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import kotlinx.android.synthetic.main.layout_bottom_navigation.*
+
+object NavigationHelper {
+ fun navigateTo(activity: AppCompatActivity, destinationClass: Class) {
+ val intent = Intent(activity, destinationClass)
+ activity.startActivity(intent)
+ activity.finish()
+ }
+}
diff --git a/app/src/main/java/com/zjgsu/jianshu/Perception.kt b/app/src/main/java/com/zjgsu/jianshu/Perception.kt
new file mode 100644
index 0000000..5293dc6
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/Perception.kt
@@ -0,0 +1,5 @@
+package com.zjgsu.jianshu
+
+import cn.bmob.v3.datatype.BmobFile
+
+class Perception(val perceptionid:String)
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/TypeView.kt b/app/src/main/java/com/zjgsu/jianshu/TypeView.kt
new file mode 100644
index 0000000..f4d37da
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/TypeView.kt
@@ -0,0 +1,14 @@
+package com.zjgsu.jianshu
+
+import android.view.View
+import androidx.recyclerview.widget.RecyclerView
+import android.widget.TextView
+import com.zjgsu.jianshu.R
+
+class TypeView(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ var textView: TextView
+
+ init {
+ textView = itemView.findViewById(R.id.book_Name)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/zjgsu/jianshu/showPopupcomment.java b/app/src/main/java/com/zjgsu/jianshu/showPopupcomment.java
new file mode 100644
index 0000000..f8bed2a
--- /dev/null
+++ b/app/src/main/java/com/zjgsu/jianshu/showPopupcomment.java
@@ -0,0 +1,123 @@
+package com.zjgsu.jianshu;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Build;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.PopupWindow;
+import android.widget.RelativeLayout;
+import android.widget.TextView;
+
+import androidx.annotation.RequiresApi;
+import androidx.appcompat.app.AppCompatActivity;
+
+import java.util.Timer;
+import java.util.TimerTask;
+
+public class showPopupcomment extends AppCompatActivity {
+ private PopupWindow popupWindow;
+ private View popupView = null;
+ private EditText inputComment;
+ private String nInputContentText;
+ private TextView btn_submit;
+ private RelativeLayout rl_input_container;
+ private InputMethodManager mInputManager;
+ @SuppressLint("WrongConstant")
+ private void showPopupcomment() {
+ if (popupView == null){
+ //加载评论框的资源文件
+ popupView = LayoutInflater.from(null).inflate(R.layout.comment_popupwindow, null);
+ }
+ inputComment = (EditText) popupView.findViewById(R.id.et_discuss);
+ btn_submit = (Button) popupView.findViewById(R.id.btn_confirm);
+ rl_input_container = (RelativeLayout)popupView.findViewById(R.id.rl_input_container);
+ //利用Timer这个Api设置延迟显示软键盘,这里时间为200毫秒
+ Timer timer = new Timer();
+ timer.schedule(new TimerTask() {
+
+ public void run()
+ {
+ mInputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+ mInputManager.showSoftInput(inputComment, 0);
+ }
+
+ }, 200);
+ if (popupWindow == null){
+ popupWindow = new PopupWindow(popupView, RelativeLayout.LayoutParams.MATCH_PARENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT, false);
+
+ }
+ //popupWindow的常规设置,设置点击外部事件,背景色
+ popupWindow.setTouchable(true);
+ popupWindow.setFocusable(true);
+ popupWindow.setOutsideTouchable(true);
+ popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));
+ popupWindow.setTouchInterceptor(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (event.getAction() == MotionEvent.ACTION_OUTSIDE)
+ popupWindow.dismiss();
+ return false;
+
+ }
+ });
+
+ // 设置弹出窗体需要软键盘,放在setSoftInputMode之前
+ popupWindow.setSoftInputMode(PopupWindow.INPUT_METHOD_NEEDED);
+ // 再设置模式,和Activity的一样,覆盖,调整大小。
+ popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ //设置popupwindow的显示位置,这里应该是显示在底部,即Bottom
+ popupWindow.showAtLocation(popupView, Gravity.BOTTOM, 0, 0);
+
+ popupWindow.update();
+
+ //设置监听
+ popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {
+
+ // 在dismiss中恢复透明度
+ @RequiresApi(api = Build.VERSION_CODES.CUPCAKE)
+ public void onDismiss() {
+
+ mInputManager.hideSoftInputFromWindow(inputComment.getWindowToken(), 0); //强制隐藏键盘
+
+
+ }
+ });
+ //外部点击事件
+ rl_input_container.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+
+ mInputManager.hideSoftInputFromWindow(inputComment.getWindowToken(), 0); //强制隐藏键盘
+ popupWindow.dismiss();
+
+ }
+ });
+ //评论框内的发送按钮设置点击事件
+ btn_submit.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+
+ nInputContentText = inputComment.getText().toString().trim();
+
+ if (nInputContentText == null || "".equals(nInputContentText)) {
+// showToastMsgShort("请输入评论内容");
+ return;
+ }
+ mInputManager.hideSoftInputFromWindow(inputComment.getWindowToken(),0);
+ popupWindow.dismiss();
+
+ }
+ });
+ }
+}
diff --git a/app/src/main/res/anim/push_left_in.xml b/app/src/main/res/anim/push_left_in.xml
new file mode 100644
index 0000000..d96b39a
--- /dev/null
+++ b/app/src/main/res/anim/push_left_in.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/push_left_out.xml b/app/src/main/res/anim/push_left_out.xml
new file mode 100644
index 0000000..0206de2
--- /dev/null
+++ b/app/src/main/res/anim/push_left_out.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/push_right_in.xml b/app/src/main/res/anim/push_right_in.xml
new file mode 100644
index 0000000..abec623
--- /dev/null
+++ b/app/src/main/res/anim/push_right_in.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/push_right_out.xml b/app/src/main/res/anim/push_right_out.xml
new file mode 100644
index 0000000..b967a7b
--- /dev/null
+++ b/app/src/main/res/anim/push_right_out.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/account.png b/app/src/main/res/drawable/account.png
new file mode 100644
index 0000000..344d003
Binary files /dev/null and b/app/src/main/res/drawable/account.png differ
diff --git a/app/src/main/res/drawable/add.png b/app/src/main/res/drawable/add.png
new file mode 100644
index 0000000..a1eab9e
Binary files /dev/null and b/app/src/main/res/drawable/add.png differ
diff --git a/app/src/main/res/drawable/addtobookshelf.png b/app/src/main/res/drawable/addtobookshelf.png
new file mode 100644
index 0000000..6af6aa4
Binary files /dev/null and b/app/src/main/res/drawable/addtobookshelf.png differ
diff --git a/app/src/main/res/drawable/back_icon.png b/app/src/main/res/drawable/back_icon.png
new file mode 100644
index 0000000..468bdad
Binary files /dev/null and b/app/src/main/res/drawable/back_icon.png differ
diff --git a/app/src/main/res/drawable/background.png b/app/src/main/res/drawable/background.png
new file mode 100644
index 0000000..79ea8a1
Binary files /dev/null and b/app/src/main/res/drawable/background.png differ
diff --git a/app/src/main/res/drawable/bailu.jpeg b/app/src/main/res/drawable/bailu.jpeg
new file mode 100644
index 0000000..089600a
Binary files /dev/null and b/app/src/main/res/drawable/bailu.jpeg differ
diff --git a/app/src/main/res/drawable/biji.png b/app/src/main/res/drawable/biji.png
new file mode 100644
index 0000000..936ae91
Binary files /dev/null and b/app/src/main/res/drawable/biji.png differ
diff --git a/app/src/main/res/drawable/black.png b/app/src/main/res/drawable/black.png
new file mode 100644
index 0000000..c1b79c2
Binary files /dev/null and b/app/src/main/res/drawable/black.png differ
diff --git a/app/src/main/res/drawable/bookcity1.png b/app/src/main/res/drawable/bookcity1.png
new file mode 100644
index 0000000..dc313da
Binary files /dev/null and b/app/src/main/res/drawable/bookcity1.png differ
diff --git a/app/src/main/res/drawable/bookcity2.png b/app/src/main/res/drawable/bookcity2.png
new file mode 100644
index 0000000..25b5969
Binary files /dev/null and b/app/src/main/res/drawable/bookcity2.png differ
diff --git a/app/src/main/res/drawable/bookshelf1.png b/app/src/main/res/drawable/bookshelf1.png
new file mode 100644
index 0000000..933c8af
Binary files /dev/null and b/app/src/main/res/drawable/bookshelf1.png differ
diff --git a/app/src/main/res/drawable/bookshelf2.png b/app/src/main/res/drawable/bookshelf2.png
new file mode 100644
index 0000000..61f379a
Binary files /dev/null and b/app/src/main/res/drawable/bookshelf2.png differ
diff --git a/app/src/main/res/drawable/btn_list_item_bg.png b/app/src/main/res/drawable/btn_list_item_bg.png
new file mode 100644
index 0000000..e09c82e
Binary files /dev/null and b/app/src/main/res/drawable/btn_list_item_bg.png differ
diff --git a/app/src/main/res/drawable/buxing.jpg b/app/src/main/res/drawable/buxing.jpg
new file mode 100644
index 0000000..f85991e
Binary files /dev/null and b/app/src/main/res/drawable/buxing.jpg differ
diff --git a/app/src/main/res/drawable/color_flesh.xml b/app/src/main/res/drawable/color_flesh.xml
new file mode 100644
index 0000000..ad52ffe
--- /dev/null
+++ b/app/src/main/res/drawable/color_flesh.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/color_lightblue.xml b/app/src/main/res/drawable/color_lightblue.xml
new file mode 100644
index 0000000..6f96854
--- /dev/null
+++ b/app/src/main/res/drawable/color_lightblue.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/color_lightgreen.xml b/app/src/main/res/drawable/color_lightgreen.xml
new file mode 100644
index 0000000..841d13d
--- /dev/null
+++ b/app/src/main/res/drawable/color_lightgreen.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/color_lightpurple.xml b/app/src/main/res/drawable/color_lightpurple.xml
new file mode 100644
index 0000000..000f1ab
--- /dev/null
+++ b/app/src/main/res/drawable/color_lightpurple.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/comment.png b/app/src/main/res/drawable/comment.png
new file mode 100644
index 0000000..575303c
Binary files /dev/null and b/app/src/main/res/drawable/comment.png differ
diff --git a/app/src/main/res/drawable/copper.png b/app/src/main/res/drawable/copper.png
new file mode 100644
index 0000000..53fea9a
Binary files /dev/null and b/app/src/main/res/drawable/copper.png differ
diff --git a/app/src/main/res/drawable/delete.png b/app/src/main/res/drawable/delete.png
new file mode 100644
index 0000000..07f39d8
Binary files /dev/null and b/app/src/main/res/drawable/delete.png differ
diff --git a/app/src/main/res/drawable/edit_bg.xml b/app/src/main/res/drawable/edit_bg.xml
new file mode 100644
index 0000000..465f615
--- /dev/null
+++ b/app/src/main/res/drawable/edit_bg.xml
@@ -0,0 +1,20 @@
+
+
+ -
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/email.png b/app/src/main/res/drawable/email.png
new file mode 100644
index 0000000..e6e9098
Binary files /dev/null and b/app/src/main/res/drawable/email.png differ
diff --git a/app/src/main/res/drawable/gold.png b/app/src/main/res/drawable/gold.png
new file mode 100644
index 0000000..2f36ef0
Binary files /dev/null and b/app/src/main/res/drawable/gold.png differ
diff --git a/app/src/main/res/drawable/good.png b/app/src/main/res/drawable/good.png
new file mode 100644
index 0000000..0205769
Binary files /dev/null and b/app/src/main/res/drawable/good.png differ
diff --git a/app/src/main/res/drawable/guanlizhe.jpeg b/app/src/main/res/drawable/guanlizhe.jpeg
new file mode 100644
index 0000000..e28b3c6
Binary files /dev/null and b/app/src/main/res/drawable/guanlizhe.jpeg differ
diff --git a/app/src/main/res/drawable/henhao.jpg b/app/src/main/res/drawable/henhao.jpg
new file mode 100644
index 0000000..053dfda
Binary files /dev/null and b/app/src/main/res/drawable/henhao.jpg differ
diff --git a/app/src/main/res/drawable/hot.png b/app/src/main/res/drawable/hot.png
new file mode 100644
index 0000000..6f722d8
Binary files /dev/null and b/app/src/main/res/drawable/hot.png differ
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/image_style.xml b/app/src/main/res/drawable/image_style.xml
new file mode 100644
index 0000000..ac1337d
--- /dev/null
+++ b/app/src/main/res/drawable/image_style.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/img.png b/app/src/main/res/drawable/img.png
new file mode 100644
index 0000000..9ca438f
Binary files /dev/null and b/app/src/main/res/drawable/img.png differ
diff --git a/app/src/main/res/drawable/img_1.png b/app/src/main/res/drawable/img_1.png
new file mode 100644
index 0000000..ab382db
Binary files /dev/null and b/app/src/main/res/drawable/img_1.png differ
diff --git a/app/src/main/res/drawable/img_2.png b/app/src/main/res/drawable/img_2.png
new file mode 100644
index 0000000..840ae7b
Binary files /dev/null and b/app/src/main/res/drawable/img_2.png differ
diff --git a/app/src/main/res/drawable/kexue.png b/app/src/main/res/drawable/kexue.png
new file mode 100644
index 0000000..1b418ef
Binary files /dev/null and b/app/src/main/res/drawable/kexue.png differ
diff --git a/app/src/main/res/drawable/like.png b/app/src/main/res/drawable/like.png
new file mode 100644
index 0000000..ba119d9
Binary files /dev/null and b/app/src/main/res/drawable/like.png differ
diff --git a/app/src/main/res/drawable/like1.png b/app/src/main/res/drawable/like1.png
new file mode 100644
index 0000000..d83b1ed
Binary files /dev/null and b/app/src/main/res/drawable/like1.png differ
diff --git a/app/src/main/res/drawable/main_pb_bg.xml b/app/src/main/res/drawable/main_pb_bg.xml
new file mode 100644
index 0000000..8a82e57
--- /dev/null
+++ b/app/src/main/res/drawable/main_pb_bg.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+ -
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mark.png b/app/src/main/res/drawable/mark.png
new file mode 100644
index 0000000..900a0d6
Binary files /dev/null and b/app/src/main/res/drawable/mark.png differ
diff --git a/app/src/main/res/drawable/menu.png b/app/src/main/res/drawable/menu.png
new file mode 100644
index 0000000..afe9ec4
Binary files /dev/null and b/app/src/main/res/drawable/menu.png differ
diff --git a/app/src/main/res/drawable/menu1.png b/app/src/main/res/drawable/menu1.png
new file mode 100644
index 0000000..fc2285e
Binary files /dev/null and b/app/src/main/res/drawable/menu1.png differ
diff --git a/app/src/main/res/drawable/menu3.png b/app/src/main/res/drawable/menu3.png
new file mode 100644
index 0000000..88580c6
Binary files /dev/null and b/app/src/main/res/drawable/menu3.png differ
diff --git a/app/src/main/res/drawable/more_icon.png b/app/src/main/res/drawable/more_icon.png
new file mode 100644
index 0000000..468bdad
Binary files /dev/null and b/app/src/main/res/drawable/more_icon.png differ
diff --git a/app/src/main/res/drawable/my1.png b/app/src/main/res/drawable/my1.png
new file mode 100644
index 0000000..9e769a8
Binary files /dev/null and b/app/src/main/res/drawable/my1.png differ
diff --git a/app/src/main/res/drawable/my2.png b/app/src/main/res/drawable/my2.png
new file mode 100644
index 0000000..8fa7f37
Binary files /dev/null and b/app/src/main/res/drawable/my2.png differ
diff --git a/app/src/main/res/drawable/mybookinfback.xml b/app/src/main/res/drawable/mybookinfback.xml
new file mode 100644
index 0000000..0200099
--- /dev/null
+++ b/app/src/main/res/drawable/mybookinfback.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mychatback.xml b/app/src/main/res/drawable/mychatback.xml
new file mode 100644
index 0000000..df52567
--- /dev/null
+++ b/app/src/main/res/drawable/mychatback.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mydimgrey.xml b/app/src/main/res/drawable/mydimgrey.xml
new file mode 100644
index 0000000..e45d0f1
--- /dev/null
+++ b/app/src/main/res/drawable/mydimgrey.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mygrey.xml b/app/src/main/res/drawable/mygrey.xml
new file mode 100644
index 0000000..1a14f46
--- /dev/null
+++ b/app/src/main/res/drawable/mygrey.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/mypost.png b/app/src/main/res/drawable/mypost.png
new file mode 100644
index 0000000..5265d6e
Binary files /dev/null and b/app/src/main/res/drawable/mypost.png differ
diff --git a/app/src/main/res/drawable/nicai.jpeg b/app/src/main/res/drawable/nicai.jpeg
new file mode 100644
index 0000000..db5e7c6
Binary files /dev/null and b/app/src/main/res/drawable/nicai.jpeg differ
diff --git a/app/src/main/res/drawable/note1.png b/app/src/main/res/drawable/note1.png
new file mode 100644
index 0000000..2133826
Binary files /dev/null and b/app/src/main/res/drawable/note1.png differ
diff --git a/app/src/main/res/drawable/note2.png b/app/src/main/res/drawable/note2.png
new file mode 100644
index 0000000..5156688
Binary files /dev/null and b/app/src/main/res/drawable/note2.png differ
diff --git a/app/src/main/res/drawable/perception2.png b/app/src/main/res/drawable/perception2.png
new file mode 100644
index 0000000..b1a4eb5
Binary files /dev/null and b/app/src/main/res/drawable/perception2.png differ
diff --git a/app/src/main/res/drawable/pgs_bar_bg.xml b/app/src/main/res/drawable/pgs_bar_bg.xml
new file mode 100644
index 0000000..1f51ceb
--- /dev/null
+++ b/app/src/main/res/drawable/pgs_bar_bg.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/phone.png b/app/src/main/res/drawable/phone.png
new file mode 100644
index 0000000..c2c3ce7
Binary files /dev/null and b/app/src/main/res/drawable/phone.png differ
diff --git a/app/src/main/res/drawable/return1.png b/app/src/main/res/drawable/return1.png
new file mode 100644
index 0000000..04afdbd
Binary files /dev/null and b/app/src/main/res/drawable/return1.png differ
diff --git a/app/src/main/res/drawable/return2.png b/app/src/main/res/drawable/return2.png
new file mode 100644
index 0000000..a471ec5
Binary files /dev/null and b/app/src/main/res/drawable/return2.png differ
diff --git a/app/src/main/res/drawable/right.png b/app/src/main/res/drawable/right.png
new file mode 100644
index 0000000..ae5f37a
Binary files /dev/null and b/app/src/main/res/drawable/right.png differ
diff --git a/app/src/main/res/drawable/rightslide.png b/app/src/main/res/drawable/rightslide.png
new file mode 100644
index 0000000..fce5729
Binary files /dev/null and b/app/src/main/res/drawable/rightslide.png differ
diff --git a/app/src/main/res/drawable/round_edge.xml b/app/src/main/res/drawable/round_edge.xml
new file mode 100644
index 0000000..2e63769
--- /dev/null
+++ b/app/src/main/res/drawable/round_edge.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/search.png b/app/src/main/res/drawable/search.png
new file mode 100644
index 0000000..53318f0
Binary files /dev/null and b/app/src/main/res/drawable/search.png differ
diff --git a/app/src/main/res/drawable/selector.xml b/app/src/main/res/drawable/selector.xml
new file mode 100644
index 0000000..fb0df27
--- /dev/null
+++ b/app/src/main/res/drawable/selector.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shape_pgsb.xml b/app/src/main/res/drawable/shape_pgsb.xml
new file mode 100644
index 0000000..5f6e796
--- /dev/null
+++ b/app/src/main/res/drawable/shape_pgsb.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/shopcart.png b/app/src/main/res/drawable/shopcart.png
new file mode 100644
index 0000000..f54577a
Binary files /dev/null and b/app/src/main/res/drawable/shopcart.png differ
diff --git a/app/src/main/res/drawable/sikao.jpeg b/app/src/main/res/drawable/sikao.jpeg
new file mode 100644
index 0000000..f843760
Binary files /dev/null and b/app/src/main/res/drawable/sikao.jpeg differ
diff --git a/app/src/main/res/drawable/silver.png b/app/src/main/res/drawable/silver.png
new file mode 100644
index 0000000..0efc5cf
Binary files /dev/null and b/app/src/main/res/drawable/silver.png differ
diff --git a/app/src/main/res/drawable/sky.jpeg b/app/src/main/res/drawable/sky.jpeg
new file mode 100644
index 0000000..99a69d2
Binary files /dev/null and b/app/src/main/res/drawable/sky.jpeg differ
diff --git a/app/src/main/res/drawable/taibei.jpeg b/app/src/main/res/drawable/taibei.jpeg
new file mode 100644
index 0000000..761c972
Binary files /dev/null and b/app/src/main/res/drawable/taibei.jpeg differ
diff --git a/app/src/main/res/drawable/touxiang.png b/app/src/main/res/drawable/touxiang.png
new file mode 100644
index 0000000..cbeb560
Binary files /dev/null and b/app/src/main/res/drawable/touxiang.png differ
diff --git a/app/src/main/res/drawable/unfold.png b/app/src/main/res/drawable/unfold.png
new file mode 100644
index 0000000..be82a18
Binary files /dev/null and b/app/src/main/res/drawable/unfold.png differ
diff --git a/app/src/main/res/drawable/wanttosee.png b/app/src/main/res/drawable/wanttosee.png
new file mode 100644
index 0000000..31de697
Binary files /dev/null and b/app/src/main/res/drawable/wanttosee.png differ
diff --git a/app/src/main/res/drawable/weicheng.jpeg b/app/src/main/res/drawable/weicheng.jpeg
new file mode 100644
index 0000000..f6233b3
Binary files /dev/null and b/app/src/main/res/drawable/weicheng.jpeg differ
diff --git a/app/src/main/res/drawable/wenli.PNG b/app/src/main/res/drawable/wenli.PNG
new file mode 100644
index 0000000..70d33e3
Binary files /dev/null and b/app/src/main/res/drawable/wenli.PNG differ
diff --git a/app/src/main/res/drawable/wenli2.png b/app/src/main/res/drawable/wenli2.png
new file mode 100644
index 0000000..cf808fd
Binary files /dev/null and b/app/src/main/res/drawable/wenli2.png differ
diff --git a/app/src/main/res/drawable/wenxue.png b/app/src/main/res/drawable/wenxue.png
new file mode 100644
index 0000000..2db14a2
Binary files /dev/null and b/app/src/main/res/drawable/wenxue.png differ
diff --git a/app/src/main/res/drawable/world.jpeg b/app/src/main/res/drawable/world.jpeg
new file mode 100644
index 0000000..191ee9d
Binary files /dev/null and b/app/src/main/res/drawable/world.jpeg differ
diff --git a/app/src/main/res/drawable/xinli.png b/app/src/main/res/drawable/xinli.png
new file mode 100644
index 0000000..e6a7973
Binary files /dev/null and b/app/src/main/res/drawable/xinli.png differ
diff --git a/app/src/main/res/drawable/xuexi.jpeg b/app/src/main/res/drawable/xuexi.jpeg
new file mode 100644
index 0000000..08c8b82
Binary files /dev/null and b/app/src/main/res/drawable/xuexi.jpeg differ
diff --git a/app/src/main/res/drawable/yiban.jpg b/app/src/main/res/drawable/yiban.jpg
new file mode 100644
index 0000000..05c4123
Binary files /dev/null and b/app/src/main/res/drawable/yiban.jpg differ
diff --git a/app/src/main/res/drawable/zhexue.png b/app/src/main/res/drawable/zhexue.png
new file mode 100644
index 0000000..03a929a
Binary files /dev/null and b/app/src/main/res/drawable/zhexue.png differ
diff --git a/app/src/main/res/drawable/zhuanzhu.jpeg b/app/src/main/res/drawable/zhuanzhu.jpeg
new file mode 100644
index 0000000..4b87d7e
Binary files /dev/null and b/app/src/main/res/drawable/zhuanzhu.jpeg differ
diff --git a/app/src/main/res/layout/activity_accountmanager.xml b/app/src/main/res/layout/activity_accountmanager.xml
new file mode 100644
index 0000000..77d9ef6
--- /dev/null
+++ b/app/src/main/res/layout/activity_accountmanager.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_anthor_introduction.xml b/app/src/main/res/layout/activity_anthor_introduction.xml
new file mode 100644
index 0000000..e917abf
--- /dev/null
+++ b/app/src/main/res/layout/activity_anthor_introduction.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_book.xml b/app/src/main/res/layout/activity_book.xml
new file mode 100644
index 0000000..0f4eab6
--- /dev/null
+++ b/app/src/main/res/layout/activity_book.xml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_book_info.xml b/app/src/main/res/layout/activity_book_info.xml
new file mode 100644
index 0000000..eb9973c
--- /dev/null
+++ b/app/src/main/res/layout/activity_book_info.xml
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bookintro.xml b/app/src/main/res/layout/activity_bookintro.xml
new file mode 100644
index 0000000..5da7129
--- /dev/null
+++ b/app/src/main/res/layout/activity_bookintro.xml
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_bookshelf.xml b/app/src/main/res/layout/activity_bookshelf.xml
new file mode 100644
index 0000000..fce1973
--- /dev/null
+++ b/app/src/main/res/layout/activity_bookshelf.xml
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_findpwd.xml b/app/src/main/res/layout/activity_findpwd.xml
new file mode 100644
index 0000000..0107921
--- /dev/null
+++ b/app/src/main/res/layout/activity_findpwd.xml
@@ -0,0 +1,106 @@
+
+
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_guanli.xml b/app/src/main/res/layout/activity_guanli.xml
new file mode 100644
index 0000000..51daafc
--- /dev/null
+++ b/app/src/main/res/layout/activity_guanli.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_kexue.xml b/app/src/main/res/layout/activity_kexue.xml
new file mode 100644
index 0000000..49bd777
--- /dev/null
+++ b/app/src/main/res/layout/activity_kexue.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
new file mode 100644
index 0000000..6c07124
--- /dev/null
+++ b/app/src/main/res/layout/activity_login.xml
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..52e9bab
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_my.xml b/app/src/main/res/layout/activity_my.xml
new file mode 100644
index 0000000..d8c0bb8
--- /dev/null
+++ b/app/src/main/res/layout/activity_my.xml
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_my_post.xml b/app/src/main/res/layout/activity_my_post.xml
new file mode 100644
index 0000000..7212950
--- /dev/null
+++ b/app/src/main/res/layout/activity_my_post.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_perception.xml b/app/src/main/res/layout/activity_perception.xml
new file mode 100644
index 0000000..c52de0f
--- /dev/null
+++ b/app/src/main/res/layout/activity_perception.xml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_perception_infomation.xml b/app/src/main/res/layout/activity_perception_infomation.xml
new file mode 100644
index 0000000..a21cb67
--- /dev/null
+++ b/app/src/main/res/layout/activity_perception_infomation.xml
@@ -0,0 +1,179 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_re_email.xml b/app/src/main/res/layout/activity_re_email.xml
new file mode 100644
index 0000000..1225b0f
--- /dev/null
+++ b/app/src/main/res/layout/activity_re_email.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_re_myinfo.xml b/app/src/main/res/layout/activity_re_myinfo.xml
new file mode 100644
index 0000000..72bbb95
--- /dev/null
+++ b/app/src/main/res/layout/activity_re_myinfo.xml
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_re_name.xml b/app/src/main/res/layout/activity_re_name.xml
new file mode 100644
index 0000000..13c14aa
--- /dev/null
+++ b/app/src/main/res/layout/activity_re_name.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_re_phone.xml b/app/src/main/res/layout/activity_re_phone.xml
new file mode 100644
index 0000000..c296f64
--- /dev/null
+++ b/app/src/main/res/layout/activity_re_phone.xml
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_re_sex.xml b/app/src/main/res/layout/activity_re_sex.xml
new file mode 100644
index 0000000..4e74e45
--- /dev/null
+++ b/app/src/main/res/layout/activity_re_sex.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_register.xml b/app/src/main/res/layout/activity_register.xml
new file mode 100644
index 0000000..1b56fd1
--- /dev/null
+++ b/app/src/main/res/layout/activity_register.xml
@@ -0,0 +1,205 @@
+
+
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_sendperception.xml b/app/src/main/res/layout/activity_sendperception.xml
new file mode 100644
index 0000000..2f30a71
--- /dev/null
+++ b/app/src/main/res/layout/activity_sendperception.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_wenxue.xml b/app/src/main/res/layout/activity_wenxue.xml
new file mode 100644
index 0000000..caf0722
--- /dev/null
+++ b/app/src/main/res/layout/activity_wenxue.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_xinli.xml b/app/src/main/res/layout/activity_xinli.xml
new file mode 100644
index 0000000..d300ee8
--- /dev/null
+++ b/app/src/main/res/layout/activity_xinli.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_zhexue.xml b/app/src/main/res/layout/activity_zhexue.xml
new file mode 100644
index 0000000..baea3e9
--- /dev/null
+++ b/app/src/main/res/layout/activity_zhexue.xml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/book_author_item.xml b/app/src/main/res/layout/book_author_item.xml
new file mode 100644
index 0000000..bd8dc29
--- /dev/null
+++ b/app/src/main/res/layout/book_author_item.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/book_item.xml b/app/src/main/res/layout/book_item.xml
new file mode 100644
index 0000000..467f4b2
--- /dev/null
+++ b/app/src/main/res/layout/book_item.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/bookpic_item.xml b/app/src/main/res/layout/bookpic_item.xml
new file mode 100644
index 0000000..0dc4dfc
--- /dev/null
+++ b/app/src/main/res/layout/bookpic_item.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/bookshelf_item.xml b/app/src/main/res/layout/bookshelf_item.xml
new file mode 100644
index 0000000..2297a45
--- /dev/null
+++ b/app/src/main/res/layout/bookshelf_item.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/comment_item.xml b/app/src/main/res/layout/comment_item.xml
new file mode 100644
index 0000000..2fe2085
--- /dev/null
+++ b/app/src/main/res/layout/comment_item.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/comment_popupwindow.xml b/app/src/main/res/layout/comment_popupwindow.xml
new file mode 100644
index 0000000..6ad057d
--- /dev/null
+++ b/app/src/main/res/layout/comment_popupwindow.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/expandable.xml b/app/src/main/res/layout/expandable.xml
new file mode 100644
index 0000000..130ea2a
--- /dev/null
+++ b/app/src/main/res/layout/expandable.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/expandable2.xml b/app/src/main/res/layout/expandable2.xml
new file mode 100644
index 0000000..79dba13
--- /dev/null
+++ b/app/src/main/res/layout/expandable2.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/expandable3.xml b/app/src/main/res/layout/expandable3.xml
new file mode 100644
index 0000000..b49c7f2
--- /dev/null
+++ b/app/src/main/res/layout/expandable3.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/expandable4.xml b/app/src/main/res/layout/expandable4.xml
new file mode 100644
index 0000000..fff6b99
--- /dev/null
+++ b/app/src/main/res/layout/expandable4.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/goodsuibi_item.xml b/app/src/main/res/layout/goodsuibi_item.xml
new file mode 100644
index 0000000..11ea4f5
--- /dev/null
+++ b/app/src/main/res/layout/goodsuibi_item.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/layout_bottom_navigation.xml b/app/src/main/res/layout/layout_bottom_navigation.xml
new file mode 100644
index 0000000..32ba99f
--- /dev/null
+++ b/app/src/main/res/layout/layout_bottom_navigation.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/media_player.xml b/app/src/main/res/layout/media_player.xml
new file mode 100644
index 0000000..46f49ed
--- /dev/null
+++ b/app/src/main/res/layout/media_player.xml
@@ -0,0 +1,6 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/mydialog.xml b/app/src/main/res/layout/mydialog.xml
new file mode 100644
index 0000000..591b01f
--- /dev/null
+++ b/app/src/main/res/layout/mydialog.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/nav_header.xml b/app/src/main/res/layout/nav_header.xml
new file mode 100644
index 0000000..443de18
--- /dev/null
+++ b/app/src/main/res/layout/nav_header.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/pageview.xml b/app/src/main/res/layout/pageview.xml
new file mode 100644
index 0000000..dd45557
--- /dev/null
+++ b/app/src/main/res/layout/pageview.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/perception_item.xml b/app/src/main/res/layout/perception_item.xml
new file mode 100644
index 0000000..2d5bd79
--- /dev/null
+++ b/app/src/main/res/layout/perception_item.xml
@@ -0,0 +1,186 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/test11.xml b/app/src/main/res/layout/test11.xml
new file mode 100644
index 0000000..41d281c
--- /dev/null
+++ b/app/src/main/res/layout/test11.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/title.xml b/app/src/main/res/layout/title.xml
new file mode 100644
index 0000000..5c3934d
--- /dev/null
+++ b/app/src/main/res/layout/title.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/video_player.xml b/app/src/main/res/layout/video_player.xml
new file mode 100644
index 0000000..9bc979e
--- /dev/null
+++ b/app/src/main/res/layout/video_player.xml
@@ -0,0 +1,6 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/nav_bookshelf.xml b/app/src/main/res/menu/nav_bookshelf.xml
new file mode 100644
index 0000000..8d60a66
--- /dev/null
+++ b/app/src/main/res/menu/nav_bookshelf.xml
@@ -0,0 +1,13 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/nav_menu.xml b/app/src/main/res/menu/nav_menu.xml
new file mode 100644
index 0000000..b5dc9a8
--- /dev/null
+++ b/app/src/main/res/menu/nav_menu.xml
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..d295c4a
--- /dev/null
+++ b/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..de4e5ec
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,15 @@
+
+
+ #FFBB86FC
+ #FF6200EE
+ #FF3700B3
+ #FF03DAC5
+ #FF018786
+ #FF000000
+ #FFFFFFFF
+ #FF87CEFF
+ #FCF7F7
+ #000000
+ #696969
+ #03045e
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimen.xml b/app/src/main/res/values/dimen.xml
new file mode 100644
index 0000000..6acb516
--- /dev/null
+++ b/app/src/main/res/values/dimen.xml
@@ -0,0 +1,5 @@
+
+
+ 10dp
+ 10dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..2e04519
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ Jianshu
+
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..435bacf
--- /dev/null
+++ b/app/src/main/res/values/themes.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/test.xml b/app/src/main/res/xml/test.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/app/src/main/res/xml/test.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/test/java/com/zjgsu/jianshu/ExampleUnitTest.kt b/app/src/test/java/com/zjgsu/jianshu/ExampleUnitTest.kt
new file mode 100644
index 0000000..d9fca04
--- /dev/null
+++ b/app/src/test/java/com/zjgsu/jianshu/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.zjgsu.jianshu
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..22dc47a
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,19 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath "com.android.tools.build:gradle:7.0.2"
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20"
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+
+ }
+}
+
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..98bed16
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,21 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app"s APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..2f839a1
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Fri Sep 24 16:24:27 CST 2021
+distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+distributionPath=wrapper/dists
+zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..4f906e0
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,185 @@
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=`expr $i + 1`
+ done
+ case $i in
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..107acd3
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,89 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto execute
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..3e43307
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1,10 @@
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ jcenter() // Warning: this repository is going to shut down soon
+ }
+}
+rootProject.name = "Jianshu"
+include ':app'