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