JSON 形式でサーバーにデータを送信したいと考えています。まず、AsyncTask を使用しなくても問題なく動作しましたが、後でエラーが発生し、AsyncTask を使用してネットワーク操作を行うようにクラスを変更する必要がありました。しかし、Asynctask を使用するように変更すると、HTTP 応答ステータス コード 500 が返されました。クラス内のコード行は変更しませんでした。私は何をすべきか?
Android コード
public class Register extends AsyncTask<String, Void, JSONObject> {
private static String registerURL = "";
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
private List<NameValuePair> params = null;
private AlertDialog.Builder ad;
private static String KEY_SUCCESS = "success";
private static String KEY_ERROR = "error";
private static String KEY_ERROR_MSG = "Unknown";
private Context mContext;
public Register(Context context) {
registerURL = "http://sit-edu4.sit.kmutt.ac.th/csc498/53270327/Boss/sftrip/index.php/register";
params = new ArrayList<NameValuePair>();
mContext = context;
ad = new AlertDialog.Builder(mContext);
}
protected JSONObject doInBackground(String... strings) {
params.add(new BasicNameValuePair("email", strings[0].toString()));
params.add(new BasicNameValuePair("password", strings[1].toString()));
params.add(new BasicNameValuePair("firstname", strings[2].toString()));
params.add(new BasicNameValuePair("lastname", strings[3].toString()));
params.add(new BasicNameValuePair("mobile", strings[4].toString()));
params.add(new BasicNameValuePair("relativemobile1", strings[5].toString()));
params.add(new BasicNameValuePair("relativemobile2", strings[6].toString()));
params.add(new BasicNameValuePair("relativemobile3", strings[7].toString()));
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(registerURL);
// Making HTTP request
try {
// defaultHttpClient
httpPost.setEntity(new UrlEncodedFormEntity(params));
HttpResponse httpResponse = httpClient.execute(httpPost);
StatusLine statusLine = httpResponse.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} else {
Log.e("Log", "Failed to download result.." + statusCode);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (is != null) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
Log.e("JSON", json);
} else {
Log.e("Log", "Something wrong with IS");
}
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONObject(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
protected void onPostExecute(JSONObject json) {
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
// user successfully registred
// Launch Dashboard Screen
ad.setTitle("Congratulation!");
ad.setMessage("You have registered successfully");
ad.setPositiveButton("Login now!", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Intent dashboard = new Intent(mContext, LoginActivity.class);
// Close all views before launching Dashboard
dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivity(dashboard);
// Close Registration Screen
//finish();
}
});
ad.show();
} else if (json.getString(KEY_ERROR).equals("1")){
// Error in login
String error_msg = json.getString(KEY_ERROR_MSG);
ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);
ad.setMessage(error_msg);
ad.show();
} else {
ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);
ad.setMessage("Something wrong");
ad.show();
}
} else {
ad.setTitle("Error! ");
ad.setIcon(android.R.drawable.btn_star_big_on);
ad.setPositiveButton("Close", null);
ad.setMessage("Something wrong");
ad.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}
サーバーコード (codeigniter を使用)
class Register extends CI_Controller {
function __construct() {
parent::__construct();
/*
load you helper library
*/
/*
load you model
*/
$this -> load -> model('login_model');
}
function index() {
$userEmail = $this->input->post("email");
$userPass = $this->input->post("password");
$userFirstName = $this->input->post("firstname");
$userLastName = $this->input->post("lastname");
$userMobile = $this->input->post("mobile");
$userRM1 = $this->input->post("relativemobile1");
$userRM2 = $this->input->post("relativemobile2");
$userRM3 = $this->input->post("relativemobile3");
$this->login_model->create_member($userEmail, $userPass, $userFirstName, $userLastName, $userMobile,
$userRM1, $userRM2, $userRM3);
$query = $this->login_model-> check_email($userEmail);
if($query) {
$arr['success'] = "1";
$arr['error'] = "0";
$arr['error_msg'] = "";
} else {
$arr['success'] = "0";
$arr['error'] = "1";
$arr['error_msg'] = "Something wrong with your registration";
}
echo json_encode($arr);
}
}