我創建了一個自定義ArrayAdapter,它顯示一個列表視圖,其中包含圖像,文本和可以通過修改一組全局變量進行更新的數據字段。我可以初始化接口,並驗證通過更改全局變量,我可以更改列表視圖,但只能從OnCreate()中。因此,我嘗試使用notifyDataSetChanged()每200毫秒創建一個線程來更新列表視圖,但我似乎無法啓動線程。試圖呼叫.start();
會創建一個錯誤,指出「方法start()對於MainActivity類型未定義」。任何幫助,將不勝感激。創建一個GUI更新線程
MainActivity
public class MainActivity extends Activity
{
// Sensor Constants
public static String temperature;
public static String humidity;
public static String lpg;
public static String alcohol;
public static int temperature_int;
public static int humidity_int;
public static int lpg_int;
public static int alcohol_int;
// Layout
ListView listView;
ItemAdapter adapter;
// USB
UsbManager USB_Manager;
UsbDevice Sense;
PendingIntent permission;
IntentFilter filter;
//BroadcastReceiver receiver;
//USBBuffer_s_received_data = 0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Initialize Interface
Model.LoadModel();
listView = (ListView) findViewById(R.id.listView);
String[] ids = new String[Model.Items.size()];
for (int i= 0; i < ids.length; i++)
{ids[i] = Integer.toString(i+1);}
ItemAdapter adapter = new ItemAdapter(this,R.layout.row, ids);
listView.setAdapter(adapter);
//USB
if ((UsbManager) getSystemService(Context.USB_SERVICE) != null)
{
USB_Manager = (UsbManager) getSystemService(Context.USB_SERVICE);
if (USB_Manager.getDeviceList().values().iterator().next() != null)
{
Sense = USB_Manager.getDeviceList().values().iterator().next();
if ((UsbDevice) getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE) != null)
{
Sense = (UsbDevice) getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE);
}
}
}
// Update Layout
temperature_int = 30; humidity_int = 6; lpg_int = 5000; alcohol_int = 500;
temperature = String.valueOf(temperature_int);
humidity = String.valueOf(humidity_int);
lpg = String.valueOf(lpg_int);
alcohol = String.valueOf(alcohol_int);
Model.LoadModel();
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
GUI_Update();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void GUI_Update()
{
new Thread(new Runnable()
{
@Override
public void run()
{
while (true)
{
try
{
Thread.sleep(200);
Model.LoadModel();
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
catch (InterruptedException e)
{
}
}
}
});
//.start();
}
編輯 運動。開始的位置()解決了這一問題,但現在的應用程序會立即退出一經推出,我不知道爲什麼。這是錯誤日誌,我得到..
12-20 17:22:11.010: D/libEGL(15395): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-20 17:22:11.010: D/libEGL(15395): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-20 17:22:11.018: D/libEGL(15395): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-20 17:22:11.096: D/OpenGLRenderer(15395): Enabling debug mode 0
12-20 17:22:11.369: W/dalvikvm(15395): threadid=11: thread exiting with uncaught exception (group=0x4198ac68)
12-20 17:22:11.377: E/AndroidRuntime(15395): FATAL EXCEPTION: Thread-711
12-20 17:22:11.377: E/AndroidRuntime(15395): Process: com.byrdonatwigge.sense, PID: 15395
12-20 17:22:11.377: E/AndroidRuntime(15395): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6094)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:857)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4320)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.View.invalidate(View.java:10942)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.View.invalidate(View.java:10897)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.widget.ImageView.invalidateDrawable(ImageView.java:201)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.graphics.drawable.Drawable.invalidateSelf(Drawable.java:344)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.graphics.drawable.Drawable.setVisible(Drawable.java:575)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.widget.ImageView.onDetachedFromWindow(ImageView.java:1243)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.View.dispatchDetachedFromWindow(View.java:12627)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:2585)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:4027)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.widget.AbsListView.resetList(AbsListView.java:1924)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.widget.ListView.resetList(ListView.java:521)
12-20 17:22:11.377: E/AndroidRuntime(15395): at android.widget.ListView.setAdapter(ListView.java:462)
12-20 17:22:11.377: E/AndroidRuntime(15395): at com.byrdonatwigge.sense.MainActivity$2.run(MainActivity.java:445)
12-20 17:22:11.377: E/AndroidRuntime(15395): at java.lang.Thread.run(Thread.java:841)
12-20 17:22:12.127: D/AndroidRuntime(15395): Shutting down VM
12-20 17:22:12.127: W/dalvikvm(15395): threadid=1: thread exiting with uncaught exception (group=0x4198ac68)
12-20 17:22:12.127: I/Process(15395): Sending signal. PID: 15395 SIG: 9
編輯#2 * 更新線程 *
private void GUI_Update()
{
new Thread()
{
public void run()
{
while (true)
{
try
{
runOnUiThread(new Runnable()
{
@Override
public void run()
{
Model.LoadModel();
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
});
Thread.sleep(500);
}
catch (InterruptedException e)
{
}
}
}
}.start();
}
登錄
12-20 18:49:49.741: D/dalvikvm(17054): Late-enabling CheckJNI
12-20 18:49:50.085: D/libEGL(17054): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-20 18:49:50.092: D/libEGL(17054): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-20 18:49:50.100: D/libEGL(17054): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-20 18:49:50.186: D/OpenGLRenderer(17054): Enabling debug mode 0
12-20 18:50:09.405: D/AndroidRuntime(17117): Shutting down VM
12-20 18:50:09.405: W/dalvikvm(17117): threadid=1: thread exiting with uncaught exception (group=0x4198ac68)
12-20 18:50:09.405: E/AndroidRuntime(17117): FATAL EXCEPTION: main
12-20 18:50:09.405: E/AndroidRuntime(17117): Process: com.byrdonatwigge.sense, PID: 17117
12-20 18:50:09.405: E/AndroidRuntime(17117): java.lang.NullPointerException
12-20 18:50:09.405: E/AndroidRuntime(17117): at com.byrdonatwigge.sense.MainActivity$2$1.run(MainActivity.java:449)
12-20 18:50:09.405: E/AndroidRuntime(17117): at android.os.Handler.handleCallback(Handler.java:733)
12-20 18:50:09.405: E/AndroidRuntime(17117): at android.os.Handler.dispatchMessage(Handler.java:95)
12-20 18:50:09.405: E/AndroidRuntime(17117): at android.os.Looper.loop(Looper.java:136)
12-20 18:50:09.405: E/AndroidRuntime(17117): at android.app.ActivityThread.main(ActivityThread.java:5081)
12-20 18:50:09.405: E/AndroidRuntime(17117): at java.lang.reflect.Method.invokeNative(Native Method)
12-20 18:50:09.405: E/AndroidRuntime(17117): at java.lang.reflect.Method.invoke(Method.java:515)
12-20 18:50:09.405: E/AndroidRuntime(17117): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
12-20 18:50:09.405: E/AndroidRuntime(17117): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-20 18:50:09.405: E/AndroidRuntime(17117): at dalvik.system.NativeStart.main(Native Method)
謝謝。你是對的;這只是代碼的粗略草案。但是,現在應用程序在啓動後立即退出,我不知道爲什麼。我已經更新了原始日誌 – Willis
'MainActivity'的第445行是什麼? – codeMagic
445行是:''listView.setAdapter(adapter);'' – Willis