Android JSON - AsyncTask DoInBackground NullPointer

时间:2013-07-06 03:38:23

标签: java android json

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

1 个答案:

答案 0 :(得分:2)

可能性

第1步信用@Weibo

将此移至onCreate,doInBackground无法执行任何 ui内容。它是AsyncTask的基本规则。如果必须,请将AsyncTask类移动到需要它的活动中。确保您不要将其设为静态,因为您需要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);

第2步

在你的onPostExecute中,第一个语句应该有

super.doPostExecute(result) ;

可能性2

您的listpokemonList null ,请查看此信息。使用Toast's进行调试。

建议

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

4个步骤

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

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