问题描述
点击特定书籍后,下一个活动应该从服务器获取该书籍的详细信息,但它只显示一个空白页面。 Logcat 显示了这一点 - “W/ActivityThread:handleWindowVisibility:令牌 android.os.BinderProxy 没有活动”。 我认为问题出在 DescriptionActivity 中的响应侦听器中。
DescriptionActivity.kt
[package com.internshala.bookhub.activity
import android.app.AlertDialog
import android.content.Intent
import android.os.Bundle
import android.provider.Settings
import android.view.View
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
import androidx.core.app.ActivityCompat
import com.android.volley.Request
import com.android.volley.Response
import com.android.volley.toolBox.JsonObjectRequest
import com.android.volley.toolBox.Volley
import com.internshala.bookhub.R
import com.internshala.bookhub.util.ConnectionManager
import com.squareup.picasso.Picasso
import org.json.JSONObject
class DescriptionActivity : AppCompatActivity() {
lateinit var txtBookName: TextView
lateinit var txtBookAuthor: TextView
lateinit var txtBookPrice: TextView
lateinit var txtBookrating: TextView
lateinit var imgBookImage: ImageView
lateinit var txtBookDesc: TextView
lateinit var btnAddToFav: Button
lateinit var progressBar: ProgressBar
lateinit var progressLayout: RelativeLayout
lateinit var toolbar: Toolbar
private var bookId: String? = "100"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_description)
txtBookName = findViewById(R.id.txtBookName)
txtBookAuthor = findViewById(R.id.txtBookAuthor)
txtBookPrice = findViewById(R.id.txtBookPrice)
txtBookrating = findViewById(R.id.txtBookrating)
imgBookImage = findViewById(R.id.imgBookImage)
txtBookDesc = findViewById(R.id.txtBookDesc)
btnAddToFav = findViewById(R.id.btnAddToFav)
progressBar = findViewById(R.id.progressBar)
progressBar.visibility = View.VISIBLE
progressLayout = findViewById(R.id.progressLayout)
progressLayout.visibility = View.VISIBLE
toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)
supportActionBar?.title = "Book Details"
if (intent != null) {
bookId = intent.getStringExtra("book_id")
} else {
finish()
Toast.makeText(this,"Some unexpected error occurred",Toast.LENGTH_SHORT).show()
}
if (bookId == "100") {
finish()
Toast.makeText(this,Toast.LENGTH_SHORT).show()
}
val queue = Volley.newRequestQueue(this@DescriptionActivity)
val url = "http://13.235.250.119/v1/book/get_book/"
val jsonParams = JSONObject()
jsonParams.put("book_id",bookId)
if (ConnectionManager().checkConnectivity(this@DescriptionActivity)) {
val jsonRequest =
object : JsonObjectRequest(
Request.Method.POST,url,jsonParams,Response.Listener {
try {
val success = it.getBoolean("success")
if (success) {
val bookJsonObject = it.getJSONObject("book_data")
progressLayout.visibility = View.GONE
Picasso.get().load(bookJsonObject.getString("image"))
.error(R.drawable.default_book_cover).into(imgBookImage)
txtBookName.text = bookJsonObject.getString("name")
txtBookAuthor.text = bookJsonObject.getString("author")
txtBookPrice.text = bookJsonObject.getString("price")
txtBookrating.text = bookJsonObject.getString("rating")
txtBookDesc.text = bookJsonObject.getString("description")
} else {
Toast.makeText(
this@DescriptionActivity,"Some error occurred",Toast.LENGTH_SHORT
).show()
}
} catch (e: Exception) {
Toast.makeText(
this@DescriptionActivity,Toast.LENGTH_SHORT
).show()
}
},Response.ErrorListener {
Toast.makeText(
this@DescriptionActivity,"Volley error $it",Toast.LENGTH_SHORT
).show()
}) {
override fun getHeaders(): MutableMap<String,String> {
val headers = HashMap<String,String>()
headers\["Content-type"\] = "application/json"
headers\["token"\] = "85f03c501b7a40"
return headers
}
}
} else {
//Internet is not Available
val dialog = AlertDialog.Builder(this)
dialog.setTitle("Error")
dialog.setMessage("Internet Connection Not Found")
dialog.setPositiveButton("Open Settings") { text,listener ->
val settingsIntent = Intent(Settings.ACTION_WIRELESS_SETTINGS)
startActivity(settingsIntent)
this.finish()
}
dialog.setNegativeButton("Exit") { text,listener ->
ActivityCompat.finishAffinity(this)
}
dialog.create()
dialog.show()
}
}
}
仪表板片段.kt
package com.internshala.bookhub.fragment
import android.app.Activity
import android.app.AlertDialog
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.provider.Settings
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ProgressBar
import android.widget.RelativeLayout
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.DividerItemdecoration
import androidx.recyclerview.widget.linearlayoutmanager
import androidx.recyclerview.widget.RecyclerView
import com.android.volley.Response
import com.android.volley.toolBox.JsonObjectRequest
import com.android.volley.toolBox.Volley
import com.internshala.bookhub.R
import com.internshala.bookhub.adapter.DashboardRecyclerAdapter
import com.internshala.bookhub.model.Book
import com.internshala.bookhub.util.ConnectionManager
import org.json.JSONException
class DashboardFragment : Fragment() {
private lateinit var recyclerDashboard: RecyclerView
private lateinit var layoutManager: RecyclerView.LayoutManager
private lateinit var recyclerAdapter: DashboardRecyclerAdapter
private lateinit var progressLayout: RelativeLayout
private lateinit var progressBar: ProgressBar
val bookInfoList = arraylistof<Book>(
)
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.fragment_dashboard,container,false)
recyclerDashboard = view.findViewById(R.id.recyclerDashboard)
progressLayout = view.findViewById(R.id.progressLayout)
progressBar = view.findViewById(R.id.progressBar)
progressLayout.visibility = View.VISIBLE
layoutManager = linearlayoutmanager(activity)
val queue = Volley.newRequestQueue(activity as Context)
val url = "http://13.235.250.119/v1/book/fetch_books/"
if (ConnectionManager().checkConnectivity(activity as Context)) {
val jsonObjectRequest =
object : JsonObjectRequest(Method.GET,null,Response.Listener {
//Here we will handle the response
try {
progressLayout.visibility = View.GONE
val success = it.getBoolean("success")
if (success) {
val data = it.getJSONArray("data")
for (i in 0 until data.length()) {
val bookJsonObject = data.getJSONObject(i)
val bookObject = Book(
bookJsonObject.getString("book_id"),bookJsonObject.getString("name"),bookJsonObject.getString("author"),bookJsonObject.getString("rating"),bookJsonObject.getString("price"),bookJsonObject.getString("image")
)
bookInfoList.add(bookObject)
recyclerAdapter =
DashboardRecyclerAdapter(activity as Context,bookInfoList)
recyclerDashboard.adapter = recyclerAdapter
recyclerDashboard.layoutManager = layoutManager
}
} else {
Toast.makeText(
activity as Context,"Some Error Occurred!!!",Toast.LENGTH_SHORT
)
.show()
}
} catch (e: JSONException) {
Toast.makeText(
activity as Context,"Some unexpected error occurred!!!",Toast.LENGTH_SHORT
).show()
}
},Response.ErrorListener {
// Here we will handle the errors
Toast.makeText(activity as Context,"Volley error occurred",Toast.LENGTH_SHORT)
.show()
}) {
override fun getHeaders(): MutableMap<String,String> {
val headers = HashMap<String,String>()
headers["Content-type"] = "application/json"
headers["token"] = "85f03c501b7a40"
return headers
}
}
queue.add(jsonObjectRequest)
} else {
//Internet is not Available
val dialog = AlertDialog.Builder(activity as Context)
dialog.setTitle("Error")
dialog.setMessage("Internet Connection Not Found")
dialog.setPositiveButton("Open Settings") { text,listener ->
val settingsIntent = Intent(Settings.ACTION_WIRELESS_SETTINGS)
startActivity(settingsIntent)
activity?.finish()
}
dialog.setNegativeButton("Exit") { text,listener ->
ActivityCompat.finishAffinity(activity as Activity)
}
dialog.create()
dialog.show()
}
return view
}
}
主活动
package com.internshala.bookhub.activity
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.MenuItem
import android.widget.FrameLayout
import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.view.GravityCompat
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.navigation.NavigationView
import com.internshala.bookhub.*
import com.internshala.bookhub.fragment.AboutFragment
import com.internshala.bookhub.fragment.DashboardFragment
import com.internshala.bookhub.fragment.FavouritesFragment
import com.internshala.bookhub.fragment.ProfileFragment
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout:DrawerLayout
private lateinit var coordinatorLayout: CoordinatorLayout
private lateinit var toolbar: Toolbar
private lateinit var frameLayout: FrameLayout
private lateinit var navigationView:NavigationView
private var prevIoUsMenuItem :MenuItem? =null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
drawerLayout = findViewById(R.id.drawerLayout)
coordinatorLayout = findViewById(R.id.coordinatorLayout)
toolbar = findViewById(R.id.toolbar)
frameLayout= findViewById(R.id.frame)
navigationView = findViewById(R.id.navigationView)
setUpToolbar()
openDashboard()
val actionBarDrawerToggle = ActionBarDrawerToggle(this@MainActivity,drawerLayout,R.string.open_drawer,R.string.close_drawer
)
drawerLayout.addDrawerListener(actionBarDrawerToggle)
actionBarDrawerToggle.syncState()
navigationView.setNavigationItemSelectedListener {
if (prevIoUsMenuItem != null){
prevIoUsMenuItem?.isChecked = false
}
it.isCheckable = true
it.isChecked = true
prevIoUsMenuItem = it
when(it.itemId){
R.id.dashboard -> {
openDashboard()
drawerLayout.closeDrawers()
}
R.id.profile -> {
supportFragmentManager.beginTransaction()
.replace(R.id.frame,ProfileFragment() )
.commit()
supportActionBar?.title = "Profile"
drawerLayout.closeDrawers()
}
R.id.favourites -> {
supportFragmentManager.beginTransaction()
.replace(R.id.frame,FavouritesFragment())
.commit()
supportActionBar?.title = "Favourites"
drawerLayout.closeDrawers()
}
R.id.aboutApp -> {
supportFragmentManager.beginTransaction()
.replace(R.id.frame,AboutFragment())
.commit()
supportActionBar?.title = "About App"
drawerLayout.closeDrawers()
}
}
return@setNavigationItemSelectedListener true
}
}
private fun setUpToolbar(){
setSupportActionBar(toolbar)
supportActionBar?.title = "Toolbar Title"
supportActionBar?.setHomeButtonEnabled(true)
supportActionBar?.setdisplayHomeAsUpEnabled(true)
}
override fun onoptionsItemSelected(item: MenuItem): Boolean {
val id = item.itemId
if (id == android.R.id.home){
drawerLayout.openDrawer(GravityCompat.START)
}
return super.onoptionsItemSelected(item)
}
private fun openDashboard(){
val fragment = DashboardFragment()
val transaction = supportFragmentManager.beginTransaction()
transaction.replace(R.id.frame,fragment)
transaction.commit()
supportActionBar?.title = "Dashboard"
navigationView.setCheckedItem(R.id.dashboard)
}
override fun onBackpressed() {
when(supportFragmentManager.findFragmentById(R.id.frame)){
!is DashboardFragment -> openDashboard()
else -> super.onBackpressed()
}
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)