我所拥有的:(第一功能) 我有一个listview活动,其中填充了JSON url中的项目。我还有另一个活动,将listItem移到editText字段,然后单击“保存”,将值保存为dB。
我还想要什么:(第二功能) 当我单击保存时,而不是返回到列表视图并选择下一个listItem,我希望editText为我填充新的listItem。但是我在每个步骤中都会犯错误。
下面是我为第一功能编写的代码。我知道只有少数几行可以实现第二个功能,但为此而苦苦挣扎。
这里的问题是我无法从一个调用列表String变量 活动给另一个,并为其分配位置或计数器。建议我 这里要更改什么。
MainActivity.java (包含用json url中的项目填充的ListView的类)
package com.example.app.listview;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.os.AsyncTask;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayList<String> tutorialList = new ArrayList<String>();
private final static String URL = "-----json------url----file";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new FetchDataTask().execute(URL);
}
private class FetchDataTask extends AsyncTask<String, Void, String>{
@Override
protected String doInBackground(String... params) {
InputStream inputStream = null;
String result= null;
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(params[0]);
try {
HttpResponse response = client.execute(httpGet);
inputStream = response.getEntity().getContent();
// convert inputstream to string
if(inputStream != null){
result = convertInputStreamToString(inputStream);
Log.i("App", "Data received:" +result);
}
else
result = "Failed to fetch data";
return result;
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String dataFetched) {
//parse the JSON data and then display
parseJSON(dataFetched);
}
private String convertInputStreamToString(InputStream inputStream) throws IOException{
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
String line = "";
String result = "";
while((line = bufferedReader.readLine()) != null)
result += line;
inputStream.close();
return result;
}
private void parseJSON(String data){
try{
JSONArray jsonMainNode = new JSONArray(data);
int jsonArrLength = jsonMainNode.length();
for(int i=0; i < jsonArrLength; i++) {
JSONObject jsonChildNode = jsonMainNode.getJSONObject(i);
String postTitle = jsonChildNode.getString("codeid");
tutorialList.add(postTitle);
}
// Get ListView object from xml
listView = (ListView) findViewById(R.id.list);
// Define a new Adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, tutorialList);
// Assign adapter to ListView
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
Intent intent = new Intent(MainActivity.this, AddFlowerInfo.class);
intent.putExtra("Code", listView.getItemAtPosition(i).toString());
startActivity(intent);
}
});
}catch(Exception e){
Log.i("App", "Error parsing data" +e.getMessage());
}
}
}
}
editText.java (包含editText字段并保存为dB的类)
package com.example.app.listview;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.util.Log;
import android.view.View;
public class AddFlowerInfo extends AppCompatActivity {
EditText editText; //non editable codeid <<----<<----<<----<<--<<---<<1
private static final String TAG = "AddFlowerInfo";
Button savedata;
String noneditcode;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_flower_info);
editText = (EditText) findViewById(R.id.codeid);
savedata = (Button) findViewById(R.id.saveflowerinfo);
final String Codeholder = getIntent().getStringExtra("Code");
editText.setText(Codeholder);
}
public void dataflowerinfo(View view){
noneditcode = editText.getText().toString();
String method = "FlowerInfo";
BackgroundTask2 backgroundTask2 = new BackgroundTask2(this);
backgroundTask2.execute(method, noneditcode);
finish();
}
更新AddFlowerInfo.java(OnCreate)和(OnClick)
public class AddFlowerInfo extends AppCompatActivity {
EditText editText; //non editable codeid <<----<<----<<----<<--<<---<<1
private static final String TAG = "AddFlowerInfo";
Button savedata;
int i=0;
String noneditcode;
int pos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_flower_info);
editText = (EditText) findViewById(R.id.codeid);
savedata = (Button) findViewById(R.id.saveflowerinfo);
Intent i =getIntent();
final ArrayList<String> list = i.getStringArrayListExtra("key");
pos = i.getIntExtra("position", 0);
// final String Codeholder = getIntent().getStringExtra("Code");
editText.setText(list.get(pos));
savedata.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(AddFlowerInfo.this, AddFlowerInfo.class);
startActivity(intent);
++pos;
if(pos<=list.size()-1)
list.get(pos);
}
});
答案 0 :(得分:0)
通过这样的活动传递数据
ArrayList<String> tutorialList = new ArrayList<String>();
Intent intent = new Intent(ActivityName.this, Second.class);
intent.putStringArrayListExtra("key", tutorialList);
startActivity(intent);
要检索AddFlowerInfo
Intent i = getIntent();
ArrayList<String> list = i.getStringArrayListExtra("key");
然后,当您使用位置从列表中检索数据时,每次将呼叫数据保存到下一个位置后,每次
答案 1 :(得分:0)
您需要将完整的数组连同位置发送到AddFlowerInfo
,因此更改您的onItemClick
代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
Intent intent = new Intent(MainActivity.this, AddFlowerInfo.class);
intent.putExtra("position", i);
intent.putStringArrayListExtra("array",tutorialList);
startActivity(intent);
}
});
现在在AddFlowerInfo
中:
Intent i = getIntent();
ArrayList<String> tutorialList = i.getStringArrayListExtra("array");
int pos=i.getIntExtra("position",0);
使用该位置从tutorialList
获取物品。
要在用户返回上一个活动时更新数据,请放置以下代码:
new FetchDataTask().execute(URL);
进入onResume
方法。
更新
保存第一项以编辑第二项后使用:
++pos;
if(pos<=tutorialList.size()-1)
editText.setText(tutorialList.get(pos));
else
{
// you are after last item do whatever you want
}