Android AlertDialog设置EditText以及使用OkHttp post方式上传Json数据

邹嘉石
2023-12-01

关于涉及到AlertDialog设置一个EditText,并使用OkHttp上传数据,直接见下面代码,我注释写得比较细致了,欢迎留言交流:

                        // 首先添加一个Edit实例,然后通过Alertdialog显示提示用户
                        final EditText editText_limit = new EditText(MainActivity.this);

                        // 这里使用设置hint,提示用户
                        editText_limit.setHint("功率(W)设置范围:100~2000");

                        // 实例化一个Alertdialog
                        AlertDialog.Builder alertDialog_limit = new AlertDialog.Builder(MainActivity.this);
                        alertDialog_limit.setTitle("修改设备功率");
                        alertDialog_limit.setView(editText_limit);
                        alertDialog_limit.setCancelable(false);

                        // 设置取消按钮(摆在最右边)
                        alertDialog_limit.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                // 无操作,空白
                            }
                        });


                        // 设置确定按钮
                        alertDialog_limit.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {

                                // 这里将文本框中的字符串转换成了我想要的FLoat类型
                                Float status_limit = Float.parseFloat(editText_limit.getText().toString());

                                OkHttpClient okHttpClient_limit = new OkHttpClient();

                                // 创建数据对象,这里的DataGson是我自己写的数据对象类
                                DataGson postData_limit = new DataGson();

                                // 设置status = 3,表示修改功率请求
                                postData_limit.setStatus(3);

                                // 设置新功率
                                postData_limit.setPower(status_limit);

                  

                                // 下面就将使用Gson上传数据(重点)
                                Gson gson_limit = new Gson();

                                // 使用Gson将数据对象转换为json字符串
                                String jsonData_limit = gson_limit.toJson(postData_limit);

                                // MediaType  设置Content-Type 标头中包含的媒体类型值
                                RequestBody requestBody_limit = FormBody.create(MediaType.parse("application/json; charset=utf-8"), jsonData_limit);

                                // 构建网络请求对象
                                Request request_limit = new Request.Builder()
                                        .url("填你自己的url")
                                        .post(requestBody_limit)
                                        .build();

                                okHttpClient_limit.newCall(request_limit).enqueue(new Callback() {
                                    @Override
                                    public void onFailure(Call call, IOException e) {
                                     // 要想在子线程中弹出Toast,需要为子线程开启一个消息循环
                                        Looper.prepare();
                                        // 这里我使用了FancyToast,当作Toast处理
                                        FancyToast.makeText(MainActivity.this, "与服务器失去连接......请求失败!", FancyToast.LENGTH_LONG, FancyToast.ERROR, true).show();
                                        Looper.loop();
                                    }

                                    // 打印服务器返回的信息
                                    @Override
                                    public void onResponse(Call call, Response response) throws IOException {
                                        Looper.prepare();
                                        FancyToast.makeText(MainActivity.this, response.body().string(), FancyToast.LENGTH_LONG, FancyToast.INFO, true).show();
                                        Looper.loop();
                                    }
                                });
                            }
                        });

                        // 显示对话框
                        alertDialog_limit.show();

文本框没有设置字体什么的,效果有点丑,可以自己设置一下

 类似资料: