0
我有一個服務啓動一個AsyncTask來從我的家庭網絡中的設備取回一些數據。當AsyncTask完成後,它會使用服務實現的onPostExecute中的回調接口將數據讀回給服務。該服務然後讀取傳遞的字符串中的信息,並根據信息做一些事情。這工作很好9/10次,但有時從asynctask傳遞的字符串爲null。從AsyncTask傳遞到服務的Android無效字符串
的AsyncTask doInBackground:
private String result = "No results";
@Override
protected Void doInBackground(Void... params) {
try {
OutputStreamWriter wr = new OutputStreamWriter(mConnection.getOutputStream());
wr.write(body);
wr.flush();
BufferedReader rd = new BufferedReader(new InputStreamReader(mConnection.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result = line;
}
wr.close();
rd.close();
} catch (Exception e) {
result = e.getMessage();
}
return null;
}
protected void onPostExecute(Void result) {
mListener.onHttpResponse(this.result, REQUEST_CODE);
}
}
服務onHttpResponse:
@Override
public void onHttpResponse(String response, int REQUEST_CODE) {
ResponseEnterpreter mEnterpreter = new ResponseEnterpreter(response);
switch (REQUEST_CODE) {
case WidgetConstants.REQUEST_LED_STATE :
String artist = mEnterpreter.getArtist(); <--- NullPointerException
ResponseEnterpreter getArtist:
public class ResponseEnterpreter {
private String mResponse;
public ResponseEnterpreter(String mResponse) {
this.mResponse = mResponse;
}
public String getArtist() {
int first_index = mResponse.lastIndexOf("<dc:creator>");
if (first_index == -1) {
return null;
}
int last_index = mResponse.lastIndexOf("</dc:creator>");
String artist = mResponse.substring(first_index + "<dc:creator>".length(), last_index);
return unEscapeString(artist);
}
據我瞭解,在resul t字符串被初始化爲「沒有結果」,並且如果沒有結果被BufferedReader檢索到「沒有結果」是應該傳遞的字符串。 mConnection設置爲3秒超時。
我真的在撓撓我的腦袋....
任何想法?
//弗雷德裏克
我應該使用一個StringBuilder,然後在每個循環上執行builder.append(line),然後傳遞builder.toString()作爲返回呢? – Freddroid
Ja一個StringBuilder會很好用。 – thaussma
我做了改變,迄今爲止都很好。豎起大拇指! – Freddroid