首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thread.start() -无法解决java类中的符号错误,我希望使用该类来运行读取硬件设备的后台线程

Thread.start() -无法解决java类中的符号错误,我希望使用该类来运行读取硬件设备的后台线程
EN

Stack Overflow用户
提问于 2022-10-02 00:15:25
回答 1查看 77关注 0票数 0

对于android和java,我仍然是新手,所以请客气点,我在这里问这个问题之前做了很多研究。

这段代码在一个片段中运行得很好(此时,我不想知道代码可能引起的潜在问题,这些问题将在我继续学习并了解更多有关android的信息时处理)

代码语言:javascript
复制
package com.sample.ui.dashboard;

import android.widget.TextView;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

public class ExecThread(String id) {
  String RequestA = a_string;
  TextView te; //(TextView) getView().findViewById(R.id.meternumber);

  Runnable runnable = new Runnable() {
    String read = null;
    int count = 5;
    @Override
    public void run()
    {
      try {
        while(count != 0)
        {
          Socket socket = new Socket(ipAddress, port);
          socket.setKeepAlive(true);
          OutputStream out = socket.getOutputStream();
          PrintWriter output = new PrintWriter(out, true);
          output.println(RequestA);
          BufferedReader input;
          input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
          read = input.readLine();

          if (read != null && read.length() >= 250)
          {
            te.setText( String.valueOf(count) + " - " + (CharSequence) read.substring(4, 16));
          }
          socket.close();
          count--;
        }
      }
      catch (IOException e)
      {
        e.printStackTrace();
      }
    }
  };
  Thread thread = new Thread(runnable);
  
  thread.start();   <<---------------   cannot resolve symbol 'start'
}

在按钮的onClick()中,代码工作正常,这是在测试使用修改的modbus协议读取设备,因为对设备的轮询是一个24小时的操作,所以不能在主UI中完成,因为它将涉及提取大量数据值和数据库活动到Sqlite

我的问题是,我遗漏了什么

  1. 无法解析符号“start”
  2. 如何从片段中单击按钮调用类。

希望这是有意义的

提前谢谢..。

EN

回答 1

Stack Overflow用户

发布于 2022-10-02 01:53:00

由于@tgdavies指出了我的遗漏,我的线程正在运行。

线程对象的Java类实现。

代码语言:javascript
复制
  public class myThread
  {
  public void ExecThread(String requestA, String requestB, TextView tv ) {
    TextView te = tv;

    Runnable runnable = new Runnable() {
      String read = null;
      int count = 5;
      @Override
      public void run()
      {
        try {
          while(count != 0)
          {
            Socket socket = new Socket(ip, port);
            socket.setKeepAlive(true);
            OutputStream out = socket.getOutputStream();
            PrintWriter output = new PrintWriter(out, true);
            output.println(requestA);
            BufferedReader input;
            input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            read = input.readLine();

            if (read != null && read.length() >= 250)
              {
              te.setText( String.valueOf(count) + " - " + (CharSequence) read.substring(4, 16));
              }
            socket.close();
            count--;
          }
        }
        catch (IOException e)
        {
          e.printStackTrace();
        }
      }
    };
    Thread thread = new Thread(runnable);
      thread.start();
  }

从我的片段onViewCreated( .)

代码语言:javascript
复制
   public void onViewCreated(@NonNull View view, Bundle savedInstantState)
    {
    super.onViewCreated(view, savedInstantState);
    myThread h = new myThread();
    binding.button.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v )
      {
      TextView te = (TextView) getView().findViewById(R.id.mNumber);
      h.ExecThread(r1, r2, te);
      }
    });

在这一点上,我很乐意接受更有经验的android开发人员所能看到的问题的建议--我毫不怀疑这可以做得更好--任何反馈都会受到赞赏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73922579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档