繁体   English   中英

无法在未调用Looper.prepare()android服务的线程内创建处理程序

[英]Can't create handler inside thread that has not called Looper.prepare() android service

嗨,我有一个问题,但我没有解决问题问题定义ination无法在未调用Looper.prepare()的线程内创建处理程序。 我在android中编写了服务,但抛出异常我的Logcat是

 05-24 01:37:37.069 26269-26292/ramazan.com.dovizfiyarlari E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 Process: ramazan.com.dovizfiyarlari, PID: 26269 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:841) Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() at android.os.Handler.<init>(Handler.java:200) at android.os.Handler.<init>(Handler.java:114) at android.app.Activity.<init>(Activity.java:765) at android.support.v4.app.FragmentActivity.<init>(FragmentActivity.java:75) at android.support.v7.app.ActionBarActivity.<init>(ActionBarActivity.java:59) at ramazan.com.dovizfiyarlari.tab1.<init>(tab1.java:43) at ramazan.com.dovizfiyarlari.tab1$Dolar.doInBackground(tab1.java:180) at ramazan.com.dovizfiyarlari.tab1$Dolar.doInBackground(tab1.java:150) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237)            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)            at java.lang.Thread.run(Thread.java:841) 

而我的服务是

  public static class LocalService extends IntentService { public LocalService () { super("MyServerOrWhatever"); } private Timer timer = new Timer(); private Context ctx; public IBinder onBind(Intent arg0) { return null; } @Override protected void onHandleIntent(Intent intent) { } public void onCreate() { super.onCreate(); ctx = this; startService(); } private void startService() { timer.scheduleAtFixedRate(new mainTask(), 0, 500000); } private class mainTask extends TimerTask { private Handler mHandler = new Handler(Looper.getMainLooper()); @Override public void run() { mHandler.post(new Runnable() { @Override public void run() { new Dolar().execute(); } }); } } public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Stopped ...", Toast.LENGTH_SHORT).show(); } private final Handler toastHandler = new Handler() { @Override public void handleMessage(Message msg) { } }; } 

运行代码是

  protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tab1); init(); if(isNetworkAvailable(tab1.this)==true) { startService(new Intent(tab1.this,LocalService.class)); btn_dolar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(getApplicationContext(), Para.class); sonuc = Double.parseDouble(txt_dolar.getText().toString()) * Double.parseDouble(txt_girilecek_dolar.getText().toString()); startActivity(intent); } }); } else { Toast.makeText(getApplicationContext(),"internet baglantınız yoktur",Toast.LENGTH_LONG).show(); } } ---------------------------------------------------- public static class Dolar extends AsyncTask<String,String,String>{ ProgressDialog pd; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onPostExecute(String s) { super.onPostExecute(s); tab1 ta=new tab1(); ta.txt_dolar.setText(ta.kur); ta.txt_altin_gram.setText(altin); ta. txt_ceyrek.setText(ceyrek); } String altin=""; String ceyrek; @Override protected String doInBackground(String... params) { Document document = null; try { document = Jsoup.connect("http://www.reuters.com/finance/currencies/quote?srcAmt=1.00&srcCurr=USD&destAmt=&destCurr=TRY") .userAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/600.1.25 (KHTML, like Gecko) " + "Version/8.0 Safari/600.1.25").get(); } catch (IOException e) { e.printStackTrace(); } tab1 tab=new tab1(); int sayac = 0; Elements sondakika = document.select("div.norm"); for (Element element : sondakika) { if(sayac==0){ tab.kur=element.text(); } sayac=sayac+1; } 

我能做什么 ? 你能帮我吗...

最好的祝愿

似乎您正在后台线程中使用AsyncTask 您不能从后台线程执行AsyncTask 由于您已经在后台线程中,因此不需要AsyncTask 只需直接执行代码即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM