2013-07-31 3 views
1

У меня никогда не было такого приложения для Android, которое будет общаться с сервером. Я хочу, чтобы я хотел отправить имя пользователя и пароль на сервер, сопоставить их на сервере и когда будет показано имя пользователя и пароль следующего экрана. Следующий экран должен иметь только один текстовый вид с надписью «Приветственное имя пользователя».Android: клиент-сервер, аутентификация пользователя

Я хочу, чтобы вы, ребята, чтобы сказать мне шаг за шагом руководство для -

  1. То, что я должен написать в Android App?
  2. Что следует писать на стороне сервера?
  3. Как и где писать код сервера?
  4. На каком языке следует использовать сервер?
  5. Как сохранить несколько имен пользователей на сервере?

У меня нет настоящего сервера. Я буду запускать весь код на localhost.

UPDATE:

Это то, что я написал в своем Android приложение. Я не знаю, насколько это правильно.

public void clicked(View v) { 
    System.out.println("button clicked"); 
    EditText username = (EditText) findViewById(R.id.edituser); 
    EditText password = (EditText) findViewById(R.id.editpass); 

    Editable user = username.getText(); 
    Editable pass = password.getText(); 

    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new HttpPost("http://192.168.1.101:8080//WebApplication1/sendresponse.java"); 

    try { 
     // Add your data 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
     nameValuePairs.add(new BasicNameValuePair("username", user.toString())); 
     nameValuePairs.add(new BasicNameValuePair("password", pass.toString())); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 

     Header[] headers = response.getAllHeaders(); 
     int len = headers.length; 
     for(int i=0; i<len; i++) { 
      System.out.println("header : " + headers[i]); 
     } 

     InputStream inputStream = response.getEntity().getContent(); 

     InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 

     BufferedReader bufferedReader = new BufferedReader(inputStreamReader); 

     StringBuilder stringBuilder = new StringBuilder(); 

     String bufferedStrChunk = null; 

     while((bufferedStrChunk = bufferedReader.readLine()) != null){ 
      stringBuilder.append(bufferedStrChunk); 
     } 
     System.out.println("response : " + stringBuilder.toString()); 

    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
    } 



} 

Я не знаю, какой язык будет лучше всего на стороне сервера. Должен ли я использовать REST на стороне сервера?

+1

Кто отвечает на этот вопрос должен получить +5000 представитель –

+0

@Ken Wolf Вы смеетесь надо мной? Можете ли вы ответить на этот вопрос, если знаете все это? –

+0

Возможно, если вы попытаетесь шаг за шагом (используя Google) и покажите свой код, мы можем помочь вам в каждом вопросе. –

ответ

8

Я буду аутентифицироваться с использованием php. Прежде всего,

HttpPost httppost = new HttpPost("http://10.0.2.2/login.php"); 

10.0.2.2 reffers localhost from emulator. Для реального устройства вам нужен настоящий сервер.

Вы должны создать DB & таблицу на локальном хосте с помощью PHPMyAdmin (Предполагая, что вы используете WAMP/ЛАМПА)

Теперь мой файл PHP выглядит так:.

<?php 
$link=mysql_connect('localhost','root','password');// give your username & password 
if (!$link) { 
    die('Could not connect to MySQL: ' . mysql_error()); 
} 
mysql_select_db("database_name"); 
$sql=mysql_query("SELECT * FROM Login_Table_name where user_name = '".$_REQUEST['username']."' and password = '".$_REQUEST['password']."'"); 
if (mysql_num_rows($sql) > 0) { 
echo "success"; 
}else{ 
echo "login failed"; 
} 
mysql_close($link); 
?> 

(Предполагая, что вы знаете, где для размещения php-файла, для localhost) (папка www для WAMP/LAMP)

Теперь, возвращаясь к java, оставьте шаги до этой строки, как есть. И изменить код отсюда до

HttpResponse response = httpclient.execute(httppost); 
HttpEntity entity=response.getEntity(); 
String res=EntityUtils.toString(entity); 
if(res.contains("success")){ 
//login success 
} 
else{ 
//loginfailed 
} 

Теперь вы можете сказать, как хранить имена пользователей и пароли. Да, просто создайте другую регистрационную форму, оберните имяvaluepairs и отправьте на другой php, в котором запрос sql изменится на «INSERT INTO».

NB: Если вы запустите это на эмуляторе с API-14 +, вы получите исключение - сеть по исключению основной нити. Вы должны использовать AsynvTask. поэтому попробуйте в API-10.

EDIT:

Если вам нужны значения обратно от сервера, закодировать в формате JSON и отправить.изменения будут, как,

PHP

if(mysql_num_rows($sql)>0){ 
    while($row=mysql_fetch_assoc($sql)){// you can use either fetch_assoc or fetch_array 
    $result[]=$row; 
    } 
echo json_encode($result); 
} 

Java

String res=EntityUtils.toString(entity); 
Log.d("TAG","From server:"+res);// to see what server sent 
if(! res.contains("login failed")){ 
JSONArray jArray = new JSONArray(res); 
if(jArray!=null){ 
      for(int i=0;i<jArray.length();i++){ 
       JSONObject jobj = jArray.getJSONObject(i); 
       //now, you catch the values using column_name. As, 
id=jobj.getInt("_id");name= jobj.getString("Name"); 
//Note that here _id,Name are column names. Refer server result in logcat for better understanding 
      } 
} 

} 
+0

Спасибо, человек тонны. Я буду работать над этим подходом. Но я не понимаю первую строку вашего php-кода. И где мы получаем отправленное имя пользователя и пароль? И как я могу отправить имя пользователя на мобильный, когда логин будет успешным? –

+0

Вы знакомы с phpmyadmin? Первая строка - это ссылка на локальный хост. вы должны указать свое имя пользователя и пароль (то же, что и для phpmyadmin). '$ _REQUEST []' получает элементы из namevaluepair. – Nizam

+0

Я отредактировал ответ для ответа сервера. Проверь это. – Nizam

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