[英]How to pass an edittext string from an activity to a method in another activity?
[英]Pass string from onLoadFinished method to another activity
我已經創建了一個內容檢索器,它從另一個應用程序中的內容提供者調用數據,我可以成功讀取數據,但我想將數據從我的內容檢索器中的 onLoadFinished 方法傳遞給應該在按鈕按下時顯示數據的活動. 但我不確定該怎么做,我嘗試使用 getter 和 setter,但它不打印任何東西。
以下是我的內容提供程序中的行:
String[] columns = new String[]{"_id", "item"};
MatrixCursor matrixCursor = new MatrixCursor(columns);
matrixCursor.addRow(new Object[]{1, "FOUND"});
//Test is a string object that gets serialized to Json
matrixCursor.addRow(new Object[]{2, new Gson().toJson(test)});
matrixCursor.setNotificationUri(getContext().getContentResolver(), uri);
return matrixCursor;
我想從第二行獲取數據,這就是我在我的 Retriever class 中的onLoadFinished
中的數據:
class Retriever : LoaderManager.LoaderCallbacks<Cursor>{
private var dataFromJson = ""
//getters and setters
fun setData(data: String){
this.dataFromJson = data
}
fun getData():String{
return dataFromJson
}
//other Loader method such as onCreateLoader, etc.
override fun onLoadFinished(loader: Loader<Cursor>, data: Cursor?) {
try
{
val success: Boolean
if (data != null && data.getCount() > 0)
{
data.moveToFirst()
val dataString = data.getString(1)
//this works, I am able to find the "found" text at the first row
success = dataString.equals("FOUND", ignoreCase = true)
//move to 2nd row
data.moveToNext()
//get data from 2nd row does not work
val JSonData = data.getString(1)
setData(JSonData)
}
else
{
Timber.d( "onLoadFinished Unknown error occurred")
success = false
}
//custom interface listener
listener.onClassListener(success)
}
catch (e:Exception) {
Timber.d("Error")
}
}
}
在我的活動中,當我創建一個 Retriever object 並調用 getData() 方法時,它什么也不顯示。
class TestActivity{
private lateinit var dataRetriever: Retriever
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_test_activity)
//I have a textView called dataTxt
//displays nothing
dataTxt.text = dataRetriever.getData()
}
}
任何幫助或建議將不勝感激
這是因為加載任務是異步操作,當你調用getData()
function 時, dataFromJson
的值很可能還是一個空字符串。
為了輕松處理這個問題,您可以聲明一個這樣的接口:
interface OnDataRetrieveListener{
fun onDataLoad(dataString: String)
}
然后在 Retriever 中創建它的一個實例
private lateinit var listener: OnDataRetrieveListener
fun setListener(listener: OnDataRetrieveListener){
this.listener = listener
}
在您的活動中設置監聽器(如果是匿名的,如下所示):
dataRetriever.setListener(object: Retriever.Listener{
override fun onDataLoad(data: String) {
dataTxt.text = dataRetriever.getData()
}
})
在 Retriever 中加載字符串時回調偵聽器:
...
val jsonData = data.getString(1)
listener.onDataLoad(jsonData)
...
然后dataTxt
將更新
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.