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

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

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

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

06.06.2014, 11:12. Просмотров 2381. Ответов 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
Посмотрите здесь:

Android AsyncTask+CheckBox
Android DefaultHttpClient
DefaultHttpClient Android
Android Exception в AsyncTask
Android AsyncTask
Как написать простейший запрос на сервер без использование AsyncTask Android
Android AsyncTask и get()
AsyncTask Android
AsyncTask и SQLite Android
AsyncTask Android
Android Не работает AsyncTask
MainActivity AsyncTask Android

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 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
1564 / 1306 / 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?
YuraAAA
1564 / 1306 / 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
Ответ Создать тему
Опции темы

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