android - 如何在新的ListView Activity中保存EditText数据

标签 android mysql listview

我学习Android编程时遇到一个小问题。 我已经在 Google 上搜索解决方案,但找不到,需要您的帮助。

我按照一个教程使用 mySQL 数据库进行基本的 CRUD 操作。

这是源代码:

package net.simplifiedlearning.myheroapp;

import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RatingBar;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import static android.view.View.GONE;

public class MainActivity extends AppCompatActivity {

private static final int CODE_GET_REQUEST = 1024;
private static final int CODE_POST_REQUEST = 1025;

EditText editTextHeroId, editTextNom, editTextprenom;
RatingBar ratingBar;
Spinner spinnerTeam;
ProgressBar progressBar;
ListView listView;
Button buttonAddUpdate;

List<Hero> heroList;

boolean isUpdating = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    editTextHeroId = (EditText) findViewById(R.id.editTextHeroId);
    editTextNom = (EditText) findViewById(R.id.editTextNom);
    editTextprenom = (EditText) findViewById(R.id.editTextPrenom);
    ratingBar = (RatingBar) findViewById(R.id.ratingBar);
    spinnerTeam = (Spinner) findViewById(R.id.spinnerTeamAffiliation);

    buttonAddUpdate = (Button) findViewById(R.id.buttonAddUpdate);

    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    listView = (ListView) findViewById(R.id.listViewHeroes);

    heroList = new ArrayList<>();


    buttonAddUpdate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (isUpdating) {
                updateHero();
            } else {
                createHero();
            }
        }
    });
    readHeroes();
}

private void createHero() {
    String nom = editTextNom.getText().toString().trim();
    String prenom = editTextprenom.getText().toString().trim();

    int rating = (int) ratingBar.getRating();

    String team = spinnerTeam.getSelectedItem().toString();

    if (TextUtils.isEmpty(nom)) {
        editTextNom.setError("Please enter name");
        editTextNom.requestFocus();
        return;
    }

    if (TextUtils.isEmpty(prenom)) {
        editTextprenom.setError("Please enter real name");
        editTextprenom.requestFocus();
        return;
    }

    HashMap<String, String> params = new HashMap<>();
    params.put("nom", nom);
    params.put("prenom", prenom);
    params.put("rating", String.valueOf(rating));
    params.put("teamaffiliation", team);

    PerformNetworkRequest request = new PerformNetworkRequest(Api.URL_CREATE_HERO, params, CODE_POST_REQUEST);
    request.execute();
}

private void readHeroes() {
    PerformNetworkRequest request = new PerformNetworkRequest(Api.URL_READ_HEROES, null, CODE_GET_REQUEST);
    request.execute();
}

private void updateHero() {
    String id = editTextHeroId.getText().toString();
    String nom = editTextNom.getText().toString().trim();
    String prenom = editTextprenom.getText().toString().trim();

    int rating = (int) ratingBar.getRating();

    String team = spinnerTeam.getSelectedItem().toString();


    if (TextUtils.isEmpty(nom)) {
        editTextNom.setError("Please enter name");
        editTextNom.requestFocus();
        return;
    }

    if (TextUtils.isEmpty(prenom)) {
        editTextprenom.setError("Please enter real name");
        editTextprenom.requestFocus();
        return;
    }

    HashMap<String, String> params = new HashMap<>();
    params.put("id", id);
    params.put("nom", nom);
    params.put("prenom", prenom);
    params.put("rating", String.valueOf(rating));
    params.put("teamaffiliation", team);


    PerformNetworkRequest request = new PerformNetworkRequest(Api.URL_UPDATE_HERO, params, CODE_POST_REQUEST);
    request.execute();

    buttonAddUpdate.setText("Add");

    editTextNom.setText("");
    editTextprenom.setText("");
    ratingBar.setRating(0);
    spinnerTeam.setSelection(0);

    isUpdating = false;
}

private void deleteHero(int id) {
    PerformNetworkRequest request = new PerformNetworkRequest(Api.URL_DELETE_HERO + id, null, CODE_GET_REQUEST);
    request.execute();
}

