Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Thread.sleep()

Вообщем, проблемма вот в чем. Я пытаюсь заставить "заснуть" программу, в результате - она засыпает, но сразу выводит все данные.
Например,
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
for (int i = 0; i<10; i++) {
text.append(""+i);
try{
Thread.sleep(5000);
}
catch (.....) {}
text.append("After Sleep"+i);
}
}
Приложение то засыпает, но сразу выводит все данные без ожидания. (Я хотел так: вывел-подождал-вывел)
Помогите пожалуйста.
Ответ: В это делаете в UI потоке?
Вопрос: Задержка потока с помощью sleep()

Так... собственно код
Java(TM) 2 Platform Standard Edition 5.0
1
2
3
4
5
6
7
8
9
10
11
 while (y>0)
        {
                           y--;
                WorkArray[y][x] = 1;
               try
               {Show();
                   Thread.sleep(wait);}
               catch (InterruptedException ie)
               {}
            
                    }
Задача следующая- этот кусок кода меняет масив, метод Show() служит для отображения масива в текущем состоянии. Мне нужно чтоб после каждой WorkArray[y][x] = 1; масив выводился на долю секунды, то есть чтоб было видно как он меняется . Но в данном варианте кода, он тупо ждет, а потом показывает финальное изменение. А мне нужно чтоб как анимацией шло-чтоб были видны и промежуточные.
Ответ: Dimitrii, это нужно выносить в отдельный поток
Java(TM) 2 Platform Standard Edition 5.0
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
package com.cyberforum;
 
import java.util.Arrays;
 
public class Main {
 
    private static final int ARRAY_SIZE = 5;
 
    private static int[] mNumbersArray;
 
    private static void showArray() {
        System.out.println(Arrays.toString(mNumbersArray));
    }
 
    public static void main(String[] args) {
        mNumbersArray = new int [ARRAY_SIZE];
        for (int i = 0; i < ARRAY_SIZE; i++) {
            mNumbersArray[i] = i + 1;
        }
 
        new Thread(new Runnable() {
            @Override
            public void run() {
                int i = ARRAY_SIZE;
                while (i > 0) {
                    mNumbersArray[--i] = 0;
                    showArray();
 
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }
}
Вопрос: Can't create handler inside thread that has not called Looper.prepare()

Привет, с Новым Годом!

Подскажите почему приложение вылетает с ошибкой при показе progressdialog.

Ошибка:
Код Java(TM) 2 Platform Standard Edition 5.0
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
java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:299)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
            at java.util.concurrent.FutureTask.run(FutureTask.java:239)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)
     Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
            at android.os.Handler.<init>(Handler.java:197)
            at android.os.Handler.<init>(Handler.java:111)
            at android.view.ViewRootImpl$ViewRootHandler.<init>(ViewRootImpl.java:2802)
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:3105)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:216)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
            at android.app.Dialog.show(Dialog.java:303)
            at ru.korshun.cobaguardidea.app.Root$CheckDirectoryExist.onPreExecute(Root.java:962) //this.pd.show();
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
            at android.os.AsyncTask.execute(AsyncTask.java:534)
            at ru.korshun.cobaguardidea.app.Root$CheckDirectoryExist.doInBackground(Root.java:980)
            at ru.korshun.cobaguardidea.app.Root$CheckDirectoryExist.doInBackground(Root.java:942)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)
Код:
Код Java(TM) 2 Platform Standard Edition 5.0
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
@Override
protected void onCreate(Bundle savedInstanceState) {
....
new CheckDirectoryExist(new ProgressDialog(this)).execute();
....
}
 
    class CheckDirectoryExist
            extends AsyncTask<Void, Void, Boolean> {
 
        private ProgressDialog pd;
 
        CheckDirectoryExist(ProgressDialog pd) {
            this.pd = pd;
 
            this.pd.setTitle(Root.PD_TITLE);
            this.pd.setMessage("Files indexing ...");
 
            this.pd.setCancelable(false);
        }
 
        @Override
        protected void onPreExecute() {
            this.pd.show(); //Дальше этого не идет
        }
}
Заранее благодарю!
Ответ: dajver, помогите мне, а то у меня тоже ошибка Can't create handler inside thread that has not called Looper.prepare() и не знаю как бороться...
вот код
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
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
public class NewThread implements Runnable {
    Thread thread;
 
    // konstruktor
    public NewThread() {
        // new potok
        thread = new Thread(this, "VKparser");
        thread.start();
    }
 
