Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19

Авторизация на сайте методом POST через Android приложение

24.11.2019, 20:11. Показов 4592. Ответов 11

Студворк — интернет-сервис помощи студентам
Необходимо проверить авторизован ли ты на сайте, дан URL ответа JSON. Пожалуйста, подкиньте хотя бы просто варианты, как лучше сделать. Как бы не старалась - отправляется запрос на сервер. Уже неделю сижу невылазно. Заранее огромное спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.11.2019, 20:11
Ответы с готовыми решениями:

Авторизация на сайте (построенном на MVC 4) через приложение Android
Здравствуйте! История состоит в следующем...на фреймворке MVC 4 был создан сайт. Затем потребовалось написать приложение для платформы...

Авторизация на сайте через post запрос
Всем доброго времени суток. Я новичок в vb net (учусь кодить) недавно мне пришлось работать с post get запросами. Так вот, есть...

Авторизация на сайте через приложение
Добрый день! Подскажите, пожалуйста, как реализовать вход на сайт через приложение. Пробовал через NSURLRequest, но, я так понимаю, это...

11
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
24.11.2019, 20:36
Цитата Сообщение от Anna_Lis Посмотреть сообщение
как лучше сделать
Что сделать?
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
24.11.2019, 23:02  [ТС]
Отправить логин и пароль на сервер методом post.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
24.11.2019, 23:40
В body, в header'e, в url'e логин/пароль должен быть? Какой фреймворк используется, где код вообще? Такое ощущение, что ответ и помощь не нужна, а просто пообщаться хочется.
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
25.11.2019, 18:47  [ТС]
Вот MainActivity
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
public class MainActivity extends AppCompatActivity {
 
    Button  buttonLogin;
    EditText ID_CUSTOMER, PASSWORD;
    //
    final static String NOT_CONNECT = "NOT_CONNECT";
    final static String SUCCESS = "SUCCESS";
    final static String FAILED = "FAILED";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonLogin = (Button)findViewById(R.id.buttonLogin); 
        ID_CUSTOMER = (EditText)findViewById(R.id.ID_CUSTOMER);
        PASSWORD = (EditText)findViewById(R.id.PASSWORD);
    }
 
    public void setButtonLogin(View view) {
        AsyncTask<String, Void, JSONObject> task = new AsyncTask<String, Void, JSONObject>() {
            @Override
            protected JSONObject doInBackground(String... params) {
                JSONParser jsonParser = new JSONParser();
                List<NameValuePair> loginpass = new ArrayList<NameValuePair>();
                loginpass.add(new BasicNameValuePair("ID_CUSTOMER", params[0]));
                loginpass.add(new BasicNameValuePair("PASSWORD", params[1]));
                JSONObject json = jsonParser.makeHttpRequest("URL...", "POST", loginpass);
                return json;
            }
            @Override
            protected void onPostExecute(JSONObject result) {
                if (result != null) {
                    super.onPostExecute(result);
                    String res = "";
                    try {
                        res = result.getString("status");
                        switch (res) {
                            case NOT_CONNECT:
                                Toast toast_not_connect = Toast.makeText(getApplicationContext(), "Сервер недоступен", Toast.LENGTH_SHORT);
                                toast_not_connect.setGravity(Gravity.CENTER, 0, 0);
                                toast_not_connect.show();
                                break;
 
                            case SUCCESS:
                                Toast toast_success = Toast.makeText(getApplicationContext(), "Вход выполнен", Toast.LENGTH_SHORT);
                                toast_success.setGravity(Gravity.CENTER, 0, 0);
                                toast_success.show();
                                //Intent intentB = new Intent(MainActivity.this, OrdersActivity.class);
                                //startActivity(intentB);
                                break;
 
                            case FAILED:
                                Toast toast_failed = Toast.makeText(getApplicationContext(), "Не правильно введен логин\n или пароль", Toast.LENGTH_SHORT);
                                toast_failed.setGravity(Gravity.CENTER, 0, 0);
                                toast_failed.show();
                                break;
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
    };
        task.execute(ID_CUSTOMER.getText().toString(), PASSWORD.getText().toString());
}
}

Вот лог с ошибкой
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
2019-11-25 18:34:04.730 14361-14361/com.example.json E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.json, PID: 14361
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.json/com.example.json.MainActivity}: java.lang.IllegalStateException: Already attached
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.IllegalStateException: Already attached
        at androidx.fragment.app.FragmentManagerImpl.attachController(FragmentManagerImpl.java:2563)
        at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:116)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:284)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
        at com.example.json.MainActivity.onCreate(MainActivity.java:37)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
