如何通过ArrayList<;字符串>;从android中的活动到服务?
我在SD卡中有一个文件,使用活动的AsyncTask读取它,并将文件中的数据存储到ArrayList,我想将ArrayList从MainActivity.java传递到MyService.java。请在这方面帮助我 下面给出了在MainActivity.java中使用AsyncTask从SD卡读取文件如何通过ArrayList<;字符串>;从android中的活动到服务?,android,string,service,arraylist,android-activity,Android,String,Service,Arraylist,Android Activity,我在SD卡中有一个文件,使用活动的AsyncTask读取它,并将文件中的数据存储到ArrayList,我想将ArrayList从MainActivity.java传递到MyService.java。请在这方面帮助我 下面给出了在MainActivity.java中使用AsyncTask从SD卡读取文件 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; imp
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity
{
String name = "/sdcard/Download/example.txt";
ArrayList<String> lines = new ArrayList<String>();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AsyncTaskRunner reader = new AsyncTaskRunner();
reader.execute(name);
}
//Async Task
private class AsyncTaskRunner extends AsyncTask<String, String, String>
{
String res;
@Override
protected String doInBackground(String... params) {
publishProgress("Reading...."); // Calls onProgressUpdate()
try
{
// Do your long operations here and return the result
//readFileLines(params[0]);
readFile(params[0]);
} catch (Exception e) {
e.printStackTrace();
res = e.getMessage();
}
return res;
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
Log.i("no. of lines",String.valueOf(lines.size()));
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// Things to be done before execution of long running operation. For
// example showing ProgessDialog
}
/*
* (non-Javadoc)
*
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(String... text) {
// Things to be done while execution of long running operation is in
// progress. For example updating ProgessDialog
}
}
private void readFile(String name) throws IOException
{
File file = new File(name);
if(file.exists()) // check if file exist
{
//Read text from file
try {
BufferedReader br = new BufferedReader(new FileReader(file));
Log.i("async", "reading started");
lines.clear();
String strLine;
while (true)
{
strLine = br.readLine();
if (strLine == null)
{
br.close();
Log.i("complete", String.valueOf(lines.size()));
return;
}
lines.add(strLine);
}
}
catch(Exception e)
{
Toast.makeText(this, "can't read", Toast.LENGTH_LONG).show();
}
}
}
}
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.ArrayList;
导入android.app.Activity;
导入android.os.AsyncTask;
导入android.os.Bundle;
导入android.util.Log;
导入android.widget.Toast;
公共类MainActivity扩展了活动
{
String name=“/sdcard/Download/example.txt”;
ArrayList行=新的ArrayList();
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AsyncTaskRunner reader=新建AsyncTaskRunner();
reader.execute(名称);
}
//异步任务
私有类AsyncTaskRunner扩展了AsyncTask
{
字符串res;
@凌驾
受保护的字符串doInBackground(字符串…参数){
publishProgress(“Reading…”);//调用onProgressUpdate()
尝试
{
//在此处执行长时间操作并返回结果
//readFileLines(参数[0]);
readFile(参数[0]);
}捕获(例外e){
e、 printStackTrace();
res=e.getMessage();
}
返回res;
}
/*
*(非Javadoc)
*
*@see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@凌驾
受保护的void onPostExecute(字符串结果){
//执行耗时较长的操作的结果
Log.i(“行数”,String.valueOf(lines.size());
}
/*
*(非Javadoc)
*
*@see android.os.AsyncTask#onPreExecute()
*/
@凌驾
受保护的void onPreExecute(){
//在执行长时间运行的操作之前要做的事情
//显示ProgesDialog的示例
}
/*
*(非Javadoc)
*
*@请参阅android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@凌驾
受保护的void onProgressUpdate(字符串…文本){
//在执行长时间运行的操作时要做的事情
//进度。例如更新ProgesDialog
}
}
私有void readFile(字符串名称)引发IOException
{
文件文件=新文件(名称);
if(file.exists())//检查文件是否存在
{
//从文件中读取文本
试一试{
BufferedReader br=新的BufferedReader(新文件读取器(文件));
i(“异步”,“读取已启动”);
行。清除();
弦斯特林;
while(true)
{
strLine=br.readLine();
if(strLine==null)
{
br.close();
Log.i(“complete”,String.valueOf(lines.size());
返回;
}
行。添加(strLine);
}
}
捕获(例外e)
{
Toast.makeText(这个“无法阅读”,Toast.LENGTH_LONG.show();
}
}
}
}
上述ArrayList行应传递给服务
尝试使用Intent i=newintent(MainActivity.this,MyService.class);
i、 putStringArrayListExtra(“行”,行);
startService(一)代码>
但这不起作用,并且试图处理Parcelable,但我卡住了,请帮帮我…我使用以下方法将ArrayList保存到SharedReferences:
SharedPreferences sp_arrayList = getSharedPreferences("arrayList", 0);
SharedPreferences.Editor editor = sp_arrayList.edit();
int listSize = arrayList.size();
editor.putInt("arrayList_size", listSize);
for (int i = 0; i < listSize; i++) {
String myString = arrayList.get(i);
editor.putString("myString_" + i, myString);
}
editor.commit();
SharedReferences sp_arrayList=getSharedReferences(“arrayList”,0);
SharedReferences.Editor=sp_arrayList.edit();
int listSize=arrayList.size();
putInt(“arrayList_size”,listSize);
for(int i=0;i
但是可能有更好的解决办法。到目前为止,您有什么经验?你试过什么吗?您熟悉意图吗?我熟悉基本意图,并尝试将ArrayList作为额外的,但在使用getIntent()方法从服务m检索列表时,getIntent()在服务中不可用