我正在编写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);
真的需要帮助!
答案 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>