我在我的程序中使用 AsyncTask 进行多线程处理,方法是在 10 秒后调用一个方法,但有这个异常:
08-04 11:49:29.565: E/log_tag(885): Error converting result java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
请帮帮我!!
编辑:这是 AsyncTask 的代码:
class Getphonenumber extends AsyncTask<String, Void, Void> {
public Void doInBackground(String... p) {
while (true) {
getPhno();
try {
Thread.sleep(10000);
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
}
};
'getPhno()' 方法:
public void getPhno()
{
try{
HttpClient httpclient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000); //Timeout Limit
List<NameValuePair> username = new ArrayList<NameValuePair>();
username.add(new BasicNameValuePair("username", user));
//Web Address
HttpPost httppost = new HttpPost("http://www.starretailshop.com/Log/Retrieve.php");
httppost.setEntity(new UrlEncodedFormEntity(username));
HttpResponse response = httpclient.execute(httppost);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost,
responseHandler);
Log.i("retrieve postData", response.getStatusLine().toString());
InputStream content = response.getEntity().getContent();
BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
sendMsg(s,msg);
}
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
}
'sendMsg' 方法:
private void sendMsg(String phoneNumber, String message)
{
try{
String phoneNumber1 = null;
if(phoneNumber.startsWith("+"))
{
phoneNumber1 = phoneNumber.substring(3);
}
else if(phoneNumber.startsWith("0"))
{
phoneNumber1 = phoneNumber.substring(1);
}
else
{
phoneNumber1=phoneNumber;
}
PendingIntent pi = PendingIntent.getActivity(this, 0,
new Intent(), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber1, null, message, pi, null);
Toast.makeText(this,"Msg sent to:" + phoneNumber1, Toast.LENGTH_LONG).show();
phnoList.add(phoneNumber);
phnoListd.add(phoneNumber1);
//phnumber = phoneNumber;
//================Update Database=====================
try{
HttpClient httpclient = new DefaultHttpClient();
HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000); //Timeout Limit
List<NameValuePair> updatemsg = new ArrayList<NameValuePair>();
updatemsg.add(new BasicNameValuePair("outmsg1", message));
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("HH:m:ss dd-MM-yyyy");
String TimeStampDB = sdf.format(cal.getTime());
updatemsg.add(new BasicNameValuePair("currentdatetime1",TimeStampDB));
updatemsg.add(new BasicNameValuePair("mobileno",phoneNumber));
//Web Address
HttpPost httppost = new HttpPost("http://www.starretailshop.com/Log/Update1.php");
httppost.setEntity(new UrlEncodedFormEntity(updatemsg));
HttpResponse response = httpclient.execute(httppost);
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = httpclient.execute(httppost,
responseHandler);
Log.i("update1 postData", response.getStatusLine().toString());
}catch(Exception e){
Log.e("log_tag", "Error converting result "+e.toString());
}
//================================================
}catch(Exception e)
{
e.printStackTrace();
Toast.makeText(this,"Error occured", Toast.LENGTH_LONG).show();
}
}
最后,我调用new Getphonenumber().execute();
了一个按钮的 onClickListener。