кнопка запуска функции и намерения одновременно. Android - PullRequest
0 голосов
/ 02 сентября 2018

Так что я новичок в Android и Java, и я понимаю, что я должен двигаться между действиями с намерениями.

Intent randomintent = new Intent(profile.this, loggedactivity.class);
randomintent .putString("name", namestring);
startActivity(randomintent);

Дело в том, что у меня также есть функция, которую я хочу, чтобы она выполнялась непосредственно перед тем, как это намерение приведет пользователя к другой деятельности. Так что мой код выглядит примерно так:

btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                uploadImage();
//this uploads the image, it works without the intent i added


    infosendstuff();
    //this should be executed after the image is uploaded and stores the image link to a database (also works)
   Intent randomintent = new Intent(profile.this, loggedactivity.class);
    randomintent .putString("name", namestring);
    startActivity(randomintent);        
    }
});

Проблема заключается в том, что при использовании она игнорирует две другие функции над ней, которые загружают изображение и сохраняют ссылку для этого изображения. Цель состоит в том, чтобы загрузить изображение, как только оно будет сделано, получить ссылку, отправить ссылку на другое действие, хотя намерение (с комплектом) и все об этом.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

лучше использовать AsynkTask.

создать класс, он должен расширяться от AsynkTask. в doInBackground загрузите свои фотографии, обработайте ответ и отправьте ссылку. и в методе onPostExecute перейдите к другой операции.

обновление 1

class myClass extends AsyncTask<Void,Void,Void>{

        @Override
        protected Void doInBackground(Void... params) {
            String result = uploadPhotos();
            proccess result;
            send links;
            return null;
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            Intent randomintent = new Intent(profile.this, loggedactivity.class);
            randomintent .putString("name", namestring);
            startActivity(randomintent);
        }
    }

теперь вы можете использовать его так:

new myClass().execute();

но перед написанием кода, я думаю, вам нужно больше узнать о процессе веб-соединения в Android.

0 голосов
/ 02 сентября 2018

Кажется, что uploadImage() Метод выполняет какие-то действия в сети, и, поскольку сетевой запрос и ответ выполняются в другом потоке, код продолжает выполняться, и активность протокола будет показана до выполнения метода uploadImage().

Таким образом, один из способов заключается в том, что вы заставляете основной поток ждать сетевой поток, а после завершения сетевого потока основной поток продолжает работать, но это приводит к зависанию потока пользовательского интерфейса.

Другой способ заключается в том, что вы должны использовать обратные вызовы, которые, когда метод uploadImage() завершен, вызовет какой-либо метод, и в этом методе вы начнете свою новую деятельность. что-то вроде кода ниже:

uploadImage(new ResponeListener() { 
                 @override
                 public void onDataReady(String nameString) {
                    Intent randomintent = new Intent(profile.this,loggedactivity.class);
                    Bundle b = new Bundle();
                    b.putString("name", namestring);
                    startActivity(randomintent);
                 }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...