Android 无法将数据获取到下一个活动

Android 无法将数据获取到下一个活动,android,Android,我正在尝试使用Bundle和putString将数据获取到下一个活动。但这些数据无法传送到下一页。以下是我的部分编码: public class assessment_table_edit extends AppCompatActivity { Toolbar toolbar; String data = ""; TableLayout tlAssessment; TableRow tr; TextView stuID,totalmarks,marks,edit; @Override prot

我正在尝试使用Bundle和putString将数据获取到下一个活动。但这些数据无法传送到下一页。以下是我的部分编码:

public class assessment_table_edit extends AppCompatActivity {
Toolbar toolbar;
String data = "";
TableLayout tlAssessment;
TableRow tr;
TextView stuID,totalmarks,marks,edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assessment_table_edit);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Percentage of the Marks");
    tlAssessment=(TableLayout)findViewById(R.id.tlAssessment_Edit);


    final Assessment_Information_GetData getdb=new Assessment_Information_GetData();
    new Thread(new Runnable() {
        @Override
        public void run() {
            data =getdb.getDataFromDB();
            System.out.println(data);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ArrayList<Assessment_Information> users=parseJSON(data);
                    addData(users);
                }
            });
        }
    }).start();


    if(getSupportActionBar()!=null){
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}

View.OnClickListener onClickListener=new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.assessment_id:
                Assessment_Information user=new Assessment_Information();
                Intent iChange=new Intent(assessment_table_edit.this,assessment_edit_data.class);
                Bundle b=new Bundle();
                b.putString("stuID",user.getStuID());
                iChange.putExtras(b);
               // iChange.putExtra("stuID",user.getStuID());
                startActivity(iChange);
                break;
        }
    }
};


public ArrayList<Assessment_Information>parseJSON(String result){
    ArrayList<Assessment_Information> users=new ArrayList<Assessment_Information>();
    try {
        JSONObject jsonObject=new JSONObject(result);
        JSONArray jsonArray = jsonObject.getJSONArray("posts");
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject json_data = jsonArray.getJSONObject(i);
            Assessment_Information user=new Assessment_Information();
            user.setStuID(json_data.getString("stuID"));
            user.setTotalmarks(json_data.getString("totalmarks"));
            user.setMarks(json_data.getString("marks"));
            users.add(user);
        }

    }catch (JSONException e){
        Log.e("log_tag", "Error parsing data " + e.toString());
    }

    return users;
}
My Assessment_Information.java:

public class Assessment_Information {
    String stuID;
    String totalmarks;
    String marks;

    public String getStuID() {
        return stuID;
    }

    public void setStuID(String stuID) {
        this.stuID = stuID;
    }

    public String getTotalmarks() {
        return totalmarks;
    }

    public void setTotalmarks(String totalmarks) {
        this.totalmarks = totalmarks;
    }

    public String getMarks() {
        return marks;
    }

    public void setMarks(String marks) {
        this.marks = marks;
    }
}

使用此代码向其他活动发送数据:

Intent intent = new Intent(context, YourActivity.class);
intent.putExtra("key", "value");
intent.putExtra("key2", "value2");
startActivity(intent);
并使用此代码获取其他活动中的数据:

Bundle bundle = getIntent().getExtras();
if(bundle!=null){
    String value1 = bundle.getString("key");
    String value2 = bundle.getString("key2");
}
您可以检查捆绑包是否包含密钥:

if(bundle.containsKey("key")){
   //...
}

更新

您正在创建一个没有任何数据的新用户(看起来)

在您的类
Assessment\u信息中,我没有看到将数据插入
stuID
变量的构造函数


更新

请尝试这部分代码:

