Android JAVA - 使用和接口字段时出现NullPointerException

时间:2016-10-17 14:34:32

标签: java android android-asynctask nullpointerexception

我正在编写Android应用程序。在某个时刻,要求应用程序从我在Heroku上的Web服务中检索数据。 包含检索数据的方法的类和使用这些数据的方法的类是不同的。 我试图使用接口将AsyncTask的onPostExecute()中的数据传递给我的其他类;但是我得到了令人讨厌的NullPointerException并且我不明白这个原因!

我的主要"类:

 public class Details extends AppCompatActivity implements ResponseFromWebService.AsyncResponse {
 @Override
    public void processFinish(String output){
        System.out.println(output);
    }
//Other Stuff
}

我的ResponseFromWebService类:

public class ResponseFromWebService {

public void getData (String Name) {
    new JSONTask().execute("censored-URL");
}

public interface AsyncResponse {
    void processFinish(String output);
}

public class JSONTask extends AsyncTask<String, String, String> {

    AsyncResponse delegate = null;

    @Override
    protected String doInBackground(String... params) {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        StringBuffer buffer = new StringBuffer();

        try {
            URL url = new URL(params[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            InputStream stream = connection.getInputStream();

            reader = new BufferedReader(new InputStreamReader(stream));

            String line = "";
            while ((line = reader.readLine()) != null) {
                buffer.append(line);
            }

            String finalJson = buffer.toString();

            JSONObject finalObject = new JSONObject(finalJson);

            String Desc = finalObject.getString("desc");

            return Desc;

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        } finally {
            if (connection != null)
                connection.disconnect();
            try {
                if (reader != null)
                    reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        delegate.processFinish(s);
    }
}
}

当呼叫delegate.processFinish(s);

时,NPE出现在最后一行

真的需要帮助!

2 个答案:

答案 0 :(得分:4)

item.type.name永远不会设置。

使用构造函数

设置它
delegate

然后在public class JSONTask extends AsyncTask<String, String, String> { public JSONTask(AsyncResponse delegate) { this.delegate = delegate } AsyncResponse delegate = null; @Override protected String doInBackground(String... params) { // [...]

ResponseFromWebService

答案 1 :(得分:0)

您是否应该为委托变量分配引用?你在开头给这个变量赋值null,除了在final语句中调用之前没有分配任何其他东西,它仍然是null,所以你得到一个NullPointerException。

<f:if condition="{pageId} == '78'>
...
</f:if>