用户名对话框和异步任务

时间:2016-12-19 21:44:44

标签: android

让我们考虑一下:

  1. 我的应用程序将显示一个文本对话框(用户应该输入他/她的名字)。用户名将被发送到服务器以检查它是否是唯一的。它使用AsyncTask与服务器通信。

  2. 我有两条路:

    一个。服务器的响应正常(用户名是唯一的),因此用户界面对话框消失了。这很容易。

    B中。第二种情况是用户名不是唯一的。我希望我的用户名对话框仍然显示在屏幕上。之前输入的所有信息也应保留。所以,我不能只创建一个新的对话框!

  3. 我不是Android专家,所以我的想法来自我的一般经验,因此我的态度可能不太好。

    1. 第一:
    2. 只是不要忽略用户名对话框。如果用户名是唯一的,请致电dismiss中的onPostExecute。我认为我必须将对话框实例传递给我的异步任务。我认为国家(我之前说过的信息)不会被破坏。

      1. 第二
      2. 失败后重新绘制用户名对话框(在onPostExecute中)。这似乎是一个糟糕的解决方案,因为我有两种不同的方法显示用户名对话框。

        您怎么看?

1 个答案:

答案 0 :(得分:0)

我最近用android中的对话框做了类似的事情。在我的情况下,我正在检查登录是否正确,如果登录正确,则对话框已关闭,否则对话框保持打开状态并显示错误消息。

这听起来你想要实现的目标并不难做到!听起来您假设您的AsyncTask不会受到对话活动的控制,但它只能放在对话框片段中。

对话(cutoms)不会自行解散,你必须告诉它什么时候解雇(除非用户点击外面或按下)。

点击此处开始使用:https://developer.android.com/guide/topics/ui/dialogs.html

在标题下方查看:创建自定义布局

修改

以下是请求的示例,您可以看到AsyncTask与Dialog片段在同一个类中执行。

public Dialog onCreateDialog(final Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    // Get the layout inflater
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.login_dialog, null);

    et_username = (EditText) view.findViewById(R.id.et_username);
    btn_login = (Button) view.findViewById(R.id.btn_login);

    btn_login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            new login().execute(et_username.getText().toString());
        }
    });

    builder.setView(view);
    return builder.create();
}

private class login extends AsyncTask<String, Integer, JSONObject> {
    @Override
    protected JSONObject doInBackground(String... params) {
        DAO dao = new DAO();
        return dao.login(params[0);
    }

    @Override
    protected void onPostExecute(JSONObject result) {
        try{
            if(result != null){
                //Do something with my result
            }
        } catch (JSONException je) {
            System.out.println("A JSON exception occurred!");
        }
    }
}