2015-03-16 3 views
0

Я разрабатываю тестовое приложение для Android, которое должно отображать некоторые данные из базы данных Mysql и отправляться обратно. Но я не знаю, что не так с моим кодом.Ошибка системы Android org.json.JSONException: Конец ввода на символ 0

Это моя деятельность.

private Spinner spinner; 
// add items into spinner dynamically 
@SuppressWarnings("unused") 
public void addListenerOnSpinnerItemSelection() { 
    spinner = (Spinner) findViewById(R.id.spinner); 

    try { 

     JSONArray data = new JSONArray(getHttpPost(url,params)); 
     final List<String> MyArrList = new ArrayList<String>(); 
     if (data != null) 
     { 

     for (int i = 0; i < data.length(); i++) { 
      JSONObject c = (JSONObject) data.get(i); 
      strLevel = c.getString("lv_name"); 
      MyArrList.add(strLevel); 
      Log.i("Value", strLevel); 

     } 

     ArrayAdapter<String> vehicleAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, MyArrList); 
     vehicleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(vehicleAdapter); 
     } 
     else 
     { 
      Log.i("Value","Null value"); 
     } 

     final AlertDialog.Builder ad = new AlertDialog.Builder(this);   
     spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> arg0, View selectedItemView, 
        int position, long id) { 
      params.add(new BasicNameValuePair("level", strLevel)); 

      try{ 
      strLevel = (spinner.getSelectedItem().toString()); 

      String resultServer = getHttpPost(url,params); 
      Log.i("Send to Server", strLevel); 
      Log.i("Result", resultServer); 
      } 
      catch (Exception e) 
      { 
       Log.e("ERROR", e.toString()); 
      } 

      } 

      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 
       Toast.makeText(SettingActivity.this, 
         "Your Selected : Nothing", 
          Toast.LENGTH_SHORT).show(); 
      } 


     }); 

    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 

Вот мой PHP-файл. Отправленные данные

<?php 
ob_start(); 
$objConnect = mysql_connect("mydbms","xxxx","xxxx"); 
$objDB = mysql_select_db("xxxx"); 

$level = $_POST["level"]; 
setcookie("level", $level, time()+60*60*24*3650); 
$strSQL = "SELECT question.id_lv, level_detail.lv_name FROM question LEFT JOIN level_detail ON question.id_lv = level_detail.id_lv GROUP BY id_lv ASC"; 

$objQuery = mysql_query($strSQL) or die(mysql_error()); 
$intNumField = mysql_num_fields($objQuery); 
$resultArray = array(); 
while($obResult = mysql_fetch_array($objQuery)) 
{ 
    $arrCol = array(); 
    for($i=0;$i<$intNumField;$i++) 
    { 
     $arrCol[mysql_field_name($objQuery,$i)] = $obResult[$i]; 
    } 
    array_push($resultArray,$arrCol); 
} 
mysql_close($objConnect); 

echo json_encode($resultArray); 
ob_end_flush(); 
?> 

Вот файл PHP. Используемые данные.

<?php 
ob_start(); 
$objConnect = mysql_connect("mydbms","xxxx","xxxx"); 
$objDB = mysql_select_db("xxxx"); 

$strQuestionID = $_POST["sQuestion"]; 
$strSQL = "SELECT question.id_question, question.q_name, question.q_means, question.picture_path, level_detail.lv_name FROM question"; 
$strSQL .= " LEFT JOIN level_detail ON question.id_lv = level_detail.id_lv"; 
$strSQL .= " WHERE question.id_lv = '".$_COOKIE['level']."'"; 
$strSQL .= " AND q_type = 'Dragdrop'"; 
$strSQL .= " ORDER BY RAND() LIMIT 1"; 