    public void run() {
        String httpString = "https://api.vk.com/method/users.get?user_id=205387401&v=5.32";
 
        HttpPost httppost = new HttpPost(httpString);
        HttpClient httpclient = new DefaultHttpClient();
 
        HttpResponse response;
 
        String responseBody;
 
        try {
 
            response = httpclient.execute(httppost);
            responseBody = EntityUtils.toString(response.getEntity());
            Log.d("!!!!!!!!!!!!!!!", responseBody);
            try {
                JSONObject jsonobject = new JSONObject(responseBody);
                JSONArray jsonarray = jsonobject.getJSONArray("response");
                jsonobject = jsonarray.getJSONObject(0);
                String name, famil;
                name = jsonobject.getString("first_name");
                famil = jsonobject.getString("last_name");
                Log.d("!!!", name);
                Log.d("!!!", famil);
                try {
                    MainActivity.getInstance().update();
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

а вот код update() в MainActivity
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
public void update() {
        Toast.makeText(getBaseContext(), "YES ", Toast.LENGTH_LONG).show();
    }
Вопрос: FATAL EXCEPTION: pool-1-thread-5

Подскажите, пожалуйста, когда возникает, и что обозначает ошибка FATAL EXCEPTION: pool-1-thread-5?
Только не пишите, чтобы я код предоставил, я сам разберусь, что не так, просто я не до конца понимаю значение ошибки. Заранее благодарю.
Ответ: androbro, первые две строчки эти:
05-19 12:35:53.681: E/AndroidRuntime(1414): FATAL EXCEPTION: pool-1-thread-5
05-19 12:35:53.681: E/AndroidRuntime(1414): java.lang.NullPointerException
а потом информация о том, на какой строчке в моём файле класса произошла ошибка.
Спасибо за быстрый ответ.

Добавлено через 1 час 18 минут
Проблему решил, вопрос не актуален.
Вопрос: Как вытащить данные из потока. Cant create handler inside thread that has not called Looper.prepare()

В общем столкнулся со следующей неприятной проблемой.
Есть клиент. Он запрашивает у сервера некоторые данные. Сервер эти данные посылает клиенту. Клиент эти данные принимает и продолжает слушать входящие сообщения. Но проблемы начинаются когда я пытаюсь эти данные вытащить из потока в другой класс.
Ошибка при попытке передать данные из потока в datahandler: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

Вот код клиента
Кликните здесь для просмотра всего текста

Код Java(TM) 2 Platform Standard Edition 5.0
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
package com.noldorknight.waiterapp;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
 
public class SocketServer {
 
    private Socket socket;
    private static final int SERVERPORT = 11000;
    private static String SERVER_IP = "192.168.2.222";
    String answer;
    private static String cmdtext;
    private static int callerid;
 
   class ClientThread implements Runnable  
   {
       public void run() {
 
            try {  //Здесь мы создаем сокет
               InetAddress serverAddr = InetAddress.getByName(SERVER_IP);
               socket = new Socket(serverAddr, SERVERPORT);
            } catch (UnknownHostException e1) {
                e1.printStackTrace();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
           senddata(); //Здесь запускаем функцию для отправки запроса серверу
 
        }
    }
   //////////////////////////////////////// Эта функция вызывается из отдельного класса, 
   ////////////////////////////////////////того самого которому нужно вернуть ответ
   public void setserver (String command, int caller)
   {
       callerid = caller; //это просто чтобы знать из какого класса была вызвана функция(так как их будет много, и                    //////////////////////////каждый с разным запросом)
        cmdtext = command; //это текст запроса
        new Thread(new ClientThread()).start(); //запускаем поток, тот что сверху
   }
 
    private void handledata(String answer) ///эта функция отсылает целевому классу ответ
    {
        Login lgn = new Login();
        lgn.geturdata(answer);
    }
 
   private void senddata() //отсылаем запрос и слушаем ждем ответа
   {
        try {
            String str = cmdtext;
            PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
            out.println(str);
            out.flush();
            System.out.println("-------Начинаем прием данных");
            byte[] data = new byte[256];
            while (true) {
                InputStream inp = socket.getInputStream();
                inp.read(data);
                System.out.println("-------Byte data= " + data);
                answer = new String(data, "UTF-8");
                System.out.println("-------String data= " + answer);
              handledata(answer);  ///// ответ от сервера должен быть передан в другой класс 
 
            }
 
            }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}


Насколько я понял передача данных должна быть в том же потоке, в котором исполняется целевой класс. Как с этим бороться? Мне нужно передать эти данные в главный поток? Или же в отдельный поток?

И еще один вопрос. Как вы видите в отдельном потоке создается новый сокет и начинается обмен данными. Если я вызову передачу данных снова, то и сокет создастся новый, что не есть хорошо. мне нужно поместить создание сокета в отдельный поток? Вообще нужен ли отдельный поток для создания сокета?
Ответ: turbanoff, помогите мне, а то у меня тоже ошибка Can't create handler inside thread that has not called Looper.prepare() и не знаю как бороться...
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
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
public class NewThread implements Runnable {
    Thread thread;
 
    // konstruktor
    public NewThread() {
        // new potok
        thread = new Thread(this, "VKparser");
        thread.start();
    }
 
    public void run() {
        String httpString = "https://api.vk.com/method/users.get?user_id=205387401&v=5.32";
 
        HttpPost httppost = new HttpPost(httpString);
        HttpClient httpclient = new DefaultHttpClient();
 
        HttpResponse response;
 
        String responseBody;
 
        try {
 
            response = httpclient.execute(httppost);
            responseBody = EntityUtils.toString(response.getEntity());
            Log.d("!!!!!!!!!!!!!!!", responseBody);
            try {
                JSONObject jsonobject = new JSONObject(responseBody);
                JSONArray jsonarray = jsonobject.getJSONArray("response");
                jsonobject = jsonarray.getJSONObject(0);
                String name, famil;
                name = jsonobject.getString("first_name");
                famil = jsonobject.getString("last_name");
                Log.d("!!!", name);
                Log.d("!!!", famil);
                try {
                    MainActivity.getInstance().update();
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
 
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

а вот код update() в MainActivity
Кликните здесь для просмотра всего текста
Код Java(TM) 2 Platform Standard Edition 5.0
1
2
3
public void update() {
        Toast.makeText(getBaseContext(), "YES ", Toast.LENGTH_LONG).show();
    }


кстати у меня вылетает приложение... и вот еще немного ошибок
05-31 00:15:40.998: E/AndroidRuntime(10441): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-31 00:15:40.998: E/AndroidRuntime(10441): at android.os.Handler.<init>(Handler.java:121)
05-31 00:15:40.998: E/AndroidRuntime(10441): at android.widget.Toast$TN.<init>(Toast.java:322)
05-31 00:15:40.998: E/AndroidRuntime(10441): at android.widget.Toast.<init>(Toast.java:91)
05-31 00:15:40.998: E/AndroidRuntime(10441): at android.widget.Toast.makeText(Toast.java:238)
05-31 00:15:40.998: E/AndroidRuntime(10441): at com.example.jsonparser.MainActivity.update(MainActivity.java:24)
05-31 00:15:40.998: E/AndroidRuntime(10441): at com.example.jsonparser.NewThread.run(NewThread.java:52)
05-31 00:15:40.998: E/AndroidRuntime(10441): at java.lang.Thread.run(Thread.java:856)
Вопрос: использование thread

при нажатии должен срабатывать episodes и появляться новый layout поверх имеющегося.

Код Java(TM) 2 Platform Standard Edition 5.0
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
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.answer);
    }
 
    public void episodes(View view) {
        runnable = new Runnable() {
            public void run() {
                closes = (RelativeLayout) findViewById(R.id.needClose);
 
                String[] texts = {"Эпизод 1", "Эпизод 2", "Эпизод 3", "Эпизод 4", "Эпизод 5", "Эпизод 6"};
                int[] img = {R.drawable.ep1, R.drawable.ep2, R.drawable.ep3, R.drawable.ep4, R.drawable.ep5, R.drawable.ep6};
 
                ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
                        texts.length);
 
                Map<String, Object> m;
                for (int i = 0; i < texts.length; i++) {
                    m = new HashMap<String, Object>();
                    m.put(ATTRIBUTE_NAME_TEXT, texts[i]);
                    m.put(ATTRIBUTE_NAME_IMAGE, img[i]);
                    data.add(m);
                }
            }
        };
        Thread thread = new Thread(runnable);
        thread.start();
    }
Ответ: YuraAAA,

Код Java(TM) 2 Platform Standard Edition 5.0
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
public class Answer extends Activity implements View.OnClickListener {
 
 
    TextView text;
    int four, five, lan;
    private SharedPreferences sharedPref;
    SharedPreferences.Editor editor;
 
    RelativeLayout closes;
    ListView lvSimple;
 
    final String ATTRIBUTE_NAME_TEXT = "text";
    final String ATTRIBUTE_NAME_IMAGE = "image";
 
    int res;
    int[] answerQuestion = {3, 4, 3};
    String[] questionR = {"один", "два", "три"};
    String[] questionE = {"one", "two", "three"};
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.answer);
 
        sharedPref = getSharedPreferences("needPref", Context.MODE_PRIVATE);
        closes = (RelativeLayout) findViewById(R.id.needClose);
        closes.setVisibility(View.INVISIBLE);
 
 
        four = sharedPref.getInt("four", 1);
        five = sharedPref.getInt("five", 0);
        lan = sharedPref.getInt("lang", 1);
 
        text = (TextView) findViewById(R.id.text);
 
        if (lan == 1)
            text.setText(questionE[five]);
        else if (lan == 2)
            text.setText(questionR[five]);
 
                String[] texts = {"Эпизод 1", "Эпизод 2", "Эпизод 3", "Эпизод 4", "Эпизод 5", "Эпизод 6"};
                int[] img = {R.drawable.ep1, R.drawable.ep2, R.drawable.ep3, R.drawable.ep4, R.drawable.ep5, R.drawable.ep6};
                
                ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
                        texts.length);
 
                Map<String, Object> m;
                for (int i = 0; i < texts.length; i++) {
                    m = new HashMap<String, Object>();
                    m.put(ATTRIBUTE_NAME_TEXT, texts[i]);
                    m.put(ATTRIBUTE_NAME_IMAGE, img[i]);
                    data.add(m);
                }
 
                String[] from = {ATTRIBUTE_NAME_TEXT, ATTRIBUTE_NAME_IMAGE};
                int[] to = {R.id.tvText, R.id.ivImg};
 
                SimpleAdapter sAdapter = new SimpleAdapter(this, data,
                        R.layout.list_item, from, to);
 
                lvSimple = (ListView) findViewById(R.id.lvSimple);
                lvSimple.setAdapter(sAdapter);
 
                lvSimple.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view,
                                            int position, long id) {
                        switch ((int) id) {
                            case 0:
                                four = 1;
                                five = 0;
                                break;
                            case 1:
                                four = 4;
                                five = 1;
                                break;
                            case 2:
                                four = 6;
                                five = 2;
                                break;
                            case 3:
                                four = 13;
                                five = 3;
                                break;
                            case 4:
                                four = 17;
                                five = 4;
                                break;
                            case 5:
                                four = 25;
                                five = 5;
                                break;
                            default:
                                break;
                        }
 
                        editor = sharedPref.edit();
                        editor.putInt("four", four);
                        editor.putInt("five", five);
                        editor.apply();
 
                        if (lan == 1) 
                            text.setText(questionE[five]);
                        else if (lan == 2) {
                            text.setText(questionR[five]);
                        closes.setVisibility(View.INVISIBLE);
                    }
                });
    }
 
    @Override
    public void onClick(View v) {
 
        switch (v.getId()) {
            case R.id.ans1:
                res = 1;
                break;
            case R.id.ans2:
                res = 2;
                break;
            case R.id.ans3:
                res = 3;
                break;
            case R.id.ans4:
                res = 4;
                break;
            default:
                break;
        }
        if (res == answerQuestion[five]) {
            five++;
            Toast toast = Toast.makeText(getApplicationContext(), String.valueOf(five), Toast.LENGTH_LONG );
            toast.show();
            editor = sharedPref.edit();
            editor.putInt("five", five);
            editor.apply();
        }
        else {
            Toast toast = Toast.makeText(getApplicationContext(), "ошибка", Toast.LENGTH_LONG );
            toast.show();
        }
    }
 
    public void episodes(View view) {
        closes.setVisibility(View.VISIBLE);
 
    }
 
    public void esc(View view) {
        closes.setVisibility(View.INVISIBLE);
 
    }
}
Вопрос: Thread после выполнения закрывается?

Добрый день!) подскажите такую штуку.
есть поток
Java
1
2
3
4
5
6
7
8
Thread ProcessThread = new Thread(new Runnable() {
        @Override
        public void run() {
 
           metod();
         
        }
    });
Я запускаю этот поток, в потоке запускается метод. Метод выполнился, а что происходит с потоком?
Ответ:
Сообщение от yura91
что значит потоковый рай??
наверное это то же самое что и
Сообщение от Паблито
гарбаж коллектор
только потоку еще пожимают руку и говорят "спасибо, сынок, ты справился"
Вопрос: The application may be doing too much work on its main thread

Ну елки палки, это что еще такое ?
В приложении запускаю камеру и ловлю результат
Java(TM) 2 Platform Standard Edition 5.0
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
PhotoObject current_photoObj ; // мой класс для работы с файлом фотки
current_photoObj = new PhotoObject();
 
  protected void camera_start(){
        Intent takePictureIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        takePictureIntent.putExtra( MediaStore.EXTRA_OUTPUT, current_photoObj.getFileForCameraIntent() );
        startActivityForResult(takePictureIntent, CAMERA_RESULT);
    }
 
 
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAMERA_RESULT) {
 
            if (resultCode == RESULT_OK) {
 
                if( current_photoObj.resize() ){
 
                    Toast toast = Toast.makeText(getApplicationContext(),"Фотография прикреплена", Toast.LENGTH_SHORT);
                    toast.show();
 
                }else{
 
                    Toast toast = Toast.makeText(getApplicationContext(),
                            "Не удалось преобразовать изображение", Toast.LENGTH_SHORT);
                    toast.show();
 
                    current_photoObj.delete();
                    current_photoObj = null;
 
                }
            }else{
                current_photoObj.delete();
                current_photoObj = null;
            }
        }
    }
И далее...
The application may be doing too much work on its main thread
Что-то типо "Skipped 40+ frames", не успел копирнуть

12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: FATAL EXCEPTION: main
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: Process: com.example.pr, PID: 14752
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.pr/com.example.pr.EvacuationAddActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.pr.data.PhotoObject.resize()' on a null object reference
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3680)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3723)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:156)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Looper.loop(Looper.java:211)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5389)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.example.pr.data.PhotoObject.resize()' on a null object reference
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.example.pr.EvacuationAddActivity.onActivityResult(EvacuationAddActivity.java:338)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.Activity.dispatchActivityResult(Activity.java:6192)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.deliverResults(ActivityThread.java:3676)
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.handleSendResult(ActivityThread.java:3723)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.access$1300(ActivityThread.java:156)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1400)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.os.Looper.loop(Looper.java:211)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5389)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:372)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)*
12-24 15:59:05.447 14752-14752/com.example.pr E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)*
Возможно описана похожая проблема, но в eng я слабоват для такого.
Проблема возникает редко, в большинстве случаев все работает.
Подскажите плиз из-за чего возникает проблема и как ее исправить ?
Ответ: Armagedo, как это не имеет !? я в первом посте написал что крах приложения происходит из-за этого.
И current_photoObj становиться null только когда появляется это сообщение.
Спасибо за копипаст, но если бы все же прочитали мой первый пост и увидели бы код и ссылку на овервлоф где описана эта проблема и я указал что не особо понимаю о чем идет речь.
Вопрос: SplashScreen