private void refreshHeroList(JSONArray heroes) throws JSONException {
    heroList.clear();

    for (int i = 0; i < heroes.length(); i++) {
        JSONObject obj = heroes.getJSONObject(i);

        heroList.add(new Hero(
                obj.getInt("id"),
                obj.getString("nom"),
                obj.getString("prenom"),
                obj.getInt("rating"),
                obj.getString("teamaffiliation")
        ));
    }

    HeroAdapter adapter = new HeroAdapter(heroList);
    listView.setAdapter(adapter);
}

private class PerformNetworkRequest extends AsyncTask<Void, Void, String> {
    String url;
    HashMap<String, String> params;
    int requestCode;

    PerformNetworkRequest(String url, HashMap<String, String> params, int requestCode) {
        this.url = url;
        this.params = params;
        this.requestCode = requestCode;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressBar.setVisibility(View.VISIBLE);
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        progressBar.setVisibility(GONE);
        try {
            JSONObject object = new JSONObject(s);
            if (!object.getBoolean("error")) {
                Toast.makeText(getApplicationContext(), object.getString("message"), Toast.LENGTH_SHORT).show();
                refreshHeroList(object.getJSONArray("heroes"));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected String doInBackground(Void... voids) {
        RequestHandler requestHandler = new RequestHandler();

        if (requestCode == CODE_POST_REQUEST)
            return requestHandler.sendPostRequest(url, params);


        if (requestCode == CODE_GET_REQUEST)
            return requestHandler.sendGetRequest(url);

        return null;
    }
}

class HeroAdapter extends ArrayAdapter<Hero> {
    List<Hero> heroList;

    public HeroAdapter(List<Hero> heroList) {
        super(MainActivity.this, R.layout.layout_hero_list, heroList);
        this.heroList = heroList;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = getLayoutInflater();
        View listViewItem = inflater.inflate(R.layout.layout_hero_list, null, true);

        TextView textViewName = listViewItem.findViewById(R.id.textViewName);

        TextView textViewUpdate = listViewItem.findViewById(R.id.textViewUpdate);
        TextView textViewDelete = listViewItem.findViewById(R.id.textViewDelete);

        final Hero hero = heroList.get(position);

        textViewName.setText(hero.getNom());

        textViewUpdate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isUpdating = true;
                editTextHeroId.setText(String.valueOf(hero.getId()));
                editTextNom.setText(hero.getNom());
                editTextprenom.setText(hero.getPrenom());
                ratingBar.setRating(hero.getRating());
                spinnerTeam.setSelection(((ArrayAdapter<String>) spinnerTeam.getAdapter()).getPosition(hero.getTeamaffiliation()));
                buttonAddUpdate.setText("Update");
            }
        });

        textViewDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                builder.setTitle("Delete " + hero.getNom())
                        .setMessage("Are you sure you want to delete it?")
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                deleteHero(hero.getId());
                            }
                        })
                        .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                            }
                        })
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .show();

            }
        });

        return listViewItem;
    }
}
}

我想得到相同的结果,但我想在另一个 Activity 中得到一个listView。 请问怎么做?

最佳答案

将所有数据存储在对象中,并使用 Intent 和可序列化将其发送到下一个 Activity 。 在 Hero 类中实现可序列化。 并将其传递给适配器。

关于android - 如何在新的ListView Activity中保存EditText数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46791046/

相关文章:

mysql - 在没有临时表的情况下从 MIN 小时中选择一天的 MIN 时间?

java - ListView 嵌套在 ListView 中,并且根据 Cursor 值不同行

mysql - 如何解决MySQL死锁

php - 从php/mysql中获取日期和时间格式的数据,它应该显示在android studio的textview中

android - 将 FloatingActionButton 作为 FooterView 添加到 ListView

Android - 工具栏在 ListView 滚动时高于状态栏

android - 共享首选项 : Why are they called so?

java - 在 selectItem 的第一种情况下使用 startActivity 时抽屉导航不工作

android - Unity 应用程序适用于开发版本,而不是普通版本

java - android点击按钮没有触发事件