我到处寻找,决定在这里写下来。我试图在我的应用程序启动时建立连接。我的问题是我需要将上下文传递给 AsyncTask (或在构造函数中较早创建 ProgressDialog) - 但我也需要上下文。
最重要的事情:我无法将内容从构造函数移动到 onCreate,因为每次我打开应用程序、返回等时,它都会创建一个新的客户端。
问题在于,当构造函数被触发时,我还没有上下文。
有什么想法吗?
已经尝试过这个:StartConnectionTask(this);
但这是同一件事。
发现这个:http://briandolhansky.com/blog/2013/7/11/snippets-android-async-progress 实现了它还是一样。 上下文为空。
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);
}
最佳答案
您需要将代码从 MainActivity()
移至 onCreate
末尾。
在 Android 中,传统上 onCreate
是根据 Activity 生命周期启动 Activity 的方法。
您可以通过传递 this
关于java - 如何获取主类构造函数中的上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33058218/