2016-12-25 3 views
0

Я создал три класса, а именно Mainactivity, передающий контекст в класс сервера, охватывающий Asynctask. Там один класс назвал параметр, который вызывает класс сервера для обновления данных на сервере.Диалог прогресса в Async Задача

Код на Mainactivity для передачи контекста:

Server.setActivityContext(getApplicationContext()); 

Код для Sever Класс:

public class Server extends AsyncTask<Void, Void, Void> { 


static Context mycontext; 

public static void setActivityContext(Context receivingcontext) { 
    mycontext = receivingcontext; 
} 

Dialog dialog; 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    dialog = ProgressDialog.show(mycontext, "Updating ..", "Please wait......"); 
} 

@Override 
protected Void doInBackground(Void... params) { 
//Background task  
     return null; 

} 

@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    dialog.dismiss(); 
} 
} 

Я получаю сообщение об ошибке на progressdialog при вызове этого класса сервера. Хотя контекст передается, любые исправления, которые вы можете предложить.

Ошибка:

FATAL EXCEPTION: main 

    Process: jss.smartapp, PID: 22915 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 
+0

разместим вашей ошибки logcat – rafsanahmad007

+0

в методе setActivityContext (MainActivity.this) передать это как контекст – rafsanahmad007

+0

Server.setActivityContext (MainActivity.this); // передать контекст вашей деятельности вам нужно передать контекст активности вместо контекста приложения. –

ответ

0

Не использовать статические методы. Используйте правильный конструктор.

public class ServerTask extends AsyncTask<Void, Void, Void> { 

    private Context mycontext; 

    public ServerTask(Context c) { 
     this.mycontext = c; 
    } 

Вызов его с

new ServerTask(MainActivity.this).execute(); 
0

У вас есть метод setActivityContext и отправить обратно контекст деятельности, а не контекст приложения

0

Вы можете создать конструктор для передачи контекста, как этого

public class Server extends AsyncTask<Void, Void, Void> { 

private static final String TAG = "Server"; 
private Context mContext; 

public Server(Context context){ 
    mContext = context; 
} 



Dialog dialog; 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    Log.d(TAG, "onPreExecute:called "); 
    dialog = ProgressDialog.show(mContext, "Updating ..", "Please 
    wait......"); 
} 

     @Override 
     protected Void doInBackground(Void... params) { 
     //Background task 
     Log.d(TAG, "doInBackground: called"); 
     return null; 

     } 

    @Override 
    protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    Log.d(TAG, "onPostExecute: called"); 
    dialog.dismiss(); 
    } 
} 

и называют этот класс сервера, как этого

new Server(MainActivity.class).execute(); 
Смежные вопросы