С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
shulyakyarik
11 / 11 / 3
Регистрация: 28.03.2014
Сообщений: 156
1

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

06.06.2014, 11:12. Просмотров 2931. Ответов 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
Ответы с готовыми решениями:

Как написать простейший запрос на сервер без использование AsyncTask
как написать простейший запрос на сервер? без использование AsyncTask. у меня...

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

DefaultHttpClient
Вопрос такой У меня есть простой get запрос DefaultHttpClient httpclient =...

AsyncTask
Использую AsyncTasc class MyT extends AsyncTask&lt;Void, Void, Void&gt; { ...

AsyncTask и get()
Создаю асинхронный процесс, где в onPreExecute() запускаю анимированный...

5
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
06.06.2014, 14:24 4
Лучший ответ Сообщение было отмечено shulyakyarik как решение

Решение

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
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 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
Привет. Знаю, что в AsyncTask doInBackground() обращатся к компонентам UI...

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

AsyncTask ObjectAnimator
Добрый вечер. Прошу помочь мне. Пытаюсь написать карточную игру. В игре игрок...


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

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

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