$objQuery = mysql_query($strSQL) or die(mysql_error()); 
$objResult = mysql_fetch_array($objQuery) or die(mysql_error()); 
    if($objResult) 
    { 
     $arr["QID"] = $objResult["id_question"]; 
     $arr["question"] = $objResult["q_name"]; 
     $arr["means"] = $objResult["q_means"]; 
     $arr["picture"] = $objResult["picture_path"]; 
    } 

mysql_close($objConnect); 

echo json_encode($arr); 
ob_end_flush(); 
?> 

HttpPost.

public String getHttpPost(String url,List<NameValuePair> params) { 
    StringBuilder str = new StringBuilder(); 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost httpPost = new HttpPost(url); 

    try { 
     httpPost.setEntity(new UrlEncodedFormEntity(params)); 
     HttpResponse response = client.execute(httpPost); 
     StatusLine statusLine = response.getStatusLine(); 
     int statusCode = statusLine.getStatusCode(); 
     if (statusCode == 200) { // Status OK 
      HttpEntity entity = response.getEntity(); 
      InputStream content = entity.getContent(); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(content)); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       str.append(line); 
      } 
     } else { 
      Log.e("Log", "Failed to download result.."); 
     } 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return str.toString(); 
} 

Это LogCat.

03-16 11:29:02.108: W/System.err(2016):  org.json.JSONException: End of input at character 0 of 
03-16 11:29:02.112: W/System.err(2016):  at org.json.JSONTokener.syntaxError(JSONTokener.java:450) 
03-16 11:29:02.116: W/System.err(2016):  at org.json.JSONTokener.nextValue(JSONTokener.java:97) 
03-16 11:29:02.116: W/System.err(2016):  at org.json.JSONObject.<init>(JSONObject.java:154) 
03-16 11:29:02.116: W/System.err(2016):  at org.json.JSONObject.<init>(JSONObject.java:171) 
03-16 11:29:02.116: W/System.err(2016):  at com.example.dfromcode.MainActivity.onCreate(MainActivity.java:136) 
03-16 11:29:02.116: W/System.err(2016):  at android.app.Activity.performCreate(Activity.java:5104) 
03-16 11:29:02.116: W/System.err(2016):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
03-16 11:29:02.116: W/System.err(2016):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
03-16 11:29:02.116: W/System.err(2016):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
03-16 11:29:02.120: W/System.err(2016):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-16 11:29:02.120: W/System.err(2016):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
03-16 11:29:02.120: W/System.err(2016):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-16 11:29:02.120: W/System.err(2016):  at android.os.Looper.loop(Looper.java:137) 
03-16 11:29:02.120: W/System.err(2016):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
03-16 11:29:02.124: W/System.err(2016):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-16 11:29:02.124: W/System.err(2016):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-16 11:29:02.132: W/System.err(2016):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-16 11:29:02.132: W/System.err(2016):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-16 11:29:02.132: W/System.err(2016):  at dalvik.system.NativeStart.main(Native Method) 
+0

Можете ли вы отправить стек из логарифма? – hoomi

+0

Я уже редактировал опубликованные. Проверьте его. Спасибо – user3651158

ответ

1

Сообщение об исключении:

org.json.JSONException: End of input at character 0 

подсказывает мне, что ваш код пытается разобрать пустую строку. Другими словами, ваш метод getHttpPost (который вы нам не показали!) Терпит неудачу.

(по ставке, что getHttpPost не правильно обработки случай, когда сервер дает ошибочный ответ.)


Я подозреваю, что это испытание является частью проблемы:

JSONArray data = new JSONArray(getHttpPost(url,params)); 
    ... 
    if (data != null) 

Фактически невозможно для data будет null. Операция new либо собирается предоставить вам ссылку (не нуль!) Для нового объекта, либо она завершится с исключением.

+0

Я пытаюсь удалить условие if (..), но это также ошибка. – user3651158

+1

Итак, выведите строку, которую вы получаете от 'getHttpPost (url, params)' –

+0

Я думаю, что это не отправка данных в файл PHP. но я не знаю, что не так. – user3651158