按钮触发功能和意图同时进行。安卓系统

时间:2018-09-02 09:08:45

标签: java android function android-studio android-intent

因此,我是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 :(得分:0)

似乎uploadImage()方法在网络上做了一些工作,并且由于网络请求和响应是在另一个线程中完成的,因此代码继续执行,并且在执行uploadImage()方法之前将显示已记录的活动。

所以一种方法是,您强制主线程等待网络线程,并且在网络线程完成后,主线程继续工作,但这会导致UI线程冻结。

另一种方式是您应该使用回调,当完成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);
                 }
    }

答案 1 :(得分:0)

最好使用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中的Web连接过程。