25.11.2019, 21:26  [ТС]
Не могу найти косяк в коде. Может кто сталкивался с такой проблемой. Выкидывает сразу из приложения.
Вот MainActivity
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
public class MainActivity extends AppCompatActivity {
 
    Button  buttonLogin;
    EditText ID_CUSTOMER, PASSWORD;
    //
    final static String NOT_CONNECT = "NOT_CONNECT";
    final static String SUCCESS = "SUCCESS";
    final static String FAILED = "FAILED";
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonLogin = (Button)findViewById(R.id.buttonLogin); 
        ID_CUSTOMER = (EditText)findViewById(R.id.ID_CUSTOMER);
        PASSWORD = (EditText)findViewById(R.id.PASSWORD);
    }
 
    public void setButtonLogin(View view) {
        AsyncTask<String, Void, JSONObject> task = new AsyncTask<String, Void, JSONObject>() {
            @Override
            protected JSONObject doInBackground(String... params) {
                JSONParser jsonParser = new JSONParser();
                List<NameValuePair> loginpass = new ArrayList<NameValuePair>();
                loginpass.add(new BasicNameValuePair("ID_CUSTOMER", params[0]));
                loginpass.add(new BasicNameValuePair("PASSWORD", params[1]));
                JSONObject json = jsonParser.makeHttpRequest("URL...", "POST", loginpass);
                return json;
            }
            @Override
            protected void onPostExecute(JSONObject result) {
                if (result != null) {
                    super.onPostExecute(result);
                    String res = "";
                    try {
                        res = result.getString("status");
                        switch (res) {
                            case NOT_CONNECT:
                                Toast toast_not_connect = Toast.makeText(getApplicationContext(), "Сервер недоступен", Toast.LENGTH_SHORT);
                                toast_not_connect.setGravity(Gravity.CENTER, 0, 0);
                                toast_not_connect.show();
                                break;
 
                            case SUCCESS:
                                Toast toast_success = Toast.makeText(getApplicationContext(), "Вход выполнен", Toast.LENGTH_SHORT);
                                toast_success.setGravity(Gravity.CENTER, 0, 0);
                                toast_success.show();
                                //Intent intentB = new Intent(MainActivity.this, OrdersActivity.class);
                                //startActivity(intentB);
                                break;
 
                            case FAILED:
                                Toast toast_failed = Toast.makeText(getApplicationContext(), "Не правильно введен логин\n или пароль", Toast.LENGTH_SHORT);
                                toast_failed.setGravity(Gravity.CENTER, 0, 0);
                                toast_failed.show();
                                break;
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
    };
        task.execute(ID_CUSTOMER.getText().toString(), PASSWORD.getText().toString());
}
}
А вот лог при запуске.
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
2019-11-25 18:34:04.730 14361-14361/com.example.json E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.json, PID: 14361
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.json/com.example.json.MainActivity}: java.lang.IllegalStateException: Already attached
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6119)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
     Caused by: java.lang.IllegalStateException: Already attached
        at androidx.fragment.app.FragmentManagerImpl.attachController(FragmentManagerImpl.java:2563)
        at androidx.fragment.app.FragmentController.attachHost(FragmentController.java:116)
        at androidx.fragment.app.FragmentActivity.onCreate(FragmentActivity.java:284)
        at androidx.appcompat.app.AppCompatActivity.onCreate(AppCompatActivity.java:106)
        at com.example.json.MainActivity.onCreate(MainActivity.java:37)
        at android.app.Activity.performCreate(Activity.java:6679)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
        at android.app.ActivityThread.-wrap12(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:154) 
        at android.app.ActivityThread.main(ActivityThread.java:6119) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.11.2019, 21:32
Цитата Сообщение от Anna_Lis Посмотреть сообщение
super.onCreate(savedInstanceState);
Это лишнее в 15й строке.
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
25.11.2019, 22:05  [ТС]
ExFau$t, вот это конечно лучшая ошибка))) Спасибо большое. Можно еще небольшой вопрос. Теперь ругается на вот эти строки
Java
1
2
3
        at com.example.json.JSONParser.makeHttpRequest(JSONParser.java:51 (HttpResponse httpResponse = httpClient.execute(httpPost);))
       at com.example.json.MainActivity$1.doInBackground(MainActivity.java:48(JSONObject json = jsonParser.makeHttpRequest("https://betconstruct.bisonbc.by/api-admin/sign-in", "POST", loginpass);))
        at com.example.json.MainActivity$1.doInBackground(MainActivity.java:41(AsyncTask<String, Void, JSONObject> task = new AsyncTask<String, Void, JSONObject>() ))
