gpt4 book ai didi

java - 尝试在android中的AsyncTask中读取文本文件,但我得到空结果

转载 作者:行者123 更新时间:2023-12-01 23:04:15 25 4
gpt4 key购买 nike

我试图在android中的AsyncTask类中从网络读取文本文件,然后将结果传递到静态变量中,然后将其加载到另一个类中的TextView,但我得到空结果并且不明白为什么。显然我搞乱了代码中的某些内容......

有人可以评论一下吗?提前致谢!

package com.example.cuccandroid;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

import android.os.AsyncTask;

public class readtextfile extends AsyncTask<String, Integer, Void>{

@Override
protected Void doInBackground(String... params) {
try {

URL url = new URL("http://example.com/example.txt");

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line = null;
while ((line = in.readLine()) != null) {
//get lines
Kezdoh.descriptiontext=line;
}
in.close();


} catch (MalformedURLException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
return null;
}

protected void onProgressUpdate() {
//called when the background task makes any progress
}

protected void onPreExecute() {
//called before doInBackground() is started
}
protected void onPostExecute() {
//called after doInBackground() has finished
}
}

我的类(class),我正在尝试加载

package com.example.cuccandroid;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import com.example.cluppandroid.R;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class Kezdoh extends Fragment{

TextView description;
static String descriptiontext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View android = inflater.inflate(R.layout.kezdoh, container, false);
//GetDescription();
description = ((TextView)android.findViewById(R.id.description1));

new readtextfile().execute("http://example.com/example.txt");
description.setText(descriptiontext);
return android;
}
}

最佳答案

你必须记住AsyncTask是在不同的时间在不同的线程中执行的。

在你的情况下,description.setText(descriptiontext);首先执行。

一个好的方法是防止使用描述文本的静态引用。

在这种情况下,您可以做的是将构造函数添加到 readtextfile 并传递 TextView 实例。onPostExecute() 方法将在 doInBackground() 读取字符串内容之后执行。随后,任何与 UI 相关的方法都应在 onPostExecute() 方法中访问。

我稍微修改了您的 readtextfile 类,如下所示:

public class readtextfile extends AsyncTask<String, Integer, String>{

private TextView textViewToSet;
public readtextfile(TextView descriptionTextView){
this.textViewToSet = descriptionTextView;
}

@Override
protected String doInBackground(String... params) {
String result = "";
try {
URL url = new URL("http://example.com/example.txt");

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
String line = null;

while ((line = in.readLine()) != null) {
//get lines
result+=line;
}
in.close();


} catch (MalformedURLException e) {

e.printStackTrace();
} catch (IOException e) {

e.printStackTrace();
}
return result;
}

protected void onProgressUpdate() {
//called when the background task makes any progress
}

protected void onPreExecute() {
//called before doInBackground() is started
}

@Override
protected void onPostExecute(String result) {
this.textViewToSet.setText(result);
}
}

接下来您需要做的就是调用电话

new readtextfile().execute("http://example.com/example.txt");

并从 onCreateView 方法中删除此行

description.setText(descriptiontext);

关于java - 尝试在android中的AsyncTask中读取文本文件,但我得到空结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com