簡體   English   中英

如何使用for循環意圖將多行數據發送到另一個活動?

[英]How to send multiple rows of data to another activity in intent using for loop?

這是我的json

{  
   "user_data":[  
      {  
         "year":"2017",
         "month":"12",
         "day":"12",
         "StartTime":"2:00 am",
         "Endtime":"4:00 am",
         "Hours":"02:00:00"
      },
      {  
         "year":"2018",
         "month":"12",
         "day":"10",
         "StartTime":"5:00 am",
         "Endtime":"7:00 am",
         "Hours":"02:00:00"
      }
   ]
}

我能夠在android活動中使用php從數據庫接收所有數據,但是問題是我想使用意圖將接收到的數據發送到另一個活動,我使用了for循環將接收到的數據發送到另一個活動,當循環執行后,它將所有數據發送到下一個活動,但是當我嘗試將它們打印成敬酒時,它會打印最后一行的詳細信息,我的問題是如何在第二個活動中設置循環以逐行接收每一行。而且我沒有在第二個活動中設置任何循環,因為我不知道該怎么做。 誰能幫助我做到這一點?

這是我第一次活動的android代碼

     package com.example.myapplication;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Calendar;


public class MainActivity extends Activity {

    EditText name, password;
    String NAME=null, PASSWORD=null, EMAIL=null;
    String Name, Password;
    Context ctx=this;
   // String[] year ;
   // String[] month;
   // String[] day;
   // String[] StartTime;
   // String[] Endtime;
    //String[] Hours;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        name = (EditText) findViewById(R.id.main_name);
        password = (EditText) findViewById(R.id.main_password);
    }


    public void main_login(View v){
        Name = name.getText().toString();
        Password = password.getText().toString();
        BackGround b = new BackGround();
        b.execute(Name, Password);
    }

    class BackGround extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... params) {
            String name = params[0];
            String password = params[1];
            String data="";
            int tmp;

            try {
                URL url = new URL("http://localhost/sample/FETCH/fetch.php");
                String urlParams = "name="+name+"&password="+password;

                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setDoOutput(true);
                OutputStream os = httpURLConnection.getOutputStream();
                os.write(urlParams.getBytes());
                os.flush();
                os.close();

                InputStream is = httpURLConnection.getInputStream();
                while((tmp=is.read())!=-1){
                    data+= (char)tmp;
                }

                is.close();
                httpURLConnection.disconnect();

                return data;
            } catch (MalformedURLException e) {
                e.printStackTrace();
                return "Exception: "+e.getMessage();
            } catch (IOException e) {
                e.printStackTrace();
                return "Exception: "+e.getMessage();
            }
        }

        @Override
        protected void onPostExecute(String result) {
            String err=null;
            try
            {
                JSONObject root = new JSONObject(result);

                JSONArray user_data = root.getJSONArray("user_data");

                String[] year = new String[user_data.length()];
                String[] month = new String[user_data.length()];
                String[] day = new String[user_data.length()];
                String[] StartTime = new String[user_data.length()];
                String[] Endtime = new String[user_data.length()];
                String[] Hours = new String[user_data.length()];

                for (int i = 0; i < user_data.length(); i++)
                {

                    JSONObject jsonObject = user_data.getJSONObject(i);

                    year[i]= jsonObject.getString("year");
                    month[i]  = jsonObject.getString("month");
                    day[i]  = jsonObject.getString("day");
                    StartTime[i]  = jsonObject.getString("StartTime");
                    Endtime[i]  = jsonObject.getString("Endtime");
                    Hours[i]  = jsonObject.getString("Hours");


                    Intent k = new Intent(ctx, Calender.class);
                    k.putExtra("year", year[i]);
                    k.putExtra("month", month[i]);
                    k.putExtra("day", day[i]);
                    k.putExtra("StartTime", StartTime[i]);
                    k.putExtra("Endtime", Endtime[i]);
                    k.putExtra("Hours", Hours[i]);
                    k.putExtra("err", err);
                    startActivity(k);


                }


                    //Toast.makeText(MainActivity.this, "result has value" + year[1], Toast.LENGTH_LONG).show();


            }
            catch (JSONException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if(result==null)
            {
               // Toast.makeText(MainActivity.this, year[0], Toast.LENGTH_LONG).show();
            }else
                {

                    //Toast.makeText(MainActivity.this, "result has value"+ year[0]  , Toast.LENGTH_LONG).show();
            }

        }
    }
}

這是我第二次接收數據的活動,我在這里沒有設置任何循環。

public class Calender extends AppCompatActivity
{
    String day, month, year,Hours,Endtime,StartTime, Err,Shours,Sminutes,Ssecond,Ehours,Eminutes,Esecond,Eampm,Sampm;
    int s,mo;
    public static final int MY_PERMISSIONS_REQUEST_WRITE_CALENDAR = 123;
    Context context;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_calender);
        context = Calender.this;
        writeCalendarEvent();

    }
    private void writeCalendarEvent()
    {


            year = getIntent().getStringExtra("year");
            month = getIntent().getStringExtra("month");
            day = getIntent().getStringExtra("day");
            StartTime = getIntent().getStringExtra("StartTime");
            Endtime = getIntent().getStringExtra("Endtime");
            Hours = getIntent().getStringExtra("Hours");
            Err = getIntent().getStringExtra("err");



            Toast.makeText(context, "result has value" + year, Toast.LENGTH_LONG).show();




    }
}

您以錯誤的方式進行操作,由於它是您最后一次啟動該意圖並且僅替換了 先前的數據 ,因此它僅顯示最后一行。 因此,您可以將您的JSON轉換為某個字符串,然后使用putExtraString轉移到其他活動,或者可以制作某個模型的列表,然后將該列表轉移到該意圖並在另一個活動中接收它。

這是您的操作方法。

方法1

protected void onPostExecute(String result) {
        String err=null;
        try
        {
            JSONObject root = new JSONObject(result);

                Intent k = new Intent(ctx, Calender.class);
                k.putExtra("rootJson",result);
                startActivity(k);

            }

        }
        catch (JSONException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

並使用另一面接收

String jsonString = getIntent().getStringExtra("rootJson");

或者,您可以將JSON轉換為某種模型,然后使其可打包,然后放入intent並在另一側接收。

只需按照您的情況通過intent傳遞整個String結果,然后在第二個活動中解析數據。

我認為您應該創建一個POJO來保存字段,並使用Gson解析對POJO數組的JSON響應,而不是使用String數組。 之后,讓您的POJO類實現Parcelable,以便您可以傳遞到第二個活動。

暫無
暫無

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

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