Может это и-за подключенных библиотек?
Вот что я использую

Java
1
2
3
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.11.2019, 23:41
Код ошибки полностью.
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
25.11.2019, 23:47  [ТС]
ExFau$t,
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2019-11-25 23:46:24.676 16398-16427/com.example.json E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
    Process: com.example.json, PID: 16398
    java.lang.RuntimeException: An error occurred while executing doInBackground()
        at android.os.AsyncTask$3.done(AsyncTask.java:325)
        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
        at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
        at java.util.concurrent.FutureTask.run(FutureTask.java:242)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
     Caused by: java.lang.NoSuchMethodError: No virtual method execute(Lorg/apache/http/client/methods/HttpUriRequest;)Lorg/apache/http/client/methods/CloseableHttpResponse; in class Lorg/apache/http/impl/client/DefaultHttpClient; or its super classes (declaration of 'org.apache.http.impl.client.DefaultHttpClient' appears in /system/framework/org.apache.http.legacy.boot.jar)
        at com.example.json.JSONParser.makeHttpRequest(JSONParser.java:51)
        at com.example.json.MainActivity$1.doInBackground(MainActivity.java:48)
        at com.example.json.MainActivity$1.doInBackground(MainActivity.java:41)
        at android.os.AsyncTask$2.call(AsyncTask.java:305)
        at java.util.concurrent.FutureTask.run(FutureTask.java:237)
        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
        at java.lang.Thread.run(Thread.java:761) 
И еще
Java
1
2
2019-11-25 23:45:51.802 16398-16423/com.example.json E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2019-11-25 23:45:51.802 16398-16423/com.example.json E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
25.11.2019, 23:53
Возьми нормальный фреймворк для запросов в сеть, типа okhttp, скопируй пример из их доки, там всё просто. Ни я, ни компилятор не понимаем, что это за код и почему это должно работать.
0
0 / 0 / 0
Регистрация: 24.11.2019
Сообщений: 19
26.11.2019, 12:10  [ТС]
ExFau$t, Посмотрите, пожалуйста. Ничего не происходит почему-то

