簡體   English   中英

將數據從片段發送到活動並解析json

[英]Sending data from fragment to activity and parse json

我正在嘗試將片段活動中的“ id”發送到活動,並基於此“ id”字段來解析json數據。

我已成功將數據從片段發送到TourDetail活動,但未基於相同的“ id”解析json。 當我使用吐司檢查代碼時,代碼未達到第二個try塊。

雖然當我通過其他活動傳遞“ id”時,相同的活動(TourDetailActivity.java)正常工作。 假設,如果我從jsonuseactivity.java傳遞了“ id”,TourDetailActivity.java將成功接收它,並生成相應的json結果並顯示適當的結果。

但是,如果從分片活動傳遞了相同的“ id”,則盡管接收到了“ id”,但沒有生成json,並且也沒有生成基於json的必需結果。

TourDetailActivity.java

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tour_detail);

    Intent intent = getIntent();
    String rcvid = intent.getStringExtra("id");
    Toast.makeText(getApplicationContext(), rcvid, Toast.LENGTH_LONG).show();

    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
    postParameters.add(new BasicNameValuePair("tourid", rcvid));

    String response = null;

    // call executeHttpPost method passing necessary parameters 
    try {
        Toast.makeText(getApplicationContext(), "in try block", Toast.LENGTH_LONG).show();
        response = CustomHttpClient.executeHttpPost(
                //"http://129.107.187.135/CSE5324/jsonscript.php", // your ip address if using localhost server
                "http://www.futurolicht.com/jsontour.php",  // in case of a remote server
                postParameters);
        String result = response.toString();
        Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show();
        //parse json data
        try {
            Toast.makeText(getApplicationContext(), "in 2nd try block", Toast.LENGTH_LONG).show();
            JSONArray jArray = new JSONArray(result);
            for (int i = 0; i < jArray.length(); i++) {

                JSONObject json_data = jArray.getJSONObject(i);
                tname = (TextView) findViewById(R.id.txt_tourtitle);
                td = (TextView) findViewById(R.id.txt_day);
                tn = (TextView) findViewById(R.id.txt_night);
                tdest = (TextView) findViewById(R.id.txt_tourdetail_dest);
                btn = (Button) findViewById(R.id.btn_tourdetail);
                btn.setOnClickListener(this);

                tname.setText(json_data.getString("tour_name"));
                tn.setText(json_data.getString("nights"));
                td.setText(json_data.getString("days"));
                name = json_data.getString("tour_name");
                n = json_data.getString("nights");
                d = json_data.getString("days");
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data " + e.toString());
        }
    }

這是我的Fragmentone.java的onCreate()方法代碼:

        ViewGroup root = (ViewGroup) inflater.inflate(R.layout.fragment_one, null);
        String fontPath = "fonts/ox.ttf";
        b1 = (Button)root.findViewById(R.id.featured_btn1);
        b1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String id = "34";
                Intent intent = new Intent(getActivity(), TourDetailActivity.class);
                intent.putExtra("id", id);
                getActivity().startActivity(intent);
            }
        });

我不知道實際發生了什么,因為上面的代碼對我來說似乎還可以。 無需發送數據,您可以將變量設置為Static並在Fragmentone.id類的其他類中訪問該變量。 這肯定會起作用。

您是否也嘗試在onStart()而不是onCreate()捕獲該id 在啟動時檢查是否有參數傳遞給片段很方便

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM