我学习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/