为了账号安全,请及时绑定邮箱和手机立即绑定

如何重复发布和接收数据但使应用程序仍然可响应编辑

如何重复发布和接收数据但使应用程序仍然可响应编辑

MM们 2023-07-19 10:39:12
我需要重复将数据发布到 php 并取回它们,但使应用程序仍然可响应。我的代码可以工作,但一段时间后(大约 1 分钟)我的应用程序停止响应。起初,我尝试将 POST() 函数添加到 onResponse() 函数(onRespose 调用 POST 函数,一次又一次地发出新请求),但这冻结了我的应用程序,所以我添加了每 1 毫秒调用一次函数的计时器...编辑后,我的应用程序与以前一样工作(仅在连接到电脑时才有效),如果我打开应用程序并且我的手机未连接到电脑,应用程序会在 1 分钟后崩溃,所以我仍然遇到与开始时相同的问题。如果有人发现错误请告诉我哪里。。..我编辑的代码:.MainActivity.javapublic class MainActivity extends AppCompatActivity implements Sync.CallBack {    final String URL = "***";    final String KEY = "***";    Data data;    RequestQueue requestQueue;    TextView textView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        data = new Data();        data.key = KEY;        data.pressed = "0";        textView = findViewById(R.id.status);        requestQueue = Volley.newRequestQueue(this);        StartSync();    }    public void btnClick(View view) {        data.pressed = "1";    }    @Override    public void onCallBack(String data) {        textView.setText(data);    }    public void StartSync(){        Sync thread = new Sync(this,data,this);        thread.start();    }}Sync.javapublic class Sync extends Thread{    private Context context;    boolean wait = false;    final String URL = "***";    public CallBack listener;    RequestQueue requestQueue;    public Data data;    public interface CallBack{        void onCallBack(String data);    }    public Sync(CallBack listener,Data data,Context context){        this.listener = listener;        this.data = data;        this.context = context;        requestQueue = Volley.newRequestQueue(context);    };    @Override    public void run() {        while(true){            wait = true;            POST();            while(wait){}        }    }
查看完整描述

1 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

好吧,我可以给你一个如何实现这一点的例子,但你确实需要研究我将使用的东西。


创建线程来发送和接收数据


 public class myReceiveThread extends Thread{

        public gotNewData listener;


        //Create an interface to pass data to Activity

        public interface gotNewData(){

            void gotNewDataToDisplay(String data); //or int or data or what ever.

        }


        //CTor

        public myThread(gotNewData listener){

            this.listener = listener;

        }


        @Override

        public void run(){

            while(myAppisRunnung == true){




                //Receive Data

                listener.gotNewDataToDisplay("New Data");

            }

        }

        }

在主要活动中:


//In Main activity

public class MainActivity extends AppCompactActiity implements gotNewData{


//what ever


public void startThread(){

     myReceiveThread thread = new myReceiveThread(this);

     thread.start();

}


@Override

public void gotNewDataToDisplay(String data){

    someTextView.setText(data);

  }

}

创建发送线程


public class mySendingThread extends Thread{

private BlockingQueue<String> toSendMessages= new BlockingQueue<>();


Public mySendingThread (BlockingQueue<String> toSendMessages){

this.toSendMessages = toSendMessages;

}


@Override

        public void run(){

            while(myAppisRunnung == true){

             String message= toSendMessages.take();

//Send message

}

}

}

在主要活动中


public void startSendThread(){

     mySendingThread threadSend = new mySendingThread(MessageQueue);

     thread.start();

}

在 mainActivity 中,您需要一个BlockingQueue<String> MessageQueue 并且可以添加您想要的每条消息。


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信