2016-01-10 4 views
2

Я новичок в php и теперь пытаюсь получить данные от MySQL до android.Получить максимальный идентификатор и минимальный идентификатор из определенного столбца в MySQL php

Это мой work_details стол

enter image description here

В RetrieveTotalHours функции, я хочу, чтобы получить мин идентификатор времени в и макс идентификатор тайм-аут от MySQL для андроида через php и, наконец, воспользуйтесь приведенным ниже кодом, чтобы получить общее количество часов.

Предположим, идентификатор 3, поэтому я хочу, чтобы получить timeIn где id=3, TIMEOUT где id=25. Это то, что я пробовал до сих пор.

public void RetrieveTotalHours(final String ID) // ID(twd)=3 
    { 
     class GetHours extends AsyncTask<Void,Void,String> { 
      ProgressDialog loading; 
      @Override 
      protected void onPreExecute() { 
       super.onPreExecute(); 
       loading = ProgressDialog.show(getActivity(),"Fetching...","Wait...",false,false); 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 
       loading.dismiss(); 
       showHours(s); 
      } 

      @Override 
      protected String doInBackground(Void... params) { 
       RequestHandler rh = new RequestHandler(); 
       String s = rh.sendGetRequestParam(Configs.RETRIEVE_HOURS,ID); 
       return s; 
      } 
     } 
     GetHours ge = new GetHours(); 
     ge.execute(); 

    } 
    private void showHours(String json) { 
     try { 
      JSONObject jsonObject = new JSONObject(json); 
      JSONArray result = jsonObject.getJSONArray(Configs.TAG_JSON_ARRAY); 
      JSONObject c = result.getJSONObject(0); 
      String MiNtimeIn = c.getString(Configs.TAG_IN); 
      String MaXtimeOut=c.getString(Configs.TAG_OUT); 

      long difference = 0; 
      if (MiNtimeIn > MaXtimeOut) { 
      difference = (MaXtimeOut + (24 * 60) - MiNtimeIn) - (1 * 60); 
      minutes = (int) (difference % 60); 
      hours = (int) ((difference/60) % (24 * 60)); 
      totalHours.setText(("Total hours : " + hours + ":" + minutes)); 

      } else { 
      // ..... 
      } 

      total.setText(hours); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

Retrieve_hours.php

<?php 
    define('HOST','127.0.0.1:3307'); 
    define('USER','root'); 
    define('PASS',''); 
    define('DB','androiddb'); 

    $con = mysqli_connect(HOST,USER,PASS,DB) or die('unable to connect'); 

    $twd= $_GET['id']; 

$sql = "select timeIn, timeOut from work_details WHERE twd = '".$twd."' AND id IN 
(SELECT MIN(id) FROM work_details WHERE twd ='".$twd."' UNION SELECT MAX(id) FROM work_details WHERE twd='".$twd."')"; 

    $res = mysqli_query($con,$sql); 

    $result=array(); 


    while($row=mysqli_fetch_array($res)){ 
     array_push($result,array('id'=>$row[0],'timeIn'=>$row[1],'timeOut'=>$row[2])); 
    } 

echo json_encode($res); 

mysqli_close($con); 

?> 

Configs

public static final String TAG_IN="timeIn"; 
    public static final String TAG_OUT="timeOut"; 

Ошибка

01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSON.typeMismatch(JSON.java:111) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:159) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at org.json.JSONObject.<init>(JSONObject.java:172) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails.showHours(Edit_WorkDetails.java:248) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails.access$000(Edit_WorkDetails.java:46) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails$1GetHours.onPostExecute(Edit_WorkDetails.java:232) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at com.example.project.myapplication.GUI.Edit_WorkDetails$1GetHours.onPostExecute(Edit_WorkDetails.java:220) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask.finish(AsyncTask.java:632) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask.access$600(AsyncTask.java:177) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:146) 
01-10 19:31:47.355 1298-1298/com.example.project.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5602) 
01-10 19:31:47.360 1298-1298/com.example.project.myapplication W/System.err﹕ at java.lang.reflect.Method.invokeNative(Native Method) 
01-10 19:31:47.360 1298-1298/com.example.project.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Method.java:515) 
01-10 19:31:47.360 1298-1298/com.example.project.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
01-10 19:31:47.360 1298-1298/com.example.project.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
01-10 19:31:47.360 1298-1298/com.example.project.myapplication W/System.err﹕ at dalvik.system.NativeStart.main(Native Method) 
01-10 19:31:47.380 1298-1298/com.example.project.myapplication D/AbsListView﹕ Get MotionRecognitionManager 

Под редакцией

enter image description here

String MiNtimeIn = c.getString(Configs.TAG_IN); 
String MaXtimeOut=c.getString(Configs.TAG_OUT); 

Предположим ID (TWD) 8, я должен получить 21:52 в timeIn и 1:52 в таймаут. MiNtimeIn должен отображать 21:52 (ID 3), MaXtimeOut должен показывать 1:52 (ИН 4)

+0

Если вы получите правильное значение, вы в порядке. –

+0

@GoudaElalfy Я получаю 'W/System.err: org.json.JSONException: Значение

ответ

1

@John,

Проверьте мои ответы об этой ошибке:


Здесь нам вопрос:

echo json_encode($res); 

Вы кодируете переменную $res.

$res = mysqli_query($con,$sql); 

mysqli_query() возвращает mysqli_result объект.

Это нужный набор, вы не можете encode их в JSON.

Вы должны сначала взять его в массив PHP, как и в цикле.

Вы не использовали этот массив для JSON кодирования так echo json_encode($res); не исправить это должно было быть echo json_encode($result);

Вы также можете упростить этот код:

$res = mysqli_query($con,$sql); 
$data=array(); 
while($row=mysqli_fetch_array($res)){ 
    $data[] = $row; 
} 
echo json_encode($data); 

Эта ошибка, потому что вы пытаются разобрать его как JSONObject:

JSONObject jsonObject = new JSONObject(json); 

Это должен быть массив json:

JSONArray jsonArray = new JSONArray(json); 
+0

Спасибо за ваш ответ, но я все еще не могу получить то, что хочу ... –

+0

что именно вы хотели – meda

+0

вы можете проверить еще раз, спасибо –

2

заменить этот раздел:

$result=array(); 
while($row=mysqli_fetch_array($res)){ 
    array_push($result,array('id'=>$row[0],'timeIn'=>$row[1],'timeOut'=>$row[2])); 
} 
echo (json_encode(array("result"=>$result))); 

с:

echo json_encode($res); 

вы создаете много массивов, когда вы делаете push in while loop, вы нажимаете массив в массив $ result, тогда, когда вы эхом, вы помещаете все результаты в другой массив. и это более сложно.

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