Android 如何使用for循环将多行数据发送到另一个intent活动?
这是我的jsonAndroid 如何使用for循环将多行数据发送到另一个intent活动?,android,android-intent,Android,Android Intent,这是我的json { "user_data":[ { "year":"2017", "month":"12", "day":"12", "StartTime":"2:00 am", "Endtime":"4:00 am", "Hours":"02:00:00" }, { "year":"2018",
{
"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从数据库接收所有数据,但问题是我想使用intent将接收到的数据发送到另一个活动,
我使用for循环将接收到的数据发送到另一个活动,当循环执行时,它会将所有数据发送到下一个活动,但当我尝试在toast中打印它们时,它会打印最后一行的详细信息,
我的问题是如何在第二个活动中设置循环,以便每行逐个接收。我没有在第二个活动中设置任何循环,因为我不知道如何设置。
有人能帮我做吗
这是我的第一个活动的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();
}
}
}
}
您以错误的方式进行操作,它将仅显示最后一行,因为这是您最后一次启动intent,并且以前的数据被替换。因此,您可以将您的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
,就像您的情况一样,并在第二个活动中解析数据。而不是使用字符串数组,我认为应该创建一个POJO来保存字段,并使用Gson解析对POJO数组的JSON响应。之后,让您的POJO类实现Parcelable,以便您可以传递到第二个活动。我看到的可能重复,我需要将多个数据发送到下一个活动,例如,年份变量在for循环中有2个值,我需要将这些值发送到下一个活动。然后检查下面的ans创建root
json对象有什么用?他就不能传递字符串结果吗@vikas??是的,兄弟@SantanuSur你是对的,我会做出改变。好的,兄弟,我可以试试,但我在发送整个字符串时遇到问题,因为我正在使用url从php接收数据,如果将根字符串发送到下一个活动,我必须再次在第二个活动中创建类后台任务!!!如果你有问题,那么你可以将其转换为某个模型,然后发送到另一个活动。我已经发布了我的第一个活动的完整代码。请检查它们@vika、@santanuhow,bro?你能举个例子吗?请在第二个活动中解析它们?
String jsonString = getIntent().getStringExtra("rootJson");