在 android 中使用 bundle 传递 URL 时传递 null
Passing null while passing URL using bundle in android
我正在做的是从 onPostExecute
方法获取 URL 并使用 bundle 将其传递给下一个片段。
我的问题是,在将数据传递给片段之前,我正在执行 Show_data()
。那为什么它给bundle.
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");
My problem is that. I am executing Show_data()
before passing data to
fragment. Then why it is given null to bundle.
因为 Show_data()
是一个 AsyncTask
,它会 运行 异步。这样 youtube_url1
将在分配到 onPostExecute
.
之前通过 bundle 传递给 fragment
Can I call youtube fragment inside onPostExecute
?
是的,你可以打电话,但你必须打电话。因为那是您问题的正确实施和解决方案。
将 youtube_url1
设置为捆绑在 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();
}
官方文档的注释
Note: this function schedules the task on a queue for a single
background thread or pool of threads depending on the platform version.
我正在做的是从 onPostExecute
方法获取 URL 并使用 bundle 将其传递给下一个片段。
我的问题是,在将数据传递给片段之前,我正在执行 Show_data()
。那为什么它给bundle.
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");
My problem is that. I am executing
Show_data()
before passing data to fragment. Then why it is given null to bundle.
因为 Show_data()
是一个 AsyncTask
,它会 运行 异步。这样 youtube_url1
将在分配到 onPostExecute
.
Can I call youtube fragment inside
onPostExecute
?
是的,你可以打电话,但你必须打电话。因为那是您问题的正确实施和解决方案。
将 youtube_url1
设置为捆绑在 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();
}
官方文档的注释
Note: this function schedules the task on a queue for a single background thread or pool of threads depending on the platform version.