当前位置: 首页 > 知识库问答 >
问题:

Android中Post Request Spring Boot Rest服务的I/O错误

鲁华灿
2023-03-14

>

  • 我正在做一个小的android应用程序。因为我使用Http Rest调用将用户输入的信息存储到本地数据库
  • 服务没有问题,工作正常,我在浏览器和邮递员中测试过,我可以通过邮递员客户端执行CRUD操作。
  • 但当我尝试发布或从Android获取时,它会抛出错误,如POST方法连接拒绝时的I/O错误。
  • 我不知道这是什么原因。
  • 下面是我在Android中的代码。
  • 此代码用于GET请求。

    public class Result extends appcompattivity{String id;Login Login=new Login();final String url=“http://192.168.1.189:9001/Login”;//List Login=new arraylist<>();Button注销;TextView nameTv,ageTv,emailTv,usernametv;String NAME,AGE,EMAIL,username;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_result);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
       // Intent intent=getIntent();
       // ID=intent.getStringExtra("ID");
        // new HttpGetTask().execute();
    
        logout = (Button) findViewById(R.id.buttonLogout);
        nameTv = (TextView) findViewById(R.id.nameTextView);
        ageTv = (TextView) findViewById(R.id.ageTextView);
        emailTv = (TextView) findViewById(R.id.emailTextView);
        usernameTv = (TextView) findViewById(R.id.UsernameTextView);
        nameTv.setText(NAME);
        ageTv.setText(AGE);
        emailTv.setText(EMAIL);
        usernameTv.setText(USERNAME);
        new HttpRequestTask().execute();
    
    
        logout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent logoutintent = new Intent(Result.this, MainActivity.class);
                startActivity(logoutintent);
            }
        });
    
    
    }
    
    private class HttpRequestTask extends AsyncTask<Void, Void, Login> {
    
    
        @Override
        protected Login doInBackground(Void... params) {
            try {
    
    
                //  final String url = "http://192.168.1.213:9001/consumer/local/64";
    
                RestTemplate restTemplate = new RestTemplate();
                Login lg = restTemplate.getForObject(url, Login.class);
               // NAME=lg.getName().toString();
                Log.d("", "doInBackground:++++++++++++++++++++++ "+NAME);
                return lg;
    
            } catch (Exception e) {
                Log.e("MainActivity", e.getMessage(), e);
    
            }
            return null;
        }
    

    >

  • 下面的代码用于POST请求。

    public class Register extends AppCompatActivity{Button buttonregister;public String id;TextView editId,editName,editAge,editEmail,editUsername,editpassword;private String Name,Age,Email,Username,editpassword;Login Login=new Login();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        editId=(TextView)findViewById(R.id.editId);
    
        editName=(TextView)findViewById(R.id.editName);
        editAge=(TextView)findViewById(R.id.editAge);
        editEmail=(TextView)findViewById(R.id.editEmail);
        editUsername=(TextView)findViewById(R.id.editUsername);
        editPassword=(TextView)findViewById(R.id.editPassword);
        buttonRegister = (Button)findViewById(R.id.buttonRegister);
    
        buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
    
                Toast.makeText(Register.this, "Registration Successful", Toast.LENGTH_SHORT).show();
                Name = editName.getText().toString();
    
                Age = editAge.getText().toString();
                Email = editEmail.getText().toString();
                Username = editUsername.getText().toString();
                Password = editPassword.getText().toString();
    
                Log.d("???????????", "onClick:------------> " + Name);
                Log.d("???????????", "onClick:------------> " + ID);
                Log.d("???????????", "onClick:------------> " + Age);
                Log.d("???????????", "onClick:------------> " + Email);
                Log.d("???????????", "onClick:------------> " + Username);
                Log.d("???????????", "onClick:------------> " + Password);
                new HttpPostTask().execute();
                Intent regintent = new Intent(Register.this, Result.class);
                //regintent.putExtra("ID",1);
                startActivity(regintent);
    
                /*Intent regintent = new Intent(Register.this, Result.class);
                startActivity(regintent);*/
    
    
            }
        });
    
    
    
    
    }
    public class HttpPostTask extends AsyncTask<Void,Void,Login>{
    
        @Override
        protected Login doInBackground(Void... params) {
            final String url = "http://192.168.1.189:9001/login";
            RestTemplate restTemplate = new RestTemplate();
            Login login = new Login();
            login.setName(Name);
            login.setAge(Age);
            login.setEMail(Email);
            login.setUserName(Username);
            login.getId();
            login.setPassword(Password);
            Log.d("???????????", "onClick:!!!!!!!!!!!!!!> " + Name);
    
    
            login = restTemplate.postForObject(url, login, Login.class);
            ID=login.getId();
            Log.d("???????????", "onClick:!!!!!!!!!!!!!!> " + login.getId());
    
            return login;
        }
        @Override
        protected void onPostExecute(Login login){
            super.onPostExecute(login);
        }
    }
    

    }

      null
  • 共有1个答案

    秦禄
    2023-03-14
    1. 重新启动系统可解决问题
     类似资料:
    • Google I/O Android App 是 Google 在 I/O 大会上用于演示 Android 全新版本所使用的应用,它同时也是展示 I/O 大会日程等信息的应用,项目代号 iosched。 此项目 2019 年变体中,删除了一些功能,例如事件预订和地图屏幕,同时添加了一些新功能,包括通知、Instant App 支持和更多现代依赖项。 目前应用的功能是显示会议事件列表、办公时间与应用

    • I/O

      注:本节未经校验,如有问题欢迎提issue 介绍 akka.io包是由Akka和spray.io团队协作开发的。它的设计结合了spray-io模块的经验,并共同进行了改进,使其适应基于actor服务的更加普遍的消费需求。 该 I/O 实现的指导设计目标是要达到极端的可扩展性,要毫不妥协地提供一个API正确匹配底层传输机制,并且是完全的事件驱动、无阻塞和异步。该API命中注定是网络协议实现和构建更高

    • I/O

      目标 了解 java.io.File 类的主要用途 了解如何使用字节流和字符流 了解如何从文件读取数据和向其中写入数据 处理外部数据 您在 Java 程序中使用的数据通常来自外部数据来源,比如数据库、通过套接字直接传输的字节或文件存储。大部分收集和处理外部数据的 Java 工具都包含在 java.io 包中。 文件 在所有可用于 Java 应用程序的数据来源中,文件是最常见的,通常也是最方便的。如

    • 80386的I/O指令使得处理器可以访问I/O端口,以便从外设输入数据,或者向外设发送数据。这些指令有一个指定I/O空间端口地址的操作数。有两类的I/O指令: 1、 在寄存器指定的地址传送一个数据(字节、字、双字)。 2、 传送指定内存中的一串数据(字节串、字串、双字串)。这些被称作为“串 I/O指令”或者说“块I/O指令”。 8.2.1 寄存器I/O指令(Register I/O Instruc

    • 80386 允许以以下的两种方式操作输入、输出: 通过独立的I/O地址空间(使用特定的I/O指令) 通过内存映射I/O(使用一般的指令操作数)

    • 我正在使用Spring RestTemplate进行RESTful调用。我还使用自定义ClientHttpRequestInterceptor记录请求和响应,以便进行调试。 为了多次读取响应(一次用于日志记录,一次用于处理),我使用了BufferingClienthtPrequestFactory。以下是设置: 不知道为什么会发生这种情况,但我打开了调试器,并为request.getBody()设