如何更新/刷新 TextView 以每秒显示更新的 Json 数据?

Posted

技术标签:

【中文标题】如何更新/刷新 TextView 以每秒显示更新的 Json 数据?【英文标题】:How to update/refresh TextView to show updated Json data every second? 【发布时间】:2019-06-02 01:50:27 【问题描述】:

我想创建一个在线队列监控应用程序,它将显示输入到数据库中的新数据。UI 示例如下

如果输入了新数据,我希望当前服务票证每秒更新一次 (Json)。

这里是MainActivity.java

public class MainActivity extends AppCompatActivity 

public static TextView data;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button input_number = (Button) findViewById(R.id.button2);
    Button reminder = (Button) findViewById(R.id.button);

    final TextView userinputtext = (TextView) findViewById(R.id.textView6);

    data = (TextView)findViewById(R.id.textView10);

这是我创建的 data.java

public class data extends AsyncTask<Void,Void,Void> 

String data=" ";
String singleParsed = " ";

@Override
protected Void doInBackground(Void... voids) 
    try 

        URL url = new URL("url/SamplePage.php");
        HttpURLConnection httpURLConnection=(HttpURLConnection) url.openConnection();
        InputStream inputStream = httpURLConnection.getInputStream();
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
        String line ="";
        while(line!=null)
            line = bufferedReader.readLine();
            data = data + line;
        

        JSONArray JA = new JSONArray(data);
        for (int i =0; i<JA.length();i++)
            JSONObject JO = (JSONObject) JA.get(i);

            singleParsed = JO.get("ticket_number")+"";

            //dataParsed = dataParsed + singleParsed;

        

    catch (MalformedURLException e)
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
    catch (JSONException e)
        e.printStackTrace();
    
    return null;



@Override
protected void onPostExecute(Void aVoid) 
    super.onPostExecute(aVoid);

    MainActivity.data.setText(this.singleParsed);




如果有任何意见或帮助,我将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

最快的答案是每秒设置一个计时器来查询数据库中的数据并更新视图。 如果您正在寻找更优化、更完整、更有文档且更简单的解决方案,我建议您使用 firebase,它提供诸如实时数据库之类的服务:https://youtu.be/U5aeM5dvUpA 当然还有其他替代方案,例如 RethinkDB。 您还应该查找 websocket,因为它们与此类实时更新问题的方法相似。 但在我看来,firebase 非常适合。

【讨论】:

您好,感谢您的回复。我目前正在使用亚马逊网络服务。每当我插入数据库时​​,我都设法查看新数据,但我必须重新启动应用程序才能让它发生。 Json 示例:["id":1,"ticket_number":"1008","re​​g_date":"2018-11-27 19:00:00","id":2,"ticket_number":" 1009","re​​g_date":"2018-11-27 19:01:00","id":3,"ticket_number":"1010","re​​g_date":"2018-11-27 19:02: 00","id":4,"ticket_number":"1011","re​​g_date":"2018-11-27 19:03:00"] 嗨,您的意思是在您将新数据插入数据库后(手动,我想来自 AWS),您只能在重新启动应用程序后才能查看它?如果是这种情况,那很正常,因为 TextView 仅在您告诉它时才会更新。这就是为什么你可以告诉它更新自己,只要应用程序使用计时器每秒运行一次(更简单、更快的解决方案)。 @FahimSalamChowdhury 的回答很有帮助,有一种叫做 AWS Mobile Hub 的东西(下一条评论中的详细信息)可以帮助您更好地使用 AWS。我相信你会做出正确的选择。 ***.com/questions/39589636/… 每当输入新数据(从 Json 格式的 php 文件中读取)时,应自动更新当前服务票号。现在我手动输入数据以查看当前服务票是否更新但没有。所以你的建议是添加计时器? 是的,现在您可以为这个药房项目执行此操作。创建一个方法updateCurrentServingTicket() //Update TextView 并在您要实现的计时器中调用它。但是,如果您使用 websocket,您可以在发出事件 'ticketAdded' 时侦听 JSON 数组 'url/SamplePage.php' 中发生的变化。您的应用程序将接收它并致电updateCurrentServingTicket(),因此无需计时器。这是一个关于 android 的 Websockets 的链接:github.com/koush/android-websockets,它们需要比计时器更多的代码,但它们是更好的选择。祝你好运!【参考方案2】:

您可以使用SyncAdapter 和LiveData。如果使用Room,会更容易处理。

【讨论】:

我会试着调查一下。谢谢

以上是关于如何更新/刷新 TextView 以每秒显示更新的 Json 数据?的主要内容,如果未能解决你的问题,请参考以下文章

从服务更新textView的最简单方法是什么?

如何每秒刷新小部件?

定期更新小部件 TextView 的简单方法

如何更新 Storage 中的图片并刷新 Streambuilder 以显示新图片?

每秒异步更新 UI,无需从服务器刷新页面

android LinearLayout中嵌套一个textview,当textview更新时会触发LinearLayout也更新。用啥办法可以让