无法使用 AsyncTask 在 TextView 中设置文本
Posted
技术标签:
【中文标题】无法使用 AsyncTask 在 TextView 中设置文本【英文标题】:unable to set Text in TextView using AsyncTask 【发布时间】:2016-12-07 13:31:06 【问题描述】:我有一个AsyncTask
,我想在我的 layout.xml 文件中设置TextView
的文本,但是我的应用程序因错误而崩溃
android.content.res.Resources$NotFoundException: 字符串资源 ID #0x2
请帮帮我!
public class UploadVideo extends Activity
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
transferUtility = Util.getTransferUtility(this);
requestWindowFeature(getWindow().FEATURE_NO_TITLE);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.my_activity);
context = this;
new get_people_data().execute();
public class get_people_data extends AsyncTask<String,String,String>
final String TAG = "get_people_data";
String API_URL = "http://api.expressionsapp.com/users/auth0_5732cc152781665b7b5dfee6/status/";
int front;
int behind;
@Override
protected String doInBackground(String...arg0)
try
JsonParser jParser = new JsonParser();
JSONObject json = jParser.getJSONFromUrl(API_URL);
behind= json.getInt("countBack");
front= json.getInt("countFront");
catch (JSONException e)
e.printStackTrace();
return null;
@Override
protected void onPostExecute(String s)
TextView ppl_infront;
TextView ppl_behind;
ppl_infront = (TextView) findViewById(R.id.ppl_infront);
ppl_infront.setText(front);
ppl_behind = (TextView) findViewById(R.id.ppl_behind);
ppl_behind.setText(behind);
【问题讨论】:
首先声明TextView
全局部分
请显示你的xml
在oncreate中初始化textview
您应该在onCreate()
中初始化您的小部件并在全局范围内声明它。
android.content.res.Resources$NotFoundException: String resource ID #0x0的可能重复
【参考方案1】:
问题出在
ppl_infront.setText(front);
ppl_behind.setText(behind);
因为你正在传递和 int(front is of type int) using
最终无效 setText(int resid)
然后系统在 R 文件中搜索该 int id(即自动生成的文件)
用这个改变:
ppl_infront.setText(String.valueOf(front));
ppl_behind.setText(String.vaueOf(behind));
使用
final void setText(CharSequence text)
这里是官方reference
【讨论】:
宾果游戏。你成功了!不错的收获。【参考方案2】:做你的
ppl_infront = (TextView) findViewById(R.id.ppl_infront);
和
ppl_behind = (TextView) findViewById(R.id.ppl_behind);
在您的setContentView(R.layout.my_activity);
下方的onCreate()
方法中
如果它不能解决您的问题,请发布您的 xml 文件。
【讨论】:
如果他使用这个,textview 必须是实例变量。为什么需要这个? 这不是保持全球性。如果他在onPostExecute()
中执行此操作,findViewById()
的上下文将是异步任务上下文。因此它可能会崩溃。
我怀疑那个人。因为,findViewById
仅在 Activity
上下文中运行。 AsyncTask
中没有 findViewById
,因此它无法获取其上下文。
如果你能看到他的onPostExecute()
方法,它包含findViewById()
的textView。
我是说Android中的onPostExecute()
方法没有findViewById()
。因此,上面的代码仅在 Activity 上下文中运行,它确实具有该方法,因为它可以正确编译和运行。【参考方案3】:
快速解决方案:
如果你不想惹String.value(front)
,你可以设置你的文字如下。
ppl_behind.setText(front + "");
【讨论】:
快速解决方案但非常糟糕的编程建议!请不要遵循这种不良做法 那个伙伴有什么不好的?如果你能解释一下,可能会对我有所帮助。 好的,代码可以工作,但都是易读性和干净代码的问题。代码必须自己解释。连接一个空字符串只是一种解决方法。 好吧.. 对我来说,有效的东西是值得的。我认为您的代码不适合作为日志,因为它会影响您的应用程序性能。但我很高兴你指出。 我不这么认为,阅读这个有趣的blog 和这个SO post ...你会改变主意的!以上是关于无法使用 AsyncTask 在 TextView 中设置文本的主要内容,如果未能解决你的问题,请参考以下文章
重新创建活动时如何从 AsyncTask 更新 TextView
在 AsyncTask 运行时向 TextView 添加文本
Android - JSON 到 textview 使用 asynctask
在扩展 AsyncTask 的类中使用 DoInBackground 方法更改非 MainActivity 的 Activity 中 TextView 的文本