2016-01-27 7 views
0

У меня есть listView в Деятельность A. При обнаружении длинного нажатия он проверяет, является ли iD максимальным. Если да, список будет удален, и список будет обновлен. В противном случае он отобразит «список не может быть удален».Значение успеха типа java.lang.String не может быть преобразовано в JSONObject

listViewUpdate.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
      public boolean onItemLongClick(final AdapterView<?> p, View v, final int po, long id) { 

       iD = details1.get(po).getID(); 
       AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
       builder.setTitle("Delete"); 
       builder.setMessage("Are you sure you want to delete?"); 
       builder.setIcon(android.R.drawable.ic_dialog_alert); 
       builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int ii) { 
         checkMaxID(po,ID,iD); 
         RetrieveTotalHours(ID); 

        } 
       }); 

       builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() 

         { 
          public void onClick(DialogInterface dialog, int ii) { 
           dialog.dismiss(); 
          } 
         } 

       ); 
       builder.show(); 
       return true; 
      } 
     }); 

     return edit_details; 
    } 

    public void checkMaxID(final int po,final int foreignKey,final String iD) 
    { 
     class check extends AsyncTask<Void,Void,String>{ 
      // ProgressDialog loading; 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       // loading = ProgressDialog.show(Edit_Staff.this,"Updating...","Wait...",false,false); 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       Toast.makeText(getActivity(), s, Toast.LENGTH_LONG).show(); 
       try{ 
        JSONObject json = new JSONObject(s); 
        if(json.getBoolean("success")){ 
         objadapter.removeItem(po); 
         objadapter.notifyDataSetChanged(); 
         Toast.makeText(getActivity(), json.getString("message"), Toast.LENGTH_LONG).show(); 
         Log.e("List", "deleted"); 
        }else{ 
         Toast.makeText(getActivity(), json.getString("message"), Toast.LENGTH_LONG).show(); 
         Log.e("List", " Not deleted"); 
        } 
       }catch(JSONException ex){ 
        ex.printStackTrace(); 
        Log.e("LISDSSS","ex="+ex.toString()); 

       } 
      } 


      @Override 
      protected String doInBackground(Void... params) { 
       HashMap<String,String> hashMap = new HashMap<>(); 
       hashMap.put(Configs.KEY_ID, iD); 
       hashMap.put(Configs.KEY_TWD, String.valueOf(foreignKey)); 
       RequestHandler rh = new RequestHandler(); 
       String s = rh.sendPostRequest(Configs.URL_CHECK_ID, hashMap); 
       return s; 
      } 
     } 

     check ue = new check(); 
     ue.execute(); 
     } 

PHP

<?php 
$json = array(); 
if(isset($_POST['id'], $_POST['twd'])){ 
    /*Importing our db connection script*/ 
    require_once('dbConnect.php'); 
    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
    $id = mysqli_real_escape_string($con, $_POST['id']); 
    $twd = mysqli_real_escape_string($con, $_POST['twd']); 

    $sql ="SELECT MAX(id) as MaxId FROM work_details WHERE twd = '$twd'"; 

    if ($result = mysqli_query($con, $sql)) { 
     /* fetch associative array */ 
     if ($row = mysqli_fetch_row($result)) { 
      if($row[0] === $id){ 
       $sql ="DELETE FROM work_details WHERE id='$id';"; 
       if ($result = mysqli_query($con, $sql)) { 
        echo 'success'; 
        $json['success'] = true; 
        $json['message'] = 'delete is successful'; 
       }else{ 
        $json['success'] = false; 
        $json['message'] = 'list cannot be deleted'; 
       } 
      }else 
       echo 'list cannot be deleted'; 
       $json['success'] = false; 
       $json['message'] = '($row[0] !== $id)';   
      } 
     } else{ 
      $json['success'] = false; 
      $json['message'] = 'select is unsuccessful';    
     } 
    /* close connection */ 
    mysqli_close($con); 
    } 

?> 

список, который максимум Ид удаляются в MySQL, но проблема в список не освежает.

LogCat

E/LISDSSS﹕ ex=org.json.JSONException: Value success of type java.lang.String cannot be converted to JSONObject 

Это то, что я получаю от ex.printStackTrace();, в блоке поймать.

Любая помощь была бы принята с благодарностью.

+0

Каким должен быть выход php-скрипта? Строка или JSON? В свою очередь ваш php-скрипт выводит String. Но в 'onPostExecute' вы ожидаете' JSONObject'. –

+0

@KNeerajLal Я хочу, чтобы он отображал 'success', а затем обновлял список. В противном случае отображение 'list не может быть удалено' и не обновлять список. Скажите, пожалуйста, какой правильный способ решить. Спасибо – John

ответ

0

Существует два способа решить эту проблему. Это способ, которым я чувствую себя лучше или комфортно. Так же, как @ Nikiole91 указал, удалите echo из сценария php. Также распечатайте вывод JSON.

PHP

<?php 
$json = array(); 
if(isset($_POST['id'], $_POST['twd'])){ 
    /*Importing our db connection script*/ 
    require_once('dbConnect.php'); 
    /* check connection */ 
    if (mysqli_connect_errno()) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 
    $id = mysqli_real_escape_string($con, $_POST['id']); 
    $twd = mysqli_real_escape_string($con, $_POST['twd']); 

    $sql ="SELECT MAX(id) as MaxId FROM work_details WHERE twd = '$twd'"; 

    if ($result = mysqli_query($con, $sql)) { 
     /* fetch associative array */ 
     if ($row = mysqli_fetch_row($result)) { 
      if($row[0] === $id){ 
       $sql ="DELETE FROM work_details WHERE id='$id';"; 
       if ($result = mysqli_query($con, $sql)) { 
        $json['success'] = true; 
        $json['message'] = 'delete is successful'; 
       }else{ 
        $json['success'] = false; 
        $json['message'] = 'list cannot be deleted'; 
       } 
      }else 
       $json['success'] = false; 
       $json['message'] = '($row[0] !== $id)';   
      } 
     } else{ 
      $json['success'] = false; 
      $json['message'] = 'select is unsuccessful';    
     } 
    /* close connection */ 
    mysqli_close($con); 
    } 
    //print the json 
    echo json_encode($json); 
?> 

Теперь ваш Android код должен работать нормально.

+0

Спасибо !!!!!!!! – John

2

Метод PHP возвращает строку "успех" из-за эха в:

$sql ="DELETE FROM work_details WHERE id='$id';"; 
if ($result = mysqli_query($con, $sql)) { 
    echo 'success'; 
    $json['success'] = true; 
    $json['message'] = 'delete is successful'; 

Метод onPostExecute() не здесь

JSONObject json = new JSONObject(s); 

, так как результат Строка 's' является Строковый «успех», возвращаемый эхом вместо объекта $ json.

Попробуйте удалить эти эхо.

+0

Что делать, если я хочу, чтобы он успешно удалялся после удаления списка? – John

+0

Из браузера, использующего метод php? Вы можете передать другую переменную из андроида или веб-приложения и использовать только эхо, если вы используете его из Интернета. Вы уже делаете тост от android, вы можете добавить предупреждение об успехе одинаково :) – Nikiole91

+0

спасибо большое :) – John

Смежные вопросы