/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package my.home.lehome.asynctask;
import android.content.Context;
import android.os.AsyncTask;
import android.text.TextUtils;
import android.util.Log;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.json.JSONTokener;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.ref.WeakReference;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLDecoder;
import my.home.common.FourStateHandler;
import my.home.lehome.R;
/**
* Created by legendmohe on 15/5/29.
*/
public class LoadLongMsgAsyncTask extends AsyncTask<String, Long, Integer> {
private static final String TAG = "LoadLongMsgAsyncTask";
FourStateHandler mHandler;
WeakReference<Context> mContext;
public LoadLongMsgAsyncTask(FourStateHandler handler, Context context) {
super();
mHandler = handler;
mContext = new WeakReference<>(context);
}
@Override
protected void onPreExecute() {
if (mHandler != null)
mHandler.start();
}
@Override
protected Integer doInBackground(String... params) {
String url = params[0];
Log.d(TAG, "background task url: " + url);
if (TextUtils.isEmpty(url))
return 400;
HttpResponse response = null;
String content = null;
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(url));
response = client.execute(request);
content = EntityUtils.toString(response.getEntity());
} catch (URISyntaxException | IOException e) {
mHandler.getWhat().putString("err_msg", mContext.get().getString(R.string.long_msg_http_exception));
return 400;
}
JSONTokener jsonParser = new JSONTokener(content);
try {
JSONObject cmdObject = (JSONObject) jsonParser.nextValue();
content = cmdObject.getString("data");
} catch (Exception e) {
mHandler.getWhat().putString("err_msg", mContext.get().getString(R.string.long_msg_parse_exception));
return 400;
}
content = content.substring(4);
try {
content = URLDecoder.decode(content, "UTF-8");
} catch (UnsupportedEncodingException e) {
mHandler.getWhat().putString("err_msg", mContext.get().getString(R.string.long_msg_parse_exception));
return 400;
}
mHandler.getWhat().putString("response", content);
return 200;
}
@Override
protected void onPostExecute(Integer repCode) {
if (mHandler == null) {
return;
}
if (repCode == 200) {
mHandler.complete(true);
} else {
mHandler.complete(false);
}
mHandler = null;
}
@Override
protected void onCancelled() {
if (mHandler == null) {
return;
}
mHandler.cancel();
mHandler = null;
}
}