Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.67
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
#1

Использование общего объекта DefaultHttpClient в AsyncTask - Программирование Android

06.06.2014, 11:12. Просмотров 2509. Ответов 5
Метки нет (Все метки)

Необходимо реализовать авторизацию на сайте.Целью является использование одной сессии для всех процессов(если я не ошибаюсь, то при создании новых объектов DefaultHttpClient и HttpPost придется заново отправлять свои данные для входа на сайт). Но классы для процессов нужно использовать не вложенные а отдельные.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package com.example.http;
 
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
 
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
 
public class MainActivity extends Activity {
    
    HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://silicon-valley-rus.com/server/auth.php");
    
    EditText ed1,ed2;
    TextView tv;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        ed1 = (EditText)findViewById(R.id.editText1);
        ed2 = (EditText)findViewById(R.id.editText2);
        tv = (TextView)findViewById(R.id.textView1);
    }
    
    public void Post(View v){
        
        new MyTask().execute();
            
    }
 
     public void Parse(View v){
        
        new JSON().execute();
        
    }
    
    class MyTask extends AsyncTask<Void, Void, Void> {
        
        String z,x;
 
        @Override
        protected void onPreExecute() {
          super.onPreExecute();
         Log.d("tag", "pre");
         z = ed1.getText().toString();
         x = ed2.getText().toString();
        }
 
        @Override
        protected Void doInBackground(Void... params) {
            Post();          
            return null;
        }
 
        @Override
        protected void onPostExecute(Void result) {
          super.onPostExecute(result);
          Log.d("tag", "onPost");
         
        }
    
        protected void Post(){
            
            
            try {
        
                
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("login", z));
                nameValuePairs.add(new BasicNameValuePair("password", x));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs,"UTF-8"));
 
             
                HttpResponse response = httpclient.execute(httppost);
                
                
            } catch (ClientProtocolException e) {
              
            } catch (IOException e) {
              
            }
            
        }
 
       class JSON extends AsyncTask<Void,Void,Void>{
        
        String z;
        String str = "";
        
        protected void onPreExecute() {
            super.onPreExecute();
           Log.d("JSON", "onPre");
           
        }
          
        @Override
        protected Void doInBackground(Void... params) {
            
            JSONObject json = null;
            
            HttpResponse response;
       
             
            try {
                response = httpclient.execute(httppost);
                str = EntityUtils.toString(response.getEntity(), "UTF-8");
                 
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
             
             
            try{
                JSONArray jArray = new JSONArray(str);
                json = jArray.getJSONObject(0);
                
               
                z = json.getString("users");
                
                
                 
                 
            } catch ( JSONException e) {
                e.printStackTrace();                
            }       
             
            
            return null;
        }
        
        protected void onPostExecute(Void result) {
              super.onPostExecute(result);
              Log.d("JSON", "onPost");
           
              
        }
        
            
        
    }
 
    
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 11:12     Использование общего объекта DefaultHttpClient в AsyncTask
Посмотрите здесь:

Как написать простейший запрос на сервер без использование AsyncTask - Программирование Android
как написать простейший запрос на сервер? без использование AsyncTask. у меня есть локальный сервер который возвращает JSON адрес...

DefaultHttpClient - Программирование Android
Ситуация такая - есть у меня DefaultHttpClient - посылаю я запрос на сервер - во время посылки запроса на сервер пропадает интернет...

DefaultHttpClient - Программирование Android
Вопрос такой У меня есть простой get запрос DefaultHttpClient httpclient = new DefaultHttpClient(); try { HttpGet request...

AsyncTask и get() - Программирование Android
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный ProgressDialog. После выполнения задачи нужно выполнить действия....

AsyncTask - Программирование Android
Здравствуйте, при использовании двух одинаковых методов получается разный результат. AsyncTask в одном случае успешно передает данные в...

AsyncTask - Программирование Android
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI нельзя. Когда я пытаюсь обновить вывод (в EditText) в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.06.2014, 11:47     Использование общего объекта DefaultHttpClient в AsyncTask #2
shulyakyarik, Вам в любом случае это придётся делать, если сервер авторизует Вас по хедеру. Если же просто по sessionId, то создание нового HttpBaseRequest(post,put,get,delete) не должно обнулять сессию.
shulyakyarik
10 / 10 / 3
Регистрация: 28.03.2014
Сообщений: 156
06.06.2014, 13:33  [ТС]     Использование общего объекта DefaultHttpClient в AsyncTask #3
YuraAAA, есть ли какие-то другие способы авторизации? Можете что-то рассказать об sessionId?
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.06.2014, 14:24     Использование общего объекта DefaultHttpClient в AsyncTask #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
shulyakyarik, обычно делят на 2 вида авторизацию.

1. Стандартная через сессии. Вы проверяете данные post запроса на логин, открывается сессия, в сессию передаёте, к примеру, юзера. (Node js pseudo code)

Javascript
1
2
3
4
5
6
7
app.post("/login", function(req, res, next) {
var username = req.body.username;
var password = req.body.password;
User.findOne({username:username},......){
//Типа всё окей.
req.session.user = user;
}

});

И потом его можно находить так же.
Javascript
1
2
3
4
5
6
app.get("/myprofile", function(req,res,next) {
if (req.session && req.session.user) {
var currentUser = req.session.user;
//Вот так идентифицируется пользователь.
}
}
2. Такой способ не подходит как правило для мобильных устройств. Тогда используем токен.


Юзер шлёт запрос с телефона на логин -> Сервер проверяет данные, если всё окей - отправляет на девайс token-ключ. Это что-то типа sessionId.

Все последующие запросы с телефона отправляются с хэдером, например, x-token:your_token.

Сервер проверяет токен и по нему идентифицирует юзера. Если токена нет, или же он устарел - сервер не пустит на защищённый ресурс.
dimashirokov
3 / 3 / 2
Регистрация: 16.05.2014
Сообщений: 80
06.06.2014, 14:37     Использование общего объекта DefaultHttpClient в AsyncTask #5
YuraAAA, т.е. сервер лучше писать не на php, a на node.js? или они используются совместно? node.js поддерживает(возможно не логичный вопрос, но все же) json?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 14:56     Использование общего объекта DefaultHttpClient в AsyncTask
Еще ссылки по теме:

AsyncTask - Программирование Android
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { @Override protected Void doInBackground(Void......

AsyncTask и SQLite - Программирование Android
Здравствуйте! У меня в приложении есть БД SQLite, при нажатие на кнопку загрузки, приложение начинает в базу вносить записи. Структура...

AsyncTask тормозит - Программирование Android
Подскажите пожалуйста, делалю загрузку данных с сервера через asyncTask и возвращаются результат, а дальше делаю обработку этих данных во...

Отмена AsyncTask - Программирование Android
Привет. Есть такой код: @Override protected Void doInBackground(Void... params) { try { Interpret(Source.get()); }...

MainActivity AsyncTask - Программирование Android
Добрый вечер. Ребята тут небольшая проблема. Мне нужно Заполнить NavigatorDrawer (из базы). Почему когда я пытаюсь в...

AsyncTask+CheckBox - Программирование Android
Здравствуйте, интересует вопрос нужно в функцию AsyncTask послать несколько строк, в зависимости какие Чекбоксы чекнуты. Ну например: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
YuraAAA
1567 / 1309 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
06.06.2014, 14:56     Использование общего объекта DefaultHttpClient в AsyncTask #6
dimashirokov,
Цитата Сообщение от dimashirokov Посмотреть сообщение
т.е. сервер лучше писать не на php, a на node.js?
нет, я не это имел в виду Просто я не знаю php, немного знаю ноду, по-этому показал пример на ней.
Цитата Сообщение от dimashirokov Посмотреть сообщение
node.js поддерживает(возможно не логичный вопрос, но все же) json?
А как Вы думаете, если node js базируется на javascript, а JSON это родной объект js'а?

Пишите на том, на чём умеете, это не принципиально.
JSON знают все, и java EE, и C# ASP.NET и прочее
Yandex
Объявления
06.06.2014, 14:56     Использование общего объекта DefaultHttpClient в AsyncTask
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru