Android JSON - AsyncTask DoInBackground NullPointer

luaexgnf  于 2023-04-08  发布在  Android
关注(0)|答案(1)|浏览(92)

我正在开发一个简单的应用程序,它会将POST数据发送到一个php脚本,然后获取JSON响应并将其放入一个listview中。我的UI工作正常,我从脚本中获得JSON响应,但我的应用程序崩溃了,调试日志只显示fatal error: main,只指向我的AsyncTask。我的JSON只是没有被正确解析吗?

yiytaume

yiytaume1#

可能性一

第一步来源@微博

将其移动到onCreate,doInBackground不能做任何ui的事情。这是AsyncTask的基本规则。如果必须,请将AsyncTask类移动到需要它的Activity中。请确保不要将其设置为静态,因为您需要onCreate的findViewById

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);

第二步

在onPostExecute中,第一条语句应该有

super.doPostExecute(result) ;

可能性二

您的listpokemonListnull,请检查。使用Toast's进行调试。

建议

从Android documentation,请阅读4个步骤。

四个步骤

当执行异步任务时,该任务经历4个步骤:

  1. onPreExecute(),在任务执行之前在UI线程上调用。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。
  2. doInBackground(参数...),在onPreExecute之后立即在后台线程上调用()完成执行。此步骤用于执行可能需要很长时间的后台计算。异步任务的参数传递给此步骤。计算的结果必须由此步骤返回,并将传回到上一步骤。此步骤也可以使用publishProgress(Progress...)发布一个或多个进度单元。这些值在UI线程上的onProgressUpdate(Progress...)步骤中发布。
  3. onProgressUpdate(Progress...),在调用publishProgress(Progress...)后在UI线程上调用。执行的时间未定义。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。
  4. onPostExecute(Result),后台计算完成后在UI线程上调用。后台计算的结果作为参数传递给此步骤。

相关问题