MainActivity
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
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
        HashMap<String, String> params = new HashMap<String, String>();
        params.put("log","log1");
        params.put("pay","pay1");
 
        
        String url = "URL";
 
        HttpUtility.newRequest(url,HttpUtility.METHOD_POST,params, new HttpUtility.Callback() {
            @Override
            public void OnSuccess(String response) {
                
                System.out.println("Server OnSuccess response="+response);
            }
            @Override
            public void OnError(int status_code, String message) {
                
                System.out.println("Server OnError status_code="+status_code+" message="+message);
            }
        });
 
    }
 
}
HttpUtility
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
public class HttpUtility {
    public static final int METHOD_GET = 0; // METHOD GET
    public static final int METHOD_POST = 1; // METHOD POST
 
 
    public interface Callback {
      
        public void OnSuccess(String response);
        public void OnError(int status_code, String message);
    }
        public static void newRequest(String web_url, int method, HashMap< String, String > params, Callback callback) {
 
       
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    String url = web_url;
                    if (method == METHOD_GET && params != null) {
                        for (Map.Entry < String, String > item: params.entrySet()) {
                            String key = URLEncoder.encode(item.getKey(), "UTF-8");
                            String value = URLEncoder.encode(item.getValue(), "UTF-8");
                            if (!url.contains("?")) {
                                url += "?" + key + "=" + value;
                            } else {
                                url += "&" + key + "=" + value;
                            }
                        }
                    }
 
                    HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
                    urlConnection.setDoOutput(true); // write POST params
                    urlConnection.setUseCaches(false);
                    urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); // handle url encoded form data
                    urlConnection.setRequestProperty("charset", "utf-8");
                    if (method == METHOD_GET) {
                        urlConnection.setRequestMethod("GET");
                    } else if (method == METHOD_POST) {
                        urlConnection.setRequestMethod("POST");
                    }
 
                    //write POST data
                    if (method == METHOD_POST && params != null) {
                        StringBuilder postData = new StringBuilder();
                        for (Map.Entry < String, String > item: params.entrySet()) {
                            if (postData.length() != 0) postData.append('&');
                            postData.append(URLEncoder.encode(item.getKey(), "UTF-8"));
                            postData.append('=');
                            postData.append(URLEncoder.encode(String.valueOf(item.getValue()), "UTF-8"));
                        }
                        byte[] postDataBytes = postData.toString().getBytes("UTF-8");
                        urlConnection.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
                        urlConnection.getOutputStream().write(postDataBytes);
 
                    }
                    // server response code
                    int responseCode = urlConnection.getResponseCode();
                    if (responseCode == HTTP_OK && callback != null) {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
                        StringBuilder response = new StringBuilder();
                        String line;
                        while ((line = reader.readLine()) != null) {
                            response.append(line);
                        }
                        // callback success
                        callback.OnSuccess(response.toString());
                        reader.close(); // close BufferReader
                    } else if (callback != null) {
                        // callback error
                        callback.OnError(responseCode, urlConnection.getResponseMessage());
                    }
 
                    urlConnection.disconnect(); // disconnect connection
                } catch (IOException e) {
                    e.printStackTrace();
                    if (callback != null) {
                        // callback error
                        callback.OnError(500, e.getLocalizedMessage());
                    }
                }
            }
        }).start(); // start thread
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2019, 12:10
Помогаю со студенческими работами здесь

Авторизация на сайте через POST запрос и последующая работа с этого аккаунта
Вот допустим я могу авторизироваться на сайте через ПОСТ запрос, а как мне сделать чтобы авторизироваться и например сделать другой запрос...

Авторизация на сайте POST + SSL
Здравствуйте! Писал я программу, которая парсит сайт 1С и проверяет новые версии их программ. И успешно написал, для меня это было очень...

Авторизация на сайте POST+Cookie
Тема для тех, кто знаком с DevelStudio 3.0 Есть такой код: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,...

Авторизация на сайте. POST - запрос
Миллион тем было, миллион тем будет. Ниже процедура и 2 вызова. для LDS - работает, для Life - получаю в response - 403 Forbidden. ...

Авторизация на сайте, requests, post
Всем привет! Буду благодарен за помощь. Прочитал очень много примеров и решений, но ничего не помогло. Есть злой сайт -...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru