Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过ArrayList<;字符串>;从android中的活动到服务?_Android_String_Service_Arraylist_Android Activity - Fatal编程技术网

如何通过ArrayList<;字符串>;从android中的活动到服务?

如何通过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

我在SD卡中有一个文件,使用活动的AsyncTask读取它,并将文件中的数据存储到ArrayList,我想将ArrayList从MainActivity.java传递到MyService.java。请在这方面帮助我

下面给出了在MainActivity.java中使用AsyncTask从SD卡读取文件

    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()在服务中不可用