私はいくつかの仕事をしており、最後に私のasynctask(その名前は背景です)を実行するサービスを持っています。 asyncTaskでは、onPostExecute()でalertDialogを表示します。 私のアプリケーションをデバッグするとき、私のasyncTaskを実行する行で私のサービスでエラーが発生します。このライン:サービスから呼び出されたasyncTaskのalertDialogを表示する際にエラーが発生しましたか?
backGround=new BackGround(context); backGround.execute(String.valueOf(send_json))
私は、エラーが原因で、私はasyncTaskに送信コンテキストのaccuresことを知っています。 私はgetApplicationContext()を適用します。 & getBaseContext(); &もサービスのコンテキストです。エラーは消滅しません。 このコードをmainActivityのコンテキストに適用し、エラーは発生しないので、このエラーは、サービスからasyncTaskのコンストラクタに送信するコンテキストが原因であると確信しています。
どうすればいいですか? 私は助けていただきありがとうございます。
編集:これはエラーです。
public class BackGround extends AsyncTask < String , Void , String > {
Context context;
AlertDialog alertDialog;
public BackGround(Context context){
this.context=context;
}
@Override
protected String doInBackground(String... params){
String location_url ="http://192.168.1.90/server_connection.php";
try{
URL url1=new URL(location_url);
HttpURLConnection httpURLConnection = (HttpURLConnection)url1.openConnection();
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
OutputStream stream_upload=httpURLConnection.getOutputStream();
BufferedWriter buffer_writer=new BufferedWriter(new OutputStreamWriter(stream_upload,"UTF-8"));
// String PostData= URLEncoder.encode()
buffer_writer.write(String.valueOf(params));
buffer_writer.flush();
buffer_writer.close();
stream_upload.close();
InputStream stream_dawnload=httpURLConnection.getInputStream();
BufferedReader bufferreader=new BufferedReader(new InputStreamReader(stream_dawnload,"iso-8859-1"));
String result="";
String line;
while ((line = bufferreader.readLine()) != null) {
result += line;}
bufferreader.close();
stream_upload.flush();
stream_dawnload.close();
httpURLConnection.disconnect();
return result;
}catch (Exception e){
e.printStackTrace();
}
return null;
}これが私のサービスのコードである
@Override
protected void onPreExecute() {
alertDialog = new AlertDialog.Builder(context).create();
alertDialog.setTitle("Login status");
}
@Override
protected void onPostExecute(String result) {
alertDialog.setMessage(result);
alertDialog.show();
}
:
09-08 18:39:35.253 20251-20813/ir.blog.trafik E/AndroidRuntime: FATAL EXCEPTION: Timer-0
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:197)
at android.os.Handler.<init>(Handler.java:111)
at android.app.Dialog.<init>(Dialog.java:111)
at android.app.AlertDialog.<init>(AlertDialog.java:114)
at android.app.AlertDialog$Builder.create(AlertDialog.java:931)
at ir.blog.trafik.BackGround.onPreExecute(BackGround.java:88)
at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
at android.os.AsyncTask.execute(AsyncTask.java:534)
at ir.blog.trafik.locationService.json_maker(locationService.java:538)
at ir.blog.trafik.locationService$1.run(locationService.java:588)
at java.util.Timer$TimerImpl.run(Timer.java:284)
この
は私のasyncTaskクラスですpublic class locationService extends Service{Context context;BackGround backGround ;
@Override
public void onCreate() {
context =this;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(context,"service started",Toast.LENGTH_LONG).show();
doSomeThingRepeatedly(context);
return Service.START_FLAG_REDELIVERY;
}
、これは私のdoSomeThingReapetedly()メソッドであります私はonStartcommanでそれを呼んだD()
private void doSomeThingRepeatedly(final Context context) {
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
......
backGround=new BackGround(context);
backGround.execute(String.valueOf(send_json));
}
}, 0, UPDATE_INTERVAL);
) "Pravin Divraniyaの" 溶液を添加した後、それが正常に動作しますが、エラーが(onPostExecuteのデバッグの後asyncTaskに発生し、doInBackground(にintering)、そのエラーは次のとおりです。
FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
at android.view.ViewRootImpl.setView(ViewRootImpl.java:804)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73)
at android.app.Dialog.show(Dialog.java:287)
at ir.blog.trafik.BackGround.onPostExecute(BackGround.java:103)
at ir.blog.trafik.BackGround.onPostExecute(BackGround.java:22)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5493)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1225)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1041)
at dalvik.system.NativeStart.main(Native Method)
エラーメッセージを投稿できますか? – thunder413
あなたのコードを投稿してください。 –
@ thunder413私は編集し、私はエラーマッサージを追加しました。 –