我试图在线程内部调用setListAdapter来显示列表。我知道我无法从UI线程外部访问Android UI,因此我使用runOnUiThread,但我仍然得到异常:无法在未调用Looper.prepare的线程内创建处理程序()。任何人都可以告诉我为什么以及如何解决它?谢谢!
这是我的代码:
public void checkLoginInformation(View view)
{ client_th = new Thread( new Runnable()
{
public void run()
{
try
{
cs = new Socket("192.168.0.101",2014);
final DataOutputStream os = new DataOutputStream(cs.getOutputStream());
final DataInputStream is = new DataInputStream(cs.getInputStream());
String msg = is.readUTF();
if(msg.equals("logat"))
{
final ShowList l = new ShowList();
runOnUiThread(new Runnable() {
@Override
public void run()
{
l.show();
}
});
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
client_th.start();
}
ShowList类:
public class ShowList extends ListActivity
{
private final String [] online_drivers = {"one","two","three"};
private final Context context = this;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.online_window);
}
public void show()
{
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
online_drivers));
}
}
我得到的例外:
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at android.os.Handler.<init>(Handler.java:200)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at android.os.Handler.<init>(Handler.java:114)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at android.app.Activity.<init>(Activity.java:765)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at android.app.ListActivity.<init>(ListActivity.java:175)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at com.example.irinab.licenta2.ShowList.<init>(ShowList.java:14)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at com.example.irinab.licenta2.MainActivity$1.run(MainActivity.java:120)
03-12 08:22:03.096 1895-1914/com.example.irinab.licenta2 W/System.err﹕ at java.lang.Thread.run(Thread.java:841)
答案 0 :(得分:0)
下面:
final ShowList l = new ShowList();
创建ShowList
Activity的对象,通过调用show
方法显示ListView。
使用startActivity
启动ShowList
活动:
intent = new Intent(view.getContext(),
ShowList.class);
view.getContext().startActivity(intent);
答案 1 :(得分:0)
这个final ShowList l = new ShowList();
不是你应该如何开始一个新的活动。
要开始ShowList
活动,请执行以下操作:
Intent startShowListIntent = new Intent(MainActivity.this, ShowList.class);
startActivity(startShowListIntent);
在上面的代码段中,我假设您当前活动的名称为MainActivity
。