我需要使用runOnUiThread在UI更新一個TextView,而一個工作線程它得到一些字符串從Web服務中。我在這裏查看了一些其他帖子並試圖實現提供的解決方案,但是當我啓動我的應用程序時,它崩潰了。我不太熟悉這種方法,所以我需要一些方法來解決這個問題。如何正確實現runOnUiThread的Android
04-25 12:19:59.917 4108-4108 /?我/藝術:不遲到啓用-Xcheck:jni(已開啓) 04-25 12:19:59.917 4108-4108 /? W /藝術:用於使用默認X86意外CPU變體:86 12月4日至25日:20:00.147 4108-4108/com.example.gmars.parseltonguev2 W /系統:類加載器引用未知路徑:/data/app/com.example .gmars.parseltonguev2-2/LIB/86 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:無法實例活動ComponentInfo {com.example.gmars.parseltonguev2/com.example.gmars.parseltonguev2.MainActivity}:java.lang.NullPointer例外:嘗試在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 在機器人上的空對象引用 調用虛擬方法「android.view.Window $回調android.view.Window.getCallback()」。在android.app.ActivityThread.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread.-wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) at android.os .Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:154) at 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.support空對象引用 調用虛擬方法android.view.Window $回調android.view.Window.getCallback()'。 v7.app.AppCompatDelegateImplBase。(AppCompatDelegateImplBase.java:120) 在android.support.v7.app.AppCompatDelegateImplV9。(AppCompatDelegateImplV9.java:155) 在android.support.v7.app.AppCompatDelegateImplV11。(AppCompatDelegateImplV11.java:31 ) 在android.support.v7.app.AppCompatDelegateImplV14。(AppCompatDelegateImplV14.java:55) 在android.support.v7.app.AppCompatDelegateImplV23。(AppCompatDelegateImplV23.java:33) 在android.support.v7.app.AppCompatDelegateImplN。( AppCompatDelegateImplN.java:33) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) at android。在com.example.gmars.parseltonguev2.MainActivit上的android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190) y。(MainActivity.java:30) at android.app java.lang.Class.newInstance(Native Method) 。Instrumentation.newActivity(Instrumentation.java:1078) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) at android.app.ActivityThread。 -wrap12(ActivityThread.java) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1460) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6077) at java.lang.reflect.Method.invoke(Native Method) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:865) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
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);
}
});
}
您必須初始化UI變量,例如'TextView tvAvailableQuantity =(TestView)findViewById(id)' – anatoli
您可以編輯您的問題並添加崩潰堆棧跟蹤?可能它與'runOnUiThread()'無關,它會給我們更多的信息。 –
我已經在onCreate方法之前使用其他變量完成了該操作。我只發佈了有關runOnUiThread的代碼片段。謝謝。 –