我正在开发一个简单的应用程序,它将 POST 数据发送到 php 脚本,然后获取 JSON 响应并将其放入列表视图中。我的 UI 工作正常,我从脚本中得到 JSON 响应,但是我的应用程序崩溃并且调试日志只显示一个fatal error: main
,仅指向我的 AsyncTask。我的 JSON 只是没有被正确解析吗?
问问题
269 次
1 回答
2
可能性一
第一步学分@微博
把它移到你的 onCreate,doInBackground 不能做任何ui 的东西。它是 AsyncTask 的基本规则。如果必须,请将 AsyncTask 类移动到需要它的活动中。确保不要将其设为静态,因为您需要findViewById
onCreate。
final Spinner numPoke = (Spinner) findViewById(R.id.SpinnerNumPokemon);
final Spinner dexRegion = (Spinner) findViewById(R.id.SpinnerRegion);
final Spinner pokeType = (Spinner) findViewById(R.id.SpinnerType);
final ToggleButton incNFE = (ToggleButton) findViewById(R.id.toggleNFE);
final ToggleButton incLegendary = (ToggleButton) findViewById(R.id.toggleLegendary);
第2步
在你的 onPostExecute 中,第一条语句应该有
super.doPostExecute(result) ;
可能性二
你的list
orpokemonList
是null,看看这个。用于Toast's
调试。
建议
从 Android文档中,请阅读 4 个步骤。
4个步骤
当一个异步任务被执行时,任务会经过 4 个步骤:
- onPreExecute(),在任务执行之前在 UI 线程上调用。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。
- doInBackground(Params...),在 onPreExecute() 完成执行后立即在后台线程上调用。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数传递到这一步。计算的结果必须由这一步返回,并将传递回最后一步。此步骤还可以使用 publishProgress(Progress...) 来发布一个或多个进度单位。这些值在 UI 线程上的 onProgressUpdate(Progress...) 步骤中发布。
- onProgressUpdate(Progress...),在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。
- onPostExecute(Result),在后台计算完成后在 UI 线程上调用。后台计算的结果作为参数传递给该步骤。
于 2013-07-06T04:02:17.417 回答