Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 按钮触发功能和意图同时出现。安卓_Java_Android_Function_Android Studio_Android Intent - Fatal编程技术网

Java 按钮触发功能和意图同时出现。安卓

Java 按钮触发功能和意图同时出现。安卓,java,android,function,android-studio,android-intent,Java,Android,Function,Android Studio,Android Intent,所以我对android和java还不熟悉,我知道我应该在活动之间有目的地移动 Intent randomintent = new Intent(profile.this, loggedactivity.class); randomintent .putString("name", namestring); startActivity(randomintent); 问题是,我还有一个函数,我希望它在这个意图将用户带到另一个活动之前被执行。所以我的代码看起来像这样 btnUpload.setOnC

所以我对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);        
    }
});
问题似乎在于,当使用时,它忽略了它上面的另外两个功能,即上传图片和存储该图片的链接。
目标是上传图片,一旦完成,获取链接,通过意图(使用捆绑包)将链接发送到另一个活动,仅此而已

似乎
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);
                 }
    }

最好使用
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);
        }
    }

但在编写代码之前,我认为您需要更多地了解android中的web连接过程。

请分享您的
uploadImage()
infosendstuff()
代码。您的包似乎没有任何用处。你有没有考虑过使用
putExtra()
?@jake我试过了,但效果也一样!但是,当您在另一个
活动
中检索该值时,您是否获得了该值?请发布看起来合乎逻辑的
uploadImage()
infosendstuff()
方法。谢谢但是你知道我是否也可以安装infosendstuff();这个ondataready中的方法?所以,当图像上传时,它可以被触发吗?是的,但是你应该考虑如果IfSoNoStutsFor()在网络上也做一些工作,活动将在它之前完成。谢谢
new myClass().execute();