public class assessment_table_edit extends AppCompatActivity {
    Toolbar toolbar;
    String data = "";
    TableLayout tlAssessment;
    TableRow tr;
    TextView stuID,totalmarks,marks,edit;
    ArrayList<Assessment_Information> users;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_assessment_table_edit);
        toolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Percentage of the Marks");
        tlAssessment=(TableLayout)findViewById(R.id.tlAssessment_Edit);


        final Assessment_Information_GetData getdb=new Assessment_Information_GetData();
        new Thread(new Runnable() {
            @Override
            public void run() {
                data =getdb.getDataFromDB();
                System.out.println(data);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        users=parseJSON(data);
                        addData(users);
                    }
                });
            }
        }).start();


        if(getSupportActionBar()!=null){
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }

    View.OnClickListener onClickListener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.assessment_id:

                    Intent iChange=new Intent(assessment_table_edit.this,assessment_edit_data.class);
                    Bundle b=new Bundle();
                    b.putString("stuID", users.get(0).getStuID());

                    // If you want to send more than the first user
                    //for(int i=0; users.size() < i ; i++) {
                    //    b.putString("stuID"+i, users.get(i).getStuID());
                    //}
                    //b.putInt("numberOfUsers", users.size());

                    iChange.putExtras(b);
                    // iChange.putExtra("stuID",user.getStuID());
                    startActivity(iChange);
                    break;
            }
        }
    };
public class assessment\u table\u edit活动{
工具栏;
字符串数据=”;
表格布局评估;
TableRow tr;
文本视图stuID、totalmarks、marks、edit;
ArrayList用户;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u assessment\u table\u edit);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“标记百分比”);
tAssessment=(TableLayout)findViewById(R.id.tAssessment_Edit);
最终评估_信息_GetData getdb=新评估_信息_GetData();
新线程(newrunnable()){
@凌驾
公开募捐{
data=getdb.getDataFromDB();
系统输出打印项次(数据);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
users=parseJSON(数据);
添加数据(用户);
}
});
}
}).start();
如果(getSupportActionBar()!=null){
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
View.OnClickListener OnClickListener=新建视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.评估\u id:
Intent iChange=新的意图(评估表编辑,即评估编辑数据类);
Bundle b=新Bundle();
b、 putString(“stuID”,users.get(0.getStuID());
//如果要发送的用户多于第一个用户
//对于(int i=0;users.size()
问题在于您实例化了用户对象,但从未检索数据。用户与您在类中声明的用户相同。
至少您应该从数据库中读取数据并将其设置为新对象。

这是在Android中获取某些数据的正确方法

使用此选项“放置”文件

Intent i = new Intent(FirstScreen.this, SecondScreen.class);   
String strName = null;
i.putExtra("STRING_I_NEED", strName);
然后,要检索该值,请尝试以下操作:

String newString;

Bundle extras = getIntent().getExtras();
if(extras == null) {
    newString= null;
} else {
    newString= extras.getString("STRING_I_NEED");
}
奖金建议: 我可以看到你的班名是
评估\u编辑\u数据
。 将其设置为Java建议的命名约定的
AssessmentEditData

Kleorence

看到您添加新行的庞大代码,我感到震惊。我将为您提供我的代码,以添加具有所需
样式和主题的新行。

优点:

  • 只需像往常一样使用.xml编写代码
  • 不需要用java编写行样式

    in onCreate 
    
    TableLayout tableLayout = (TableLayout) findViewById(R.id.tlpromote);
    
    private void addNewRow() {
    // instantiate a tableRow
        TableRow row = new TableRow(context);
    // inflate your custom view on it.
        View v = LayoutInflater.from(context).inflate(R.layout.table_row, row, false);
    // put your values in its views
        TextView tvTable_sr = (TextView) v.findViewById(R.id.tvTable_sr);
        TextView tvTable_title = (TextView) v.findViewById(R.id.tvTable_title);
    //add your custom view to row
        tableLayout.addView(v);
    }
    
这里的
表\u行
是具有自定义视图的行

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!--make any view you want-->

</LinearLayout>


我希望这对您很有帮助。

问题在于,您正在数组中填充数据,但当将对象传递给另一个活动时,您正在创建一个全新的对象,其中每个字段都为空

public class assessment_table_edit extends AppCompatActivity {
Toolbar toolbar;
String data = "";
TableLayout tlAssessment;
TableRow tr;
TextView stuID,totalmarks,marks,edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assessment_table_edit);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Percentage of the Marks");
    tlAssessment=(TableLayout)findViewById(R.id.tlAssessment_Edit);

//You are populating data here.
    final Assessment_Information_GetData getdb=new Assessment_Information_GetData();
    new Thread(new Runnable() {
        @Override
        public void run() {
            data =getdb.getDataFromDB();
            System.out.println(data);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ArrayList<Assessment_Information> users=parseJSON(data);
                    addData(users);
                }
            });
        }
    }).start();


    if(getSupportActionBar()!=null){
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}



   View.OnClickListener onClickListener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.assessment_id:
