Сохранить / восстановить ответ Retrofit2 в Android - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть приложение, которое подключается к GitHub API.Он загружает и показывает список репозиториев определенного пользователя.И когда я нажимаю на имя репозитория, я переключаюсь на другой фрагмент с WebView.Когда я возвращаюсь обратно в список, в списке есть элементы, но они представляют собой строковые элементы, не кликабельные.Как я могу сохранить ответ Retrofit и затем обновить список с этим?

Фрагмент , где я показываю список:

class MainFragment : Fragment() {

lateinit var mRecyclerView: RecyclerView
lateinit var name:String
lateinit var service: GitHubService
var responseSave:List<GitHubPOJO> = ArrayList()
var posts: MutableList<GitHubPOJO> = ArrayList()
private lateinit var btn:Button

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?): View? {

    val view = inflater.inflate(R.layout.fragment_main, container, false)

    btn = view.findViewById(R.id.button)
    btn.setOnClickListener (onClick)

    return view
}

val onClick = View.OnClickListener {
    posts = ArrayList()

    mRecyclerView = view!!.findViewById(R.id.posts_recycle_view)
    val layoutManager = LinearLayoutManager(this.activity!!)
    mRecyclerView.layoutManager = layoutManager

    val adapter = PostsAdapter(posts)
    mRecyclerView.adapter = adapter

    hideKeyboard()
    name = view!!.findViewById<EditText>(R.id.txt_user_name).text.toString()
    if (name.isEmpty()){
        Toast.makeText(activity!!,"You do not entered User's name",Toast.LENGTH_LONG).show()
    };else{
        if (isInternet()) {
            serverConnect()
            recyclerClick()
        };else {
            Toast.makeText(activity!!,"Please, check your internet connection!",Toast.LENGTH_LONG).show()
        }
    }
}

private fun serverConnect(){
    service = Retrofit.Builder()
        .baseUrl("https://api.github.com/") // CHANGE API
        .addConverterFactory(GsonConverterFactory.create())
        .build()
        .create(GitHubService::class.java)
    service.retrieveRepositories(name)
        .enqueue(object : Callback<List<GitHubPOJO>> {
            override fun onResponse(call: Call<List<GitHubPOJO>>, response: Response<List<GitHubPOJO>>) {
                responseSave = response.body()!!
                posts.addAll(responseSave)
                mRecyclerView.adapter?.notifyDataSetChanged()
                response.body()?.forEach { println("TAG_: $it") }
            }

            override fun onFailure(call: Call<List<GitHubPOJO>>, t: Throwable) {
            }
        })
}

private fun recyclerClick(){
    mRecyclerView.addOnItemTouchListener(ClickListener(this.activity!!, mRecyclerView, object : ClickListener.OnItemClickListener {
        override fun onLongItemClick(view: View?, position: Int) {
        }

        override fun onItemClick(view: View, position: Int) {
            val url = posts[position].htmlUrl
            println("URL =  $url")
            view.findNavController().navigate(MainFragmentDirections.actionMainFragmentToWebFragment(url))
                }
            }
        )
    )
}

@Suppress("DEPRECATION")
fun isInternet():Boolean{
    val cm = context!!.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork = cm.activeNetworkInfo
    return activeNetwork!=null
}

fun hideKeyboard(){
    val inputMethodManager = this.activity!!.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
    if (activity!!.currentFocus != null) {
        inputMethodManager.hideSoftInputFromWindow(this.activity!!.currentFocus!!.windowToken, 0)
    }
}

Там у меня есть onResume код.Это может показать мне список, но элементы списка не кликабельны.

override fun onResume() {
    super.onResume()
    mRecyclerView = view!!.findViewById(R.id.posts_recycle_view)
    val layoutManager = LinearLayoutManager(this.activity!!)
    mRecyclerView.layoutManager = layoutManager
    val adapter = PostsAdapter(posts)
    mRecyclerView.adapter = adapter
    adapter.updateAdapterList(responseSave.toMutableList())
    println("RESUME")
    responseSave.forEach { println("TAG_: $it") }
}

1 Ответ

0 голосов
/ 13 декабря 2018

Я нашел решение.

Мой новый onResume код:

override fun onResume() {
    super.onResume()
    repos?.clone()?.enqueue(obj)
    recyclerClick()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...