因此,我是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);
}
});
问题似乎是意图,当使用它时,它会忽略上面的其他两个功能,即上传图片并存储该图片的链接。 目标是上传图片,完成后获取链接,通过意图(与捆绑包一起)将链接发送到另一个活动,仅此而已。
答案 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连接过程。