отправка значения вне потока - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь собрать значения из данных, сохраненных в sqlite, и значение html, запрошенное jsoup внутри потока, данные sqlite были возвращены, но значения внутри потока, которые доставляют данные со страницы html, не печатались что-нибудь. Почему? это потому, что я не могу отправить значение вне потока? Я создал глобальную переменную вне потока (stringbuilder), чтобы перехватывать данные внутри потока и отправлять вне потока, но также это не сработало, хотя я тестировал эту тему на другой странице (вне файла базы данных) и отлично работает

что не так с этим кодом?

enter image description here

DatabaseHandler.kt

    fun allInvestments():List<InvestModelClass>{
        val invList:ArrayList<InvestModelClass> = ArrayList<InvestModelClass>()
        val selectQuery = "SELECT  * FROM $TABLE_CONTACTS order by id desc"
        val db = this.readableDatabase
        var cursor: Cursor?
        try{

            cursor = db.rawQuery(selectQuery, null)
        }catch (e: SQLiteException) {
            db.execSQL(selectQuery)
            return ArrayList()
        }
        //  var invest_id: Int
        var start_date: String
        var amount:String
        var currency: String
        var karat:String
        var enter_price:String

        var percent:String

//moveToFirst will bring all ids
//moveToLast will bring the last inserted id
        if (cursor.moveToFirst()) {
            do {
                // invest_id = cursor.getInt(cursor.getColumnIndex("id"))
                start_date = cursor.getString(cursor.getColumnIndex("dt"))
                amount = cursor.getString(cursor.getColumnIndex("amount"))
                currency = cursor.getString(cursor.getColumnIndex("currency"))
                karat = cursor.getString(cursor.getColumnIndex("karat"))
                enter_price = cursor.getString(cursor.getColumnIndex("enter_price"))
                if(enter_price.contains("إلى")){
                    var splitterx="إلى"
                    val split_strx=enter_price.split(splitterx)
                    enter_price=split_strx[0]


                }else {
                    var splitterx=" "
                    val split_strx=enter_price.split(splitterx)
                    enter_price=split_strx[0]

                }





                //set percent,new amount
                //calculate percent/profit and advice

                if(currency=="الجنيه المصرى"){
                    url_link = "http://egypt.gold-price-today.com/"
                }

                if(currency=="الريال السعودي"){
                    url_link = "http://saudi-arabia.gold-price-today.com/"
                }

                if(currency=="الدرهم الإماراتى"){
                    url_link = "http://united-arab-emirates.gold-price-today.com/"
                }



                if(currency=="الدينار الكويتى"){
                    url_link = "http://kuwait.gold-price-today.com/"
                }


                //start thread to get current price
                var catch_new_amount=StringBuilder()
                var catch_percent=StringBuilder()
                Thread(Runnable {
                    var init_recent_price=StringBuilder()
                    try{
                        val doc = Jsoup.connect(url_link).get()
                        val table = doc.select("table")[0]
                        val tbody = table.select("tbody")
                        val rows = tbody.select("tr")

                        for (i in rows.indices) {
                            val row = rows[i]//
                            val cols = row.select("td")
                            //karat 21
                            if (i == 2 ) {
                                karat_recent_price = cols[0].text()

                                if(karat_recent_price.contains("إلى")){
                                    var splitter="إلى"
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text

                                }else {
                                    var splitter=" "
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text
                                }
                            }

                            //karat 18
                            if (i == 3 ) {
                                karat_recent_price = cols[0].text()
                                if(karat_recent_price.contains("إلى")){
                                    var splitter="إلى"
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text

                                }else {
                                    var splitter=" "
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text
                                }
                            }

                            //karat 24
                            if (i == 0 ) {
                                karat_recent_price = cols[0].text()

                                if(karat_recent_price.contains("إلى")){
                                    var splitter="إلى"
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text

                                }else {
                                    var splitter=" "
                                    val split_str=karat_recent_price.split(splitter)
                                    karat_recent_price=split_str[0]
                                    init_recent_price.append(karat_recent_price)  //show karat price text
                                }
                            }

                            //inv_amount[index] , inv_enter_price[index] , karat_recent_price
                            var int_amount=amount


                            // new_amount=(int_amount * int_recent_price_string / int_enter_price).toString()
                            new_amount= karat_recent_price
                            catch_new_amount.append(new_amount)


                            if(new_amount > int_amount){
                                var inc=new_amount.toFloat() - int_amount.toFloat()
                                var percent_inc=(inc/int_amount.toFloat())* 100
                                   percent=percent_inc.toString()
                                init_percent_string=percent
                                catch_percent.append(percent)
                            }else {

                                var dec=int_amount.toFloat() - new_amount.toFloat()
                                var percent_dec=(dec/int_amount.toFloat()) * 100
                                percent=percent_dec.toString()
                                init_percent_string=percent
                                catch_percent.append(percent)

                            }



                        }//end for

                    }
                    catch(e: IOException){
                        e.printStackTrace()
                    }

                   // runOnUiThread{}

                }).start()

                //id,start_date,enter_price,amount,currency,karat,percent,profit
                val emp= InvestModelClass(
                    start_date = start_date,
                    enter_price = enter_price,
                    amount = amount,
                    currency = currency,
                    karat = karat,
                    new_amount = catch_new_amount.toString(),
                    percent = catch_percent.toString()
                )
                invList.add(emp)
            } while (cursor.moveToNext())
        }
        return invList
    }

ListInvests.kt

package com.example.parsehtml

import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.list_invests.*
import kotlinx.android.synthetic.main.startinvest_main.*

class ListInvests : AppCompatActivity()  {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.startinvest_main)


        button.setOnClickListener(){
            intent = Intent(this,MainActivity::class.java)
            startActivity(intent)
        }




        //creating the instance of DatabaseHandler class
        val databaseHandler: DatabaseHandler= DatabaseHandler(this)
        //calling the viewEmployee method of DatabaseHandler class to read the records
        //id,start_date,enter_price,amount,currency,karat,percent,profit
        val inv: List<InvestModelClass> = databaseHandler.allInvestments()
        val inv_startdate = Array<String>(inv.size){"0"}
        val inv_enter_price = Array<String>(inv.size){"null"}
        val inv_amount = Array<String>(inv.size){"null"}
        val inv_currency = Array<String>(inv.size){"null"}
        val inv_karat = Array<String>(inv.size){"null"}
        val inv_new_amount=Array(inv.size){"null"}
        val inv_percent=Array(inv.size){"null"}
        var index = 0
        for(e in inv){
            inv_startdate[index] = e.start_date.toString()
            inv_enter_price[index] = e.enter_price.toString()
            inv_amount[index] = e.amount.toString()
            inv_currency[index] = e.currency.toString()
            inv_karat[index] = e.karat.toString()
            inv_new_amount[index]=e.new_amount.toString()
            inv_percent[index]=e.percent.toString()
            index++
        }
        //creating custom ArrayAdapter
        //id,start_date,enter_price,amount,currency,karat,percent,profit
       val myListAdapter = InvestListAdapter(this,inv_startdate,inv_enter_price,inv_amount,inv_currency,inv_karat,inv_new_amount,inv_percent)
        listView.adapter = myListAdapter

    }//end oncreate










}

InvestModelClass.kt

package com.example.parsehtml
//id,start_date,enter_price,amount,currency,karat,percent,profit
class InvestModelClass ( val start_date:String ,val enter_price:String, val amount: String,val currency:String,val karat:String,val new_amount:String,val percent:String)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...