Я искал везде, и я решил написать здесь. Я пытаюсь получить соединение, когда начнется мое приложение. Моя проблема в том, что мне нужно передать контекст в AsyncTask (или создать ProgressDialog ранее в конструкторе), но мне также нужен контекст.Как получить контекст в конструкторе основного класса?
Самое главное: я не могу переместить вещи из конструктора OnCreate, потому что это сделает новый клиент каждый раз, когда я открываю приложение, вернитесь и т.д.
Проблема заключается в том, что, когда конструктор У меня пока нет контекста.
Любые идеи?
Уже пробовал с этим: StartConnectionTask(this);
, но это то же самое.
Обнаружили это: http://briandolhansky.com/blog/2013/7/11/snippets-android-async-progress внедрил его и все тот же. Контекст - null.
public class MainActivity extends AppCompatActivity {
public Client client;
public Button loginButton;
public static String host = "192.168.1.2";
public static int tcp_port = 8888, udp_port = 8889;
@Override
protected void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.menu_layout);
}
public MainActivity(){
client = new Client();
client.start();
Network.register(client);
StartConnectionTask s = new StartConnectionTask(MainActivity.this);
s.execute();
}
public class StartConnectionTask extends AsyncTask<Void, Void, Boolean> {
private ProgressDialog conDialog;
public StartConnectionTask(MainActivity activity) {
conDialog = new ProgressDialog(activity);
}
@Override
protected void onPreExecute() {
conDialog.setTitle("Connecting with a server...");
conDialog.setMessage("Connecting with " + host);
conDialog.show();
conDialog.setCancelable(false);
}
Когда приложение закрыто, конструктор будет вызван снова в любом случае, так что клиент будет воссоздан. Переместите его в onCreate. И если вы хотите использовать одного и того же клиента в своем приложении, то расширьте класс Application и разместите его там – Sourabh
Oh. Не могли бы вы объяснить, что вы подразумеваете под расширением класса Application? Я застрял с двух дней, пытался с Singletons, SharedPreferences, все ... – Jakub