Сделал для своего приложения SplashScreen, чтобы заполнять бд, коннектиться к серверу, и тд. Но корректной работы не удается добиться, при запуске приложения черный экран, во время которого как раз все и выполняется, только после него появляется SplashScreen, который тут же переходит в основное активити.

Java(TM) 2 Platform Standard Edition 5.0
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
public class SplashScreen extends AppCompatActivity {
 
    private Context context;
    
    private User user;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
 
        context = this;
 
        new StartApp().execute();
    }
 
    private class StartApp extends AsyncTask<Void, Void, Void> {
 
        @Override
        protected Void doInBackground(Void... params) {
            user = User.getInstance(context);
 
            fillRounds();
            updateDb();
            updatePlace();
 
            return null;
        }
 
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
 
            try {
                Thread.sleep(4000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
 
            Intent intent = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(intent);
 
            finish();
        }
 
        private void fillRounds() {
            FillRounds fillRounds = new FillRounds(context, (ProgressBar) findViewById(R.id.pb_main), -1);
            fillRounds.execute();
        }
 
        private void updateDb() {
            CorrectionDB correctionDB = new CorrectionDB(context, null, -1);
            correctionDB.execute();
        }
 
        private void updatePlace() {
            if(user.getUserId() == 0)
                return;
 
            GlobalPlace globalPlace = new GlobalPlace(context, null);
            globalPlace.execute();
        }
    }
 
}
Пытался использовать Handler().postDelayed(), но, к сожалению, ничего не изменилось. Прошу помочь разобраться в этом вопросе, заранее спасибо.
Ответ:
Сообщение от MrScrat
try {
* * * * * * * * Thread.sleep(4000);
* * * * * * } catch (InterruptedException e) {
* * * * * * * * e.printStackTrace();
* * * * * * }
это надо заменить.

Handler#postDelayer -> Runnable {
Intent intent = new Intent(SplashScreen.this, MainActivity.class);
startActivity(intent);

finish();
}
Вопрос: Как сделать задержку выполнения программы на 3 сек

Очень простой вопрос, но ответа не могу найти!
Как я понял, что бы сделать задержку выполнения программы, необходимо в тексте написать Thread.sleep(3000);, соответственно студия выдает ошибку, но ничего не предлагает сделать! Вопрос что надо сделать чтоб это заработало, импортировать библиотеку или имплементится? чтооо?
Ответ: Ну вообще-то да такое он предлагал ), спасибо за ответ!