//This is source code of favorite. Copyrightⓒ. Tarks. All Rights Reserved.
package com.tarks.favorite.connect;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import com.tarks.favorite.ModApplication;
import com.tarks.favorite.global.Globalvariable;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
public class AsyncHttpTask extends AsyncTask<String, Void, String> {
private Handler handler;
int DataContent;
String responseData;
String fileName;
String url, myResult;
Context context;
ArrayList paramNames, paramValues, files;
int handlernum = 1;
// String[] files;
// ModApplication
static ModApplication mod = ModApplication.getInstance();
// Upload
private static FileInputStream mFileInputStream = null;
private static URL connectUrl = null;
public AsyncHttpTask(Context cx, String urls, Handler handler,
ArrayList pNames, ArrayList pValues, ArrayList fe, int hnum, int Data) {
//Log.i("Test", "asyc callec");
Globalvariable.okbutton = false;
// Set handler
this.handler = handler;
// Set context
context = cx;
// set url
url = urls;
// Arraylists
paramNames = pNames;
paramValues = pValues;
files = fe;
// set hanler return number
handlernum = hnum;
DataContent = Data;
// doInBackground("");
super.execute("");
}
@Override
protected String doInBackground(String... urls) {
// urls[0]의 URL부터 데이터를 읽어와 String으로 리턴
// Log.i("URL", url);
return Task(url);
}
@Override
public void onPreExecute() {
// Log.i("Test", "onPreExecute Called on global");
}
@Override
protected void onPostExecute(String responseData) {
// Log.i("Message", "Post");
// Log.i("Message", "1");
Message msg = handler.obtainMessage();
msg.what = handlernum;
msg.obj = myResult;
msg.arg1 = DataContent;
handler.sendMessage(msg);
// Log.i("hey", myResult);
Globalvariable.okbutton = true;
}
public String Task(String url) {
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
try {
connectUrl = new URL(url);
// open connection
HttpURLConnection conn = (HttpURLConnection) connectUrl
.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
// write data
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
OutputStreamWriter out = new OutputStreamWriter(
conn.getOutputStream(), "UTF-8");// EUC-KR");
// Check it is null
if (paramNames != null && paramValues != null) {
for (int i = 0; i < paramNames.size(); i++) {
// Log.i("value", paramNames.get(i).toString());
out.write(twoHyphens + boundary + lineEnd); // 필드 구분자
// 시작
out.write("Content-Disposition: form-data; name=\""
+ paramNames.get(i) + "\"" + lineEnd);
out.write(lineEnd);
out.write(paramValues.get(i).toString());
// Log.i("value", paramValues.get(i).toString());
out.write(lineEnd);
}
}
if (files != null) {
// Log.i("Access", "We can access to files");
for (int i = 0; i < files.size(); i++) {
// ======================start
// fis = new FileInputStream(files.get(files.size()-1));
mFileInputStream = new FileInputStream(files.get(i)
.toString());
// Log.d("Test", "mFileInputStream is " + mFileInputStream);
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\""
+ files.get(i).toString() + "\"" + lineEnd);
dos.writeBytes(lineEnd);
int bytesAvailable = mFileInputStream.available();
int maxBufferSize = 1024;
int bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
int bytesRead = mFileInputStream
.read(buffer, 0, bufferSize);
// Log.d("Test", "image byte is " + bytesRead);
// read image
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = mFileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = mFileInputStream
.read(buffer, 0, bufferSize);
}
dos.writeBytes(lineEnd);
// ======================end
}
}
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
if (files != null) {
mFileInputStream.close();
}
// close streams
// Log.e("Test" , "File is written");
dos.flush(); // finish upload...
out.flush(); // finish upload...
// get response
int ch;
InputStreamReader tmp = new InputStreamReader(
conn.getInputStream(), "UTF-8");
BufferedReader reader = new BufferedReader(tmp);
StringBuilder builder = new StringBuilder();
String str;
while ((str = reader.readLine()) != null) { // 서버에서 라인단위로 보내줄
// 것이므로 라인단위로 읽는다
builder.append(str); // View에 표시하기 위해 라인 구분자 추가
}
myResult = builder.toString(); // 전송결과를 전역 변수에 저장
// Log.e("Test", "result = " + myResult);
// Log.i("Result value", myResult + ".");
dos.close();
out.close();
// onPostExecute(myResult);
} catch (Exception e) {
e.printStackTrace();
// TODO: handle exception
// Infoalert(context, mod.getString(R.string.error),
// mod.getString(R.string.error_des), mod.getString(R.string.yes));
//Change to error code
handlernum = -1;
}
return null;
}
}