如何正确实施runOnUiThread Android
我需要使用runOnUiThread来更新UI中的文本视图,而工作线程从Web服务获取一些字符串。我在这里看过一些其他帖子,并试图实现提供的解决方案,但当我启动我的应用程序时,它崩溃了。我不太熟悉这个方法,所以我需要一些关于如何解决这个问题的指导 04-25 12:19:59.917 4108-4108/?I/art:未延迟启用-Xcheck:jni(已启用) 04-25 12:19:59.917 4108-4108/? W/art:X86的意外CPU变量使用默认值:X86 04-25 12:20:00.147 4108-4108/com.example.gmars.parseltonguev2 W/System:ClassLoader引用的未知路径:/data/app/com.example.gmars.parseltonguev2-2/lib/x86 04-25 12:20:00.154 4108-4108/com.example.gmars.parseltonguev2 I/InstantRun:启动即时运行服务器:是主进程 04-25 12:20:00.218 4108-4108/com.example.gmars.parseltonguev2 D/AndroidRuntime:关闭虚拟机 04-25 12:20:00.218 4108-4108/com.example.gmars.parseltonguev2 E/AndroidRuntime:致命异常:main 进程:com.example.gmars.parseltonguev2,PID:4108 java.lang.RuntimeException:无法实例化activity ComponentInfo{com.example.gmars.parseltonguev2/com.example.gmars.parseltonguev2.MainActivity}:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.Window$Callback android.view.Window.getCallback()” 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 位于android.app.ActivityThread.-wrap12(ActivityThread.java) 在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)上 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:154) 位于android.app.ActivityThread.main(ActivityThread.java:6077) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)上 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 原因:java.lang.NullPointerException:尝试对空对象引用调用虚拟方法“android.view.Window$Callback android.view.Window.getCallback()” 位于android.support.v7.app.AppCompateDelegateImplbase。(appCompateDelegateImplbase.java:120) 在android.support.v7.app.AppCompateDelegateImplv9。(AppCompateDelegateImplv9.java:155) 位于android.support.v7.app.AppCompateDelegateImplv11。(AppCompateDelegateImplv11.java:31) 在android.support.v7.app.AppCompateDelegateImplv14。(AppCompateDelegateImplv14.java:55) 在android.support.v7.app.AppCompateDelegateImplv23。(appCompateDelegateImplv23.java:33) 在android.support.v7.app.AppCompateDelegateImpln。(appCompateDelegateImpln.java:33) 在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201)中 在android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)上 位于android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) 位于android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) 位于com.example.gmars.parseltonguev2.MainActivity。(MainActivity.java:30) 位于java.lang.Class.newInstance(本机方法) 位于android.app.Instrumentation.newActivity(Instrumentation.java:1078) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) 位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 位于android.app.ActivityThread.-wrap12(ActivityThread.java)如何正确实施runOnUiThread Android,android,textview,android-runonuithread,Android,Textview,Android Runonuithread,我需要使用runOnUiThread来更新UI中的文本视图,而工作线程从Web服务获取一些字符串。我在这里看过一些其他帖子,并试图实现提供的解决方案,但当我启动我的应用程序时,它崩溃了。我不太熟悉这个方法,所以我需要一些关于如何解决这个问题的指导 04-25 12:19:59.917 4108-4108/?I/art:未延迟启用-Xcheck:jni(已启用) 04-25 12:19:59.917 4108-4108/? W/art:X86的意外CPU变量使用默认值:X86 04-25 12:2
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);
}
});
}