2013-05-05 2 views
0

Я использую Android для входа в php-based web-сервис, размещенный на 000webohst.com. Это мой основной файл:Ответ JSON не получает ничего

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_ccse); 

    user = (EditText)findViewById(R.id.userid_edit); 
    password = (EditText) findViewById(R.id.passwd_edit); 
    lbl = (TextView) findViewById(R.id.label); 
} 

public void login(View view) 
{ 
    String userID = user.getText().toString(); 
    String passWord = password.getText().toString(); 

    parameters = new ArrayList<NameValuePair>(); 
    parameters.add(new BasicNameValuePair("tag", "login")); 
    parameters.add(new BasicNameValuePair("userid", userID)); 
    parameters.add(new BasicNameValuePair("password", passWord)); 

    new loginTask().execute(); 

    Toast.makeText(this, "Login task executed!", Toast.LENGTH_LONG).show(); 
} 

public class loginTask extends AsyncTask<Void, Void, JSONObject> { 

    @Override 
    protected JSONObject doInBackground(Void... params) { 

     jsonParser = new JSONParser(); 

     return jsonParser.getJSONFromUrl(loginURL, parameters); 
    } 

    protected void onPostExecute(Void v) { 

     try { 

       if(json.getString("success") != null) { 

        JSONObject json_user = json.getJSONObject("user"); 

        user.setText(""); 
        password.setText(""); 

        lbl.setText("Hello " + json_user.getString("name")); 

       } 
       else { 

        lbl.setText("Error!"); 

       } 

      } 
      catch (JSONException e) { 

       e.printStackTrace(); 

      } 
    } 

} 

Тогда это мой JSON Parser файл:

public class JSONParser { 

static InputStream is = null; 
static JSONObject jObj = null; 
static String json = ""; 

public JSONParser() { 

} 

public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) { 

    try { 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpPost httpPost = new HttpPost(url); 
     httpPost.setEntity(new UrlEncodedFormEntity(params)); 

     HttpResponse httpResponse = httpClient.execute(httpPost); 
     HttpEntity httpEntity = httpResponse.getEntity(); 
     is = httpEntity.getContent(); 

    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    try { 
     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 + "\r\n"); 
     } 
     is.close(); 
     json = sb.toString(); 
     Log.e("JSON", json); 
    } catch (Exception e) { 
     Log.e("Buffer Error", "Error converting result " + e.toString()); 
    } 
    try { 
     jObj = new JSONObject(json); 
    } catch (JSONException e) { 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 

    return jObj; 
} 

И это PHP-файл, который я пытаюсь подключиться к:

 <?php 

    header('Content-Type: application/json; charset=utf-8'); 
    require ('dbconnect.php'); 
    mysql_select_db("a7085864_ccse", $con) or die('Could not connect: ' . mysql_error()); 


    if(isset($_POST['tag']) && $_POST['tag'] != "") { 

    $response=array("success" => 0, "error" => 0); 

    $userid = $_POST['userid']; 
    $password = $_POST['password']; 

    $sql="select StudentName from student where StudentID='$userid' and StudentPw='$password'"; 
    $result=mysql_query($sql); 

    $count=mysql_num_rows($result); 

      if($count==1) { 
       while($row = mysql_fetch_array($result)) { 

        $response["success"]=1; 
        $response["user"]["name"]=$row["StudentName"]; 
        echo json_encode($response); 
       } 

      } 

      else { 

       $response["error"]=1; 
       $response["error_msg"] = "Error logging in."; 
       echo json_encode($response); 

      } 

    } 
    else { 

    echo json_encode("Error getting data!"); 

    } 


    exit(); 

    ?> 

Однако , на Logcat я, похоже, не вижу, чтобы мой json возвращал что-либо по строке Log.e («JSON», json). Раньше, по крайней мере, он все равно возвращал бы аналитическую ошибку кода с веб-сервера. Кроме того, за ним следует ошибка:

05-06 01:06:33.511: E/JSON Parser(1835): Error parsing data org.json.JSONException: End of input at character 0 of 

Любая идея о том, что вызывает это? Я не могу понять, что ошибка исходит из скрипта PHP или программы Android.

+0

Чтобы убедиться, что ошибка не в PHP скрипт с помощью приложения, такие как этот http://goo.gl/PKOpK для chrome: вы можете установить url php a параметры сообщения и посмотреть ответ. Кроме того, ваш php-код, как он написан, подвержен атакам SQL-инъекций. Используйте PDO и его подготовленный оператор. – LuckyStarr

ответ

0

Попробуйте этот код

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    public JSONParser() { 

    } 

    public JSONObject getJSONFromUrl(String url, List<NameValuePair> params) { 

     try { 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httpPost = new HttpPost(url); 
      httpPost.setEntity(new UrlEncodedFormEntity(params)); 

      HttpResponse httpResponse = httpClient.execute(httpPost); 
      String json = EntityUtils.toString(httpResponse.getEntity()); 

      Log.e("JSON", json); 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     return jObj; 
    } 

EntityUtils класс из пакета -> org.apache.http.utils

0

В вашем login methhod.

Должно быть.

public void login(View view) 
{ 
    String userID = user.getText().toString(); 
    String passWord = password.getText().toString(); 

    parameters = new ArrayList<NameValuePair>(); 
    parameters.add(new BasicNameValuePair("tag", "login")); 
    parameters.add(new BasicNameValuePair("userid", userID)); 
    parameters.add(new BasicNameValuePair("password", passWord)); 

    new loginTask().execute(); 

    Toast.makeText(this, "Login task executed!", Toast.LENGTH_LONG).show(); 
} 
+0

Это была такая ошибка новобранец. Но, тем не менее, моя проблема с пустым ответом JSON все еще здесь. Но спасибо, что указали на это. – rach

+0

эй Просто попробуйте запустить код, присвоив значения 'userID' и' passWord' i.e 'String userID =" abc "' 'String passWord =" 123 "' – Ayush

+0

Все еще не работает. Log.e («JSON», json) все еще ничего не отображает. Существует тот же синтаксический разбор. – rach

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