Java 在android中下载网页的最快方式?
主要的问题是一切都很好。但它没有反应。显示结果需要时间。我如何使它足够快,以更快地获得结果 单个活动中有三个异步任务。。一个用于自动特写视图更改。每当用户输入一些文本时,它就会调用AsynTask函数 AutoTextView textChangeListener。。当用户输入某个内容时,它会调用它Java 在android中下载网页的最快方式?,java,android,android-asynctask,Java,Android,Android Asynctask,主要的问题是一切都很好。但它没有反应。显示结果需要时间。我如何使它足够快,以更快地获得结果 单个活动中有三个异步任务。。一个用于自动特写视图更改。每当用户输入一些文本时,它就会调用AsynTask函数 AutoTextView textChangeListener。。当用户输入某个内容时,它会调用它 textView.addTextChangedListener(new TextWatcher() { @Override public void
textView.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence cs, int arg1, int arg2,
int arg3) {
seq = cs;
}
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3)
{
}
@Override
public void afterTextChanged(Editable arg0)
{
new SearchTask().execute(seq.toString().trim());
}
});
autoTextview的异步任务为
private class SearchTask extends AsyncTask<CharSequence, Void, String>
{
ArrayAdapter<String> adapter;
String[] array;
@Override
protected void onPreExecute()
{
super.onPreExecute();
}
@Override
protected String doInBackground(CharSequence... params)
{
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(pak_url + params[0]);
HttpResponse responce = httpclient.execute(httppost);
HttpEntity httpEntity = responce.getEntity();
String response = EntityUtils.toString(httpEntity);
Log.d("response is", response);
if (response != null) {
String substr = response.split("\\(")[2].split("\\)")[0];
array = substr.split(",");
for (int i = 0; i < array.length; i++) {
array[i] = array[i].replace("'", "");
}
}
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (array != null) {
adapter = new ArrayAdapter<String>(PlayListActivity.this,
android.R.layout.simple_list_item_1, array);
textView.setAdapter(adapter);
adapter.getFilter().filter(seq);
}
私有类SearchTask扩展了异步任务
{
阵列适配器;
字符串[]数组;
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
}
@凌驾
受保护字符串doInBackground(字符序列…参数)
{
试一试{
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(pak_url+参数[0]);
HttpResponse response=httpclient.execute(httppost);
HttpEntity HttpEntity=response.getEntity();
字符串响应=EntityUtils.toString(httpEntity);
Log.d(“响应为”,响应);
if(响应!=null){
String substr=response.split(“\\”[2]。split(“\\”)”[0];
数组=子字符串拆分(“,”);
for(int i=0;i
第二个AsyncTask下载整个网页并将其存储在字符串中..当收到字符串时.向其添加autotextview文本并调用另一个AsyncTask..一切正常..但不知道它为什么这么慢..有人指导我如何使其响应.而且很快
class RetrieveFeedTask extends AsyncTask<String, Void, String>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
Utilities.hideSoftKeyboard(PlayListActivity.this);
progressDialog = ProgressDialog.show(PlayListActivity.this,
"Loading...", "Please wait...");
}
@Override
protected String doInBackground(String... urls) {
try {
URL url= new URL(urls[0]);
URLConnection conn = url.openConnection();
// open the stream and put it into BufferedReader
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
String HTML_response = "";
while ((inputLine = br.readLine()) != null) {
// System.out.println(inputLine);
HTML_response += inputLine;
}
br.close();
System.out.println("Done");
return HTML_response;
} /*catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}*/catch (Exception e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(String feed)
{
super.onPostExecute(feed);
Parser(feed);
progressDialog.dismiss();
}
}
@SuppressLint("NewApi")
void Parser(String x)
{
if (x.contains(spliter_start))
{
if (spliter_end.isEmpty())
{
x = x.substring(x.indexOf(spliter_start));
}
else
{
x = x.substring(x.indexOf(spliter_start),
x.indexOf(spliter_end));
}
}
int i = 0;
list.clear();
while (x.contains(loop_controller) && i<50)
{
/*if (i > 50)
{
break;
}*/
HashMap<String, String> map = new HashMap<String, String>();
x = x.substring(x.indexOf(song_start));
map.put("songsName",x.substring(
x.indexOf(song_start) + song_start.length(),
x.indexOf(song_end)));// songsName.get(i));
x = x.substring(x.indexOf(song_url_start));
map.put("songsUrl",x.substring(
x.indexOf(song_url_start) + song_url_start.length(),
x.indexOf(song_url_end)));// songsUrl.get(i));
list.add(map);
i++;
}
PlayListAdapter adapter = new PlayListAdapter(
PlayListActivity.this, list);
list_of_songs.setAdapter(adapter);
}
class RetrieveFeedTask扩展了AsyncTask
{
@凌驾
受保护的void onPreExecute()
{
super.onPreExecute();
hideSoftKeyboard(playlayActivity.this);
progressDialog=progressDialog.show(播放活动.this,
“正在加载…”,“请稍候…”);
}
@凌驾
受保护的字符串doInBackground(字符串…URL){
试一试{
URL=新URL(URL[0]);
URLConnection conn=url.openConnection();
//打开流并将其放入BufferedReader
BufferedReader br=新的BufferedReader(
新的InputStreamReader(conn.getInputStream());
字符串输入线;
字符串HTML_response=“”;
而((inputLine=br.readLine())!=null){
//系统输出打印LN(输入线);
HTML_响应+=输入行;
}
br.close();
系统输出打印项次(“完成”);
返回HTML_响应;
}/*捕获(格式错误){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}*/捕获(例外e){
e、 printStackTrace();
返回null;
}
}
@凌驾
受保护的void onPostExecute(字符串馈送)
{
super.onPostExecute(提要);
语法分析器(feed);
progressDialog.disclose();
}
}
@SuppressLint(“新API”)
void解析器(字符串x)
{
如果(x.contains(spliter_start))
{
if(spliter\u end.isEmpty())
{
x=x.substring(x.indexOf(spliter_start));
}
其他的
{
x=x.substring(x.indexOf(拆分器启动),
x、 indexOf(spliter_end));
}
}
int i=0;
list.clear();
而(x.contains(回路控制器)和i&50)
{
打破
}*/
HashMap=newHashMap();
x=x.substring(x.indexOf(song_start));
map.put(“songsName”,x.子字符串(
x、 索引of(song_start)+song_start.length(),
x、 indexOf(song_end));//songsName.get(i));
x=x.substring(x.indexOf(song\u url\u start));
map.put(“songsUrl”,x.子字符串(
x、 索引of(song\u url\u start)+song\u url\u start.length(),
x、 indexOf(song_url_end));//songsUrl.get(i));
列表。添加(地图);
i++;
}
playliadapter=新的playliadapter(
播放列表(活动。此,列表);
歌曲列表。设置适配器(适配器);
}
有谁能告诉我如何使其快速响应..或者告诉我一种比AsyncTask更好的方法..并请告诉我如何使用thread下载网页。或者是更好还是我使用其他方法
任何人都可以通过查看代码来帮助我,并告诉我如何快速完成。有人告诉我使用HttpClient类而不是UrlConnection。哪一个更好。我的应用程序运行缓慢,是否存在任何错误
先谢谢你