如何解决错误:无法在 Android Java 的后台线程上调用 setValue
此问题不包括 Livedata。我已经通读了几个问题,但没有找到我的问题的答案,下面的文件给出了错误。从后台线程调用simulatedUpdate()。问题在于在simulatedUpdate() 中调用的receiveLocationUpdate() 方法。我假设传递的参数以某种方式调用 set... 方法。我需要知道为什么会发生这种情况,以及在当前情况下如何调用此方法。
public class LogDataSimulation {
SharedPreferences defaultPreferences = PreferenceManager.getDefaultSharedPreferences(MyApplication.getAppContext());
private static final String TAG = "LogDataSimulation";
public static boolean simulatedDataEnabled;
WMManager wmManager = new WMManager();
public LogDataSimulation() {
simulatedDataEnabled = defaultPreferences.getBoolean(kSimulationMode,false);
}
public synchronized void simulatedUpdate() {
InputStream logFileStream = null;
try {
AssetManager assetManager = MyApplication.getAppContext().getAssets();
logFileStream = assetManager.open("file.csv");
InputStreamReader streamReader = new InputStreamReader(logFileStream,Charset.defaultCharset());
CSVReader reader = new CSVReader(streamReader);
String[] nextLine;
double headingAccuracy = 0.0;
double strideAccuracy = 0.0;
double currentStepLength = 0.0;
int totalStepCount = 0;
double cumulativedistance = 0.0;
double latitude = 0.0;
double longitude = 0.0;
double altitude = 0.0;
double userheading = 0.0;
Location globalLocation = new Location("");
int floorID = 0;
double stepBias = 0.0;
double stepBiasAccuracy = 0.0;
double orientationBias = 0.0;
double orientationBiasAccuracy = 0.0;
TestUpdate update = new TestUpdate();
boolean header = true;
while ((nextLine = reader.readNext()) != null) {
if (nextLine[2].equalsIgnoreCase("data")) {
//Throw the header.
if (header) {
header = false;
continue;
}
headingAccuracy = Double.valueOf(nextLine[17]);
strideAccuracy = Double.valueOf(nextLine[22]);
currentStepLength = Double.valueOf(nextLine[24]);
totalStepCount = Integer.valueOf(nextLine[25]);
cumulativedistance = Double.valueOf(nextLine[26]);
latitude = Double.valueOf(nextLine[30]);
longitude = Double.valueOf(nextLine[31]);
altitude = Double.valueOf(nextLine[32]);
userheading = Double.valueOf(nextLine[36]);
globalLocation = update.globalParticlesLocation();
floorID = 10000;
stepBias = Double.valueOf(nextLine[39]);
stepBiasAccuracy = Double.valueOf(nextLine[41]);
orientationBias = Double.valueOf(nextLine[43]);
orientationBiasAccuracy = Double.valueOf(nextLine[46]);
Thread.sleep(1000);
}
wmManager.receivedUpdate(longitude,latitude,altitude,totalStepCount,cumulativedistance,currentStepLength,strideAccuracy,userheading,headingAccuracy,floorID,globalLocation,stepBias,stepBiasAccuracy,orientationBias,orientationBiasAccuracy);
}
} catch (Exception e) {
e.printstacktrace();
}
}
}
记录的错误是: 我得到一个 W/System.err: at com.app.navigationSimulation.LogDataSimulation.simulatedUpdate(LogDataSimulation.java:95) 第 95 行是对 wmManager.receivedUpdate() 的调用和异常消息:无法在后台线程上调用 setValue
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。