У меня есть форма ввода в моем приложении Android
введенные данные будут сохранены в онлайн базе данных
Теперь я могу сохранить данные и загрузить изображение с помощью AsyncTask.
данные были успешно загружены, но AsyncTask возвращает java.lang.NullPointerException
вот мой класс AsyncTask:
private class SaveAsetData extends AsyncTask<String, Void, String>{
ProgressDialog pd = new ProgressDialog(FormAsetTambah.this);
BufferedReader in = null;
final TextView errorText = (TextView) findViewById(R.id.error_text);
protected void onPreExecute(){
pd.setMessage(Functions.GetString(getApplicationContext(), R.string.progress_dialog_loading));
pd.show();
}
@Override
protected String doInBackground(String... arg0) {
try {
String URL_DESTINATION = URLVariables.get_base_url()+"aset_tambah_pic.php";
Bitmap bm = BitmapFactory.decodeFile(arg0[7]);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bm.compress(CompressFormat.JPEG, 50, bos);
HttpClient httpClient = CustomHttpClient.getHttpClient();
HttpPost postRequest = new HttpPost(URL_DESTINATION);
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("uploadedfile", new FileBody(new File(arg0[7])));
reqEntity.addPart("nama", new StringBody(arg0[0]));
reqEntity.addPart("detail", new StringBody(arg0[1]));
reqEntity.addPart("keterangan", new StringBody(arg0[2]));
reqEntity.addPart("longitude", new StringBody(arg0[3]));
reqEntity.addPart("latitude", new StringBody(arg0[4]));
reqEntity.addPart("kategori", new StringBody(arg0[5]));
reqEntity.addPart("daerah", new StringBody(arg0[6]));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String NL = System.getProperty("line.separator");
while((line = in.readLine()) != null){
sb.append(line+NL);
}
in.close();
String result = sb.toString();
return result;
}catch(Exception e){
return e.toString();
}
}
protected void onPostExecute(String result){
try{
String output = result.toString().trim();
error_text.setText(output);
if(output.equals("1")){
Functions.MakeToast(getApplicationContext(), ERR_SAVED);
Intent daftarAset = new Intent(getApplicationContext(), DaftarAset.class);
startActivity(daftarAset);
finish();
}else if(output.equals("2")){
Functions.MakeToast(getApplicationContext(), ERR_QUERY);
}else{
Functions.MakeToast(getApplicationContext(), ERR_HTTPFAIL);
}
}catch(Exception e){
Functions.MakeToast(getApplicationContext(), "onPostExecute fail : "+e.toString()); // it failed here
}
pd.dismiss();
}
}
ты знаешь, где моя вина?
или какой-нибудь совет / решение, чтобы сделать это лучше?
Обновление
Вот мое исключение на logcat
07-27 21:54:09.222: WARN/System.err(17600): java.lang.NullPointerException
07-27 21:54:09.222: WARN/System.err(17600): at com.ngimagrid.nigmago.FormAsetTambah$SaveData.onPostExecute(FormAsetTambah.java:567)
07-27 21:54:09.222: WARN/System.err(17600): at com.ngimagrid.nigmago.FormAsetTambah$SaveData.onPostExecute(FormAsetTambah.java:1)
07-27 21:54:09.222: WARN/System.err(17600): at android.os.AsyncTask.finish(AsyncTask.java:417)
07-27 21:54:09.222: WARN/System.err(17600): at android.os.AsyncTask.access$300(AsyncTask.java:127)
07-27 21:54:09.222: WARN/System.err(17600): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
07-27 21:54:09.222: WARN/System.err(17600): at android.os.Handler.dispatchMessage(Handler.java:99)
07-27 21:54:09.222: WARN/System.err(17600): at android.os.Looper.loop(Looper.java:123)
07-27 21:54:09.222: WARN/System.err(17600): at android.app.ActivityThread.main(ActivityThread.java:3687)
07-27 21:54:09.222: WARN/System.err(17600): at java.lang.reflect.Method.invokeNative(Native Method)
07-27 21:54:09.222: WARN/System.err(17600): at java.lang.reflect.Method.invoke(Method.java:507)
07-27 21:54:09.222: WARN/System.err(17600): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
07-27 21:54:09.222: WARN/System.err(17600): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
07-27 21:54:09.222: WARN/System.err(17600): at dalvik.system.NativeStart.main(Native Method)
UPDATE
вот мой код на стороне сервера:
<?php
require_once("functions.php");
$nama = trim($_POST['nama']);
$detail = trim($_POST['detail']);
$keterangan = trim($_POST['keterangan']);
$longitude= trim($_POST['longitude']);
$latitude = trim($_POST['latitude']);
$kategori = trim($_POST['kategori']);
$daerah = trim($_POST['daerah']);
$target_path = "images/";
$file_tmp_name = $_FILES['uploadedfile']['tmp_name'];
$file_name = str_replace(array(" ","-"), "_", strtolower(basename($_FILES['uploadedfile']['name'])));
$target_path = $target_path.$file_name;
if(empty($nama) || empty($detail) || empty($keterangan) || empty($longitude) || empty($latitude) || empty($kategori) || empty($daerah) || empty($file_tmp_name)){
echo "5";
}else{
openDB();
$get_id_kategori = mysql_fetch_array(mysql_query("SELECT `id_kategori` FROM `aset_kategori` WHERE `kategori`='$kategori'"));
$get_id_daerah = mysql_fetch_array(mysql_query("SELECT `id_daerah` FROM `aset_daerah` WHERE `daerah`='$daerah'"));
$tanggal = date("Y-m-d H:i:s");
$sql = "INSERT INTO `aset` (`id_aset` ,`id_daerah` ,`id_kategori` ,`nama` ,`detail` ,`longitude` ,`latitude` ,`keterangan` ,`status` ,`tanggal`)
VALUES (NULL , '$get_id_daerah[0]', '$get_id_kategori[0]', '$nama', '$detail', '$longitude', '$latitude', '$keterangan', 'Y', '$tanggal');";
if(mysql_query($sql)){
if(!file_exists($target_path)){
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
$id_aset = mysql_fetch_array(mysql_query("SELECT `id_aset` FROM `aset` ORDER BY `id_aset` DESC LIMIT 1"));
mysql_query("INSERT INTO `aset_foto` (`id_foto`, `id_aset`, `foto`) VALUES (NULL, '$id_aset[0]', '$file_name');");
echo "1"; // success
} else{
echo "2"; // failed
}
}else{
echo "3"; // failed
}
}else{
echo "4"; //failed
}
closeDB();
}
?>
если ответ равен 1, то процесс сохранения был успешным