Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

06.06.2014, 11:12. Просмотров 2656. Ответов 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
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 11:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование общего объекта DefaultHttpClient в AsyncTask (Программирование Android):

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

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

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

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

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

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

5
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
06.06.2014, 11:47 #2
shulyakyarik, Вам в любом случае это придётся делать, если сервер авторизует Вас по хедеру. Если же просто по sessionId, то создание нового HttpBaseRequest(post,put,get,delete) не должно обнулять сессию.
1
shulyakyarik
11 / 11 / 3
Регистрация: 28.03.2014
Сообщений: 156
06.06.2014, 13:33  [ТС] #3
YuraAAA, есть ли какие-то другие способы авторизации? Можете что-то рассказать об sessionId?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
06.06.2014, 14:24 #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.

Сервер проверяет токен и по нему идентифицирует юзера. Если токена нет, или же он устарел - сервер не пустит на защищённый ресурс.
2
dimashirokov
3 / 3 / 2
Регистрация: 16.05.2014
Сообщений: 80
06.06.2014, 14:37 #5
YuraAAA, т.е. сервер лучше писать не на php, a на node.js? или они используются совместно? node.js поддерживает(возможно не логичный вопрос, но все же) json?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
06.06.2014, 14:56 #6
dimashirokov,
Цитата Сообщение от dimashirokov Посмотреть сообщение
т.е. сервер лучше писать не на php, a на node.js?
нет, я не это имел в виду Просто я не знаю php, немного знаю ноду, по-этому показал пример на ней.
Цитата Сообщение от dimashirokov Посмотреть сообщение
node.js поддерживает(возможно не логичный вопрос, но все же) json?
А как Вы думаете, если node js базируется на javascript, а JSON это родной объект js'а?

Пишите на том, на чём умеете, это не принципиально.
JSON знают все, и java EE, и C# ASP.NET и прочее
1
06.06.2014, 14:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2014, 14:56
Привет! Вот еще темы с ответами:

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

Работа с AsyncTask - Программирование Android
Попробовал использовать AsyncTask и возник вопрос. У меня есть несколько ф-й, которые парсят текстовые файлы и заполняют таблицы БД. ...

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

Exception в AsyncTask - Программирование Android
Доброго всем. Проблема вот в чем: периодически во время выполнения одного из потоков в AsyncTask вылетает следующее: 04-21...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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