这里我正在做的是从onPostExecute
方法获取URL并使用bundle将其传递给下一个片段
我的问题是,我在将数据传递给片段之前执行Show_data()
。那么为什么它被赋予null来捆绑。
第二件事,我可以在onPostExecute
内调用youtube片段吗?
public class Tab2Frag extends Fragment {
public static String PRO_ID;
public static String youtube_url1;
MainActivity mainActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tab2, container, false);
new Show_data().execute();
new Adds1().execute();
Bundle data = new Bundle();
data.putString("youtube_details", youtube_url1);
System.out.println("@@2@@@"+youtube_url1);
YouTubeFragmentActivity youTubeFragmentActivity=new YouTubeFragmentActivity();
youTubeFragmentActivity.setArguments(data);
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.main, youTubeFragmentActivity).commit();
return rootView;
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
mainActivity=(MainActivity)activity;
}
class Show_data extends AsyncTask<String, String, String>{
JSONObject jsonobject;
JSONArray jsonarray;
ProgressDialog mDialog;
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
Bundle bundle = getActivity().getIntent().getExtras();
PRO_ID = bundle.getString("PRODUCT_ID");
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("http://towncitycards.com/webservice_action.php?action=get_detail&id="+PRO_ID);
try{
HttpResponse response = httpClient.execute(httpPost);
String data = inputStreamToString(response.getEntity().getContent());
jsonobject = new JSONObject(data);
jsonarray = new JSONArray(jsonobject.getString("detail"));
for(int j=0; j<jsonarray.length();j++){
JSONObject itemobj = jsonarray.getJSONObject(j);
//SHOW SEARCH RESULT
Get_detailsBeams get_detailsBeams = new Get_detailsBeams();
get_detailsBeams.setId(itemobj.getString("ID"));
get_detailsBeams.setYoutube(itemobj.getString("youtube_detail"));
get_detailsBeams.setTerms_condition(itemobj.getString("terms_condition"));
Log.v("Details", itemobj.toString());
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
@Override
public void onPostExecute(String result) {
super.onPostExecute(result);
final String youtube_url;
try {
youtube_url = jobj.opt("youtube_detail").toString();
System.out.println("@@@@3@"+youtube_url);
youtube_url1=youtube_url.replace("https://www.youtube.com/watch?v=","");
System.out.println("@@@@3@"+youtube_url1);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(mDialog!=null && mDialog.isShowing()){
mDialog.dismiss();
}
}
}
}
得到这样的话:
Bundle extras = getArguments();
YOU_TUBE = extras.getString("youtube_details");
答案 0 :(得分:2)
我的问题是。我在传递数据之前正在执行
Show_data()
分段。那么为什么它被赋予null来捆绑。
由于Show_data()
是AsyncTask
,因此它将异步运行。以便youtube_url1
在onPostExecute
中分配之前将onPostExecute
传递给片段。
我可以在
youtube_url1
内调用youtube片段吗?
是的,你可以打电话给&amp;你得打电话。因为这是正确的实施和解决你的问题。
将onPostExecute
设置为String youtube_url;
try {
youtube_url = jobj.opt("youtube_detail").toString();
System.out.println("@@@@3@"+youtube_url);
youtube_url1=youtube_url.replace("https://www.youtube.com/watch?v=","");
System.out.println("@@@@3@"+youtube_url1);
Bundle data = new Bundle();
data.putString("youtube_details", youtube_url1);
YouTubeFragmentActivity youTubeFragmentActivity=new YouTubeFragmentActivity();
youTubeFragmentActivity.setArguments(data);
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.main, youTubeFragmentActivity).commit();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(mDialog!=null && mDialog.isShowing()) {
mDialog.dismiss();
}
&amp;将该捆绑设置为片段&amp;开始交易。
{{1}}的官方文档的说明
注意:此函数会在队列中为单个任务计划任务 后台线程或线程池,具体取决于平台版本。