我需要使用runOnUiThread来更新UI中的TextView,同时在从WebService获取一些字符串的工作线程中更新TextView。我看了一些其他的帖子,并试图实现提供的解决方案,但当我启动我的应用程序,它崩溃。我不太熟悉这个方法,所以我需要一些方向,如何解决这个问题。
Activity updateUI;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
updateUI = this;
itemList = new ArrayList<>();
new GetItemAvailability().execute();
}
@Override
public Void doInBackground(Void... arg0) {
HttpHandler handler = new HttpHandler();
String JSON_DATA = handler.makeServiceCall(url);
Log.e(TAG, "Response from url: " + JSON_DATA);
if (JSON_DATA != null) {
JSON_DATA = JSON_DATA.substring(JSON_DATA.indexOf('{'),JSON_DATA.lastIndexOf('}')+1);
Log.e(TAG, "Substring of response: " + JSON_DATA);
try {
JSONObject reader = new JSONObject(JSON_DATA);
JSONObject availability = reader.getJSONObject("availability");
final String availableQuantity = availability.getString("availableQuantity");
final String defaultBranch = availability.getString("defaultBranch");
final String defaultInventoryBranch = availability.getString("defaultInventoryBranch");
final String inventoryBranch = availability.getString("inventoryBranch");
final String footage = availability.getString("footage");
final String anticipatedStockDate = availability.getString("anticipatedStockDate");
final String discontinuedItemFlag = availability.getString("discontinuedItemFlag");
final String mdc = availability.getString("mdc");
final String mdcquantity = availability.getString("mdcquantity");
HashMap<String, String> item = new HashMap<>();
item.put("availableQuantity", availableQuantity);
item.put("defaultBranch", defaultBranch);
item.put("defaultInventoryBranch", defaultInventoryBranch);
item.put("inventoryBranch", inventoryBranch);
item.put("footage", footage);
item.put("anticipatedStockDate", anticipatedStockDate);
item.put("discontinuedItemFlag", discontinuedItemFlag);
item.put("mdc", mdc);
item.put("mdcquantity", mdcquantity);
itemList.add(item);
updateUI.runOnUiThread(new Runnable() {
@Override
public void run() {
tvAvailableQuantity.setText(availableQuantity);
tvDefaultBranch.setText(defaultBranch);
tvDefaultInventoryBranch.setText(defaultInventoryBranch);
tvInventoryBranch.setText(inventoryBranch);
tvFootage.setText(footage);
tvAnticipatedStockDate.setText(anticipatedStockDate);
tvDiscontinuedItemFlag.setText(discontinuedItemFlag);
tvMdc.setText(mdc);
tvMdcquantity.setText(mdcquantity);
}
});
}
您对runOnUiThread()的实现是正确的。您向它传递一个在UI线程上运行的runnable。
但是,在您的情况下,如果将AsyncTask的结果类型更改为String,我认为这甚至没有必要,您可以简单地从doInBackground()
方法返回json_data
并将其余代码移到onPostExecute()
中,该代码无论如何都运行在UI线程上。
我有一个android应用程序,我正在尝试在其中实现linkedIn登录。LinkedIn SDK已经成功集成,我正在获取用户信息以及电子邮件地址。 以下是我的应用程序在谷歌登录时的工作方式: 1)在手机上获取访问令牌 2)发送带有访问令牌的电子邮件地址到服务器 3) 用我通过谷歌的webapi收到的访问令牌获取用户的详细信息。 4) 如果回复电子邮件与从移动设备接收的电子邮件匹配,则检查该电子邮
问题内容: 我上课很难。麻烦的是,我正在尝试将包裹中的一个成员写入对象,这是一个对象。的是,和对象()在列表中的。 以下是相关代码: 我在“ //帮助这里”标记了两个点,以了解如何正确地写包裹以及如何对其进行重建。如果经过(正确测试),我该如何正确执行? 问题答案: 你差点知道了! 您只需要做: 就这样! 对于您的Integer列表,您还可以执行以下操作: 它应该工作。
我正在寻找关于如何以及何时实现dispose模式的建议。 我已经阅读了MSDN关于如何实现dispose()模式的文章。说得通。我在我的类中实现了它,但它似乎对内存使用没有什么影响。 有点背景,我正在建立一个2D自顶向下的游戏引擎。我有一个名为Gatherer的单元,它继承自Actor(一个用于绘制sprite和跟踪viewplane的基本类),它们是一些简单的sprite。它们在5轮比赛后消失。
我有一个Money类,它带有用于数值和字符串值的工厂方法。我想使用它作为我的输入POJO的属性。 我为它创建了一些转换器,这是字符串: 我有一个需要POJO的endpoint: 最后,这是请求体: 尝试此请求时出现以下错误: 我是不是漏掉了什么? 编辑:正如所问的,下面是金钱类:
我读到过,在中包含异步是async/await的反模式。下面的代码可以工作,但是我想知道如果没有中的,如何实现相同的结果。 谢了。
问题内容: 我正在努力在程序中实现一个对话框。主程序不使用阶段。但是,当用户的生存时间为0时,我想弹出一个对话框,以重新启动游戏或退出游戏。 我使用以下代码为对话框创建了一个单独的类。 游戏主屏幕不使用舞台。在更新方法中,如果肝脏为0,则创建GameOver类 在render方法中,我绘制了舞台 第一次创建对话框时,这可以完美地工作。当点击重新启动时,游戏将重新启动(或实际上重置比分并生效)。但是