//Creating a new user in which every field is null/null object.
                    Assessment_Information user=new Assessment_Information();
                    Intent iChange=new Intent(assessment_table_edit.this,assessment_edit_data.class);
                    Bundle b=new Bundle();
//Passing an a field from the null object.
                        b.putString("stuID",user.getStuID());
                        iChange.putExtras(b);
                       // iChange.putExtra("stuID",user.getStuID());
                        startActivity(iChange);
                        break;
                }
            }
        };
public class assessment\u table\u edit活动{
工具栏;
字符串数据=”;
表格布局评估;
TableRow tr;
文本视图stuID、totalmarks、marks、edit;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u assessment\u table\u edit);
toolbar=(toolbar)findviewbyd(R.id.toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setTitle(“标记百分比”);
tAssessment=(TableLayout)findViewById(R.id.tAssessment_Edit);
//您正在此处填充数据。
最终评估_信息_GetData getdb=新评估_信息_GetData();
新线程(newrunnable()){
@凌驾
公开募捐{
data=getdb.getDataFromDB();
系统输出打印项次(数据);
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
ArrayList users=parseJSON(数据);
添加数据(用户);
}
});
}
}).start();
如果(getSupportActionBar()!=null){
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
}
View.OnClickListener OnClickListener=新建视图。OnClickListener(){
@凌驾
公共void onClick(视图v){
开关(v.getId()){
案例R.id.评估\u id:
//创建每个字段都为null/null对象的新用户。
评估信息用户=新评估信息();
Intent iChange=新的意图(评估表编辑,即评估编辑数据类);
Bundle b=新Bundle();
//将一个字段从
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!--make any view you want-->

</LinearLayout>
public class assessment_table_edit extends AppCompatActivity {
Toolbar toolbar;
String data = "";
TableLayout tlAssessment;
TableRow tr;
TextView stuID,totalmarks,marks,edit;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_assessment_table_edit);
    toolbar=(Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Percentage of the Marks");
    tlAssessment=(TableLayout)findViewById(R.id.tlAssessment_Edit);

//You are populating data here.
    final Assessment_Information_GetData getdb=new Assessment_Information_GetData();
    new Thread(new Runnable() {
        @Override
        public void run() {
            data =getdb.getDataFromDB();
            System.out.println(data);
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    ArrayList<Assessment_Information> users=parseJSON(data);
                    addData(users);
                }
            });
        }
    }).start();


    if(getSupportActionBar()!=null){
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    }
}



   View.OnClickListener onClickListener=new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.assessment_id:
//Creating a new user in which every field is null/null object.
                    Assessment_Information user=new Assessment_Information();
                    Intent iChange=new Intent(assessment_table_edit.this,assessment_edit_data.class);
                    Bundle b=new Bundle();
//Passing an a field from the null object.
                        b.putString("stuID",user.getStuID());
                        iChange.putExtras(b);
                       // iChange.putExtra("stuID",user.getStuID());
                        startActivity(iChange);
                        break;
                }
            }
        };