Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android TextView实时更新异步任务_Android_Android Asynctask - Fatal编程技术网

Android TextView实时更新异步任务

Android TextView实时更新异步任务,android,android-asynctask,Android,Android Asynctask,我正在制作一个android应用程序,它从网页下载一些文本并将其放入字符串,然后在文本视图中打印字符串。但是网页的内容可以每秒钟更改一次,因此我希望TextView实时更新,每秒钟显示一次新的字符串。为了从网页下载文本并设置TextView的文本,我使用了AsyncTask,并调用了onCreate()方法中的execute(),在mainActivity中。我不知道如何更新它,而不使应用程序崩溃。 对不起,英语不好,这是我的主要活动: package com.example.pack;

我正在制作一个android应用程序,它从网页下载一些文本并将其放入
字符串
,然后在
文本视图
中打印字符串。但是网页的内容可以每秒钟更改一次,因此我希望
TextView
实时更新,每秒钟显示一次新的
字符串。为了从网页下载文本并设置
TextView
的文本,我使用了
AsyncTask
,并调用了
onCreate()
方法中的
execute()
,在main
Activity
中。我不知道如何更新它,而不使应用程序崩溃。 对不起,英语不好,这是我的主要活动:

   package com.example.pack;

    import java.net.MalformedURLException;
    import java.net.URL;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.TextView;

    public class MainActivity extends Activity
    {
    TextView textView;
    URL url;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        url = null;

        try
        {
            url = new URL("myURL");
        }

        catch (MalformedURLException e) {}

        new VariabileLikeTask(textView).execute(url);
    }
    }
这就是我的任务:

package com.example.pack;

import android.os.AsyncTask;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;

public class VariabileLikeTask extends AsyncTask<URL, Void, CharSequence>
{
    TextView textView;

    public VariabileLikeTask(TextView textView)
    {
        this.textView = textView;
    }

    @Override
    protected String doInBackground(URL... urls)
    {
        URL url = urls[0];
        InputStream in = null;
        int risposta = -1;
        String text = "";

        try
        {
            URLConnection conn = url.openConnection();

            if (!(conn instanceof HttpURLConnection))
              throw new IOException("No connection");

            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setAllowUserInteraction(false);
            httpConn.setInstanceFollowRedirects(true);
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            risposta = httpConn.getResponseCode();

            if (risposta == HttpURLConnection.HTTP_OK)
                in = httpConn.getInputStream();

            BufferedReader bf = new BufferedReader(new InputStreamReader(in));
            text = bf.readLine();

            in.close();
            bf.close();

        }
        catch (Exception ex) {}

        return text;
    }

    @Override
    protected void onPostExecute(CharSequence text)
    {
        textView.setText(text);
    }
}
package com.example.pack;
导入android.os.AsyncTask;
导入android.widget.TextView;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入java.net.URLConnection;
公共类variabileLisketask扩展异步任务
{
文本视图文本视图;
公共变量Eliketask(TextView TextView)
{
this.textView=textView;
}
@凌驾
受保护的字符串doInBackground(URL…URL)
{
URL=URL[0];
InputStream in=null;
int-risposta=-1;
字符串文本=”;
尝试
{
URLConnection conn=url.openConnection();
if(!(HttpURLConnection的连接实例))
抛出新IOException(“无连接”);
HttpURLConnection httpConn=(HttpURLConnection)conn;
httpConn.setAllowUserInteraction(假);
httpConn.setInstanceFollowRedirects(真);
httpConn.setRequestMethod(“GET”);
httpConn.connect();
risposta=httpConn.getResponseCode();
if(risposta==HttpURLConnection.HTTP\u确定)
in=httpConn.getInputStream();
BufferedReader bf=新的BufferedReader(新的InputStreamReader(in));
text=bf.readLine();
in.close();
bf.close();
}
捕获(例外情况除外){}
返回文本;
}
@凌驾
受保护的void onPostExecute(字符序列文本)
{
textView.setText(text);
}
}

抱歉,如果格式代码错误,这是我的第一个线程。

频繁运行AsyncTask不是一个坏主意吗?这将使应用程序在网络操作中变得更重

如果您的意思是实时推送通知或套接字连接这两个词将是最佳匹配。如果您无法使用推送通知,因为您试图从Web页面获取数据,请考虑使用服务类。然后简单地创建一个计时器任务,并在一个小的时间间隔后运行AsyncTask

这里是一个在一段时间后运行任务的简单演示

    private int m_interval = 5000; // 5 seconds by default, can be changed later
    private Handle m_handler;

    @Override
    protected void onCreate(Bundle bundle)
    {
      ...
      m_handler = new Handler();
    }

    Runnable m_statusChecker = new Runnable()
    {
         @Override 
         public void run() {
              //this function can change value of m_interval.
              new VariabileLikeTask(textView).execute(url); 
              m_handler.postDelayed(m_statusChecker, m_interval);
         }
    }

    void startRepeatingTask()
    {
        m_statusChecker.run(); 
    }

    void stopRepeatingTask()
    {
        m_handler.removeCallback(m_statusChecker);
    }
在本例中,用户尝试从AsyncTask显示对话框,但在运行时更改txtBox的代码是相同的,请注意

告诉我我是否帮助过你和优秀的编程