作者ivanf10710 (Ivan)
看板AndroidDev
标题[问题] 在Dialog里面呼叫有使用thread的method
时间Fri Sep 7 14:11:00 2012
我有一个class A extends Activity,里面有一个method是用来做HttpGet的
该method有用到thread,大致上像这样
public void httpGet(String url) {
new Thread() {
public void run() {
client = new DefaultHttpClient();
request = new HttpGet(url);
response = client.execute(request);
reader = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent()));
builder = new StringBuilder();
for (String s = reader.readLine(); s != null; s = reader.readLine()) {
builder.append(s);
}
if (builder != null) {
/* Transfer to JSONArray */
jsonTransfer = new JSONObject(builder.toString());
systemConfigJSONArray = jsonTransfer.getJSONArray("config");
runOnUiThread(performResult);
}
}.start();
}
private Runnable performResult = new Runnable() {
public void run() {
closeProgressDialog();
performResult(systemConfigJSONArray);
}
};
/** Connect complete, interface for Override **/
public void performResult(JSONArray resultArray) {
}
这样写其他有继承class A的Activity就可以透传入网址到httpGet(String url)
取得JSON格式的Array,再透过覆写public void performResult(JSONArray resultArray)
进行各自需要转换的东西
现在我有一个 Activity B extends A
B里头有一个AlertDialog,其中使用setView(View v)的方法嵌入一个含有Spinner的View
Spinner提供几个url网址可供选择
在选择完成以後并按下AlertDialog的PositiveButton时
该PositiveButton透过DialogInterface.OnclickListener
将使用者选的网址丢给httpGet(String url)执行
可是执行时却出现
AlertDialog(AlertController$ButtonHandler).handleMessage(Message)
的错误,并且不会去执行httpGet(String url)但是不会crash
接着我去尝试使用Message丢给Handler
Handler urlHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
httpGet("
http://...");
break;
case 2:
httpGet("http"//...");
break;
}
super.handleMessage(msg);
}
};
结果还是出现
AlertDialog(AlertController$ButtonHandler).handleMessage(Message)
请问我该怎麽改才能让AlertDialog呼叫含有Thread的method?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.34.138.203
1F:推 sdyy:看起来不像是呼叫thread的问题 不过线索不足 不敢确定 09/09 17:22
2F:推 h124224:有点乱 看不太懂你要做什麽 09/11 19:00
3F:→ h124224:不过alertdialog就会把目前的activity pause了 09/11 19:01
4F:→ h124224:你应该要想办法把method写在alertdialog里面 09/11 19:02