如何正确使用负载阵列和保存阵列的方法呢? [英] How to properly use load array and save array methods?

查看:111
本文介绍了如何正确使用负载阵列和保存阵列的方法呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下的code,其目的是为用户点击一个按钮,当他们按一下按钮,他们正在查看的特定字符串被收藏并保存在其他地方。

我有两个问题。

  1. 一有什么错我有什么权利呢?因为它崩溃,当您单击按钮。

  2. 你会如何去负载阵列的方法完成了对被加载并保存到一个数组中的字符串,使用户可以看到阵列以后呢?

感谢您的时间!

  fav.setOnClickListener(新View.OnClickListener(){

        公共无效的onClick(视图v){

            loadArray(最爱);
            收藏= Arrays.copyOf(我的最爱,favorites.length + 1);
            。收藏[favorites.length] = display.getText()的toString();
            saveArray(收藏,收藏夹);

        }
    });

    home.setOnClickListener(新View.OnClickListener(){

        公共无效的onClick(视图v){

            意图openStartingPoint =新的意向书(starting.rt.Menu2);
            startActivity(openStartingPoint);
        }
    });

    sea​​rch.setOnClickListener(新View.OnClickListener(){

        公共无效的onClick(视图v){

            意图openStartingPoint =新的意向书(starting.rt.Search);
            startActivity(openStartingPoint);
        }
    });

    moreapps.setOnClickListener(新View.OnClickListener(){

        公共无效的onClick(视图v){

            意图goToMarket;
            goToMarket =新的意图(Intent.ACTION_VIEW,乌里
                    .parse(市场://搜Q =酒馆:\?Wompa \));
            startActivity(goToMarket);
        }
    });

}

公众的String [] loadArray(字符串arrayName中){
    共享preferences preFS = getShared preferences(preferencename,0);
    INT大小= prefs.getInt(arrayName中+_size,0);
    String数组[] =新的String [尺寸]
    的for(int i = 0; I<大小;我++)
        阵列[i] = prefs.getString(arrayName中+_+ I,NULL);
    返回数组;
}

公共布尔saveArray(String []数组,字符串arrayName中){
    共享preferences preFS = getShared preferences(preferencename,0);
    共享preferences.Editor编辑器= prefs.edit();
    editor.putInt(arrayName中+_尺寸,array.length);
    的for(int i = 0; I< array.length;我++)
        editor.putString(arrayName中+_+ I,数组[I]);
    返回editor.commit();
}
 

登录猫

  05-08 23:10:51.329:I /处理(495):发送信号。 PID:495 SIG:9
05-08 23:11:02.360:D / dalvikvm(504):GC_EXTERNAL_ALLOC释放44K,53%免费2553K / 5379K,外部1625K / 2137K,暂停221ms
05-08 23:11:08.599:D / dalvikvm(504):GC_EXTERNAL_ALLOC释放16K,51%免费2644K / 5379K,外部2707K / 3308K,暂停174ms
05-08 23:11:12.570:D / AndroidRuntime(504):关闭虚拟机
05-08 23:11:12.570:W / dalvikvm(504):主题ID = 1:螺纹退出与未捕获的异常(组= 0x40015560)
05-08 23:11:12.599:E / AndroidRuntime(504):致命异常:主要
05-08 23:11:12.599:E / AndroidRuntime(504):显示java.lang.NullPointerException
05-08 23:11:12.599:E / AndroidRuntime(504):在starting.rt.Base $ 1.onClick(Base.java:52)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.view.View.performClick(View.java:2485)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.view.View $ PerformClick.run(View.java:9080)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.os.Handler.handleCallback(Handler.java:587)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.os.Handler.dispatchMessage(Handler.java:92)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.os.Looper.loop(Looper.java:123)
05-08 23:11:12.599:E / AndroidRuntime(504):在android.app.ActivityThread.main(ActivityThread.java:3683)
05-08 23:11:12.599:E / AndroidRuntime(504):在java.lang.reflect.Method.invokeNative(本机方法)
05-08 23:11:12.599:E / AndroidRuntime(504):在java.lang.reflect.Method.invoke(Method.java:507)
05-08 23:11:12.599:E / AndroidRuntime(504):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:839)
05-08 23:11:12.599:E / AndroidRuntime(504):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-08 23:11:12.599:E / AndroidRuntime(504):在dalvik.system.NativeStart.main(本机方法)
05-08 23:11:17.869:I /处理(504):发送信号。 PID:504 SIG:9
 

解决方案

loadArray 函数返回的String [] 。你可能会想使用它,如:

 的String [] ARR = loadArray(最爱);
 

此阵以后可以作为你的第二部分要求。希望这可以帮助。

更新 [基于您的评论]

所以,如果你想抓住在TextView的文本,并希望将其添加到列表/ String数组:

1),尝试从TextView的字符串

  TextView的显示器=(TextView中)findViewById(R.id.display);
。字符串toSave = display.getText()的toString();
 

2)获取使用`loadArray'从共享preferences现有列表:

 的String [] ARR = loadArray(最爱);
 

3)添加新的字符串:

 的ArrayList<字符串> arrList =新的ArrayList<字符串>();

的for(int i = 0; I< arr.length();我++){
     arrList.add(ARR [I]); //添加旧值的ArrayList
}
//添加新的字符串:
arrList.add(toSave);

//取回您的阵列
String []数组= arrList.toArray(新的String [arrList.size());
 

4)保存了一遍。

  saveArray(阵列,收藏夹);
 

I have the following code which is designed for the user to click on a button and when they click on the button, the particular string they are viewing is Favorited and stored somewhere else.

I have two questions.

  1. One what's wrong with what I have right now? as it crashes when you click the button.

  2. How would you go about finishing up on the load array method for the string to be loaded and saved to an array so the user could see that array later?

Thanks for your time!!

fav.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            loadArray("favorites");
            favorites = Arrays.copyOf(favorites, favorites.length+1);
            favorites[favorites.length]=display.getText().toString();
            saveArray(favorites, "favorites");

        }
    });

    home.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Intent openStartingPoint = new Intent("starting.rt.Menu2");
            startActivity(openStartingPoint);
        }
    });

    search.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Intent openStartingPoint = new Intent("starting.rt.Search");
            startActivity(openStartingPoint);
        }
    });

    moreapps.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            Intent goToMarket;
            goToMarket = new Intent(Intent.ACTION_VIEW, Uri
                    .parse("market://search?q=pub:\"Wompa\""));
            startActivity(goToMarket);
        }
    });

}

public String[] loadArray(String arrayName) {  
    SharedPreferences prefs = getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    String array[] = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  
}  

public boolean saveArray(String[] array, String arrayName) {   
    SharedPreferences prefs = getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i=0;i<array.length;i++)  
        editor.putString(arrayName + "_" + i, array[i]);  
    return editor.commit();  
} 

Log Cat

05-08 23:10:51.329: I/Process(495): Sending signal. PID: 495 SIG: 9
05-08 23:11:02.360: D/dalvikvm(504): GC_EXTERNAL_ALLOC freed 44K, 53% free 2553K/5379K, external 1625K/2137K, paused 221ms
05-08 23:11:08.599: D/dalvikvm(504): GC_EXTERNAL_ALLOC freed 16K, 51% free 2644K/5379K, external 2707K/3308K, paused 174ms
05-08 23:11:12.570: D/AndroidRuntime(504): Shutting down VM
05-08 23:11:12.570: W/dalvikvm(504): threadid=1: thread exiting with uncaught exception (group=0x40015560)
05-08 23:11:12.599: E/AndroidRuntime(504): FATAL EXCEPTION: main
05-08 23:11:12.599: E/AndroidRuntime(504): java.lang.NullPointerException
05-08 23:11:12.599: E/AndroidRuntime(504):  at starting.rt.Base$1.onClick(Base.java:52)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.view.View.performClick(View.java:2485)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.view.View$PerformClick.run(View.java:9080)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.os.Handler.handleCallback(Handler.java:587)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.os.Handler.dispatchMessage(Handler.java:92)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.os.Looper.loop(Looper.java:123)
05-08 23:11:12.599: E/AndroidRuntime(504):  at android.app.ActivityThread.main(ActivityThread.java:3683)
05-08 23:11:12.599: E/AndroidRuntime(504):  at java.lang.reflect.Method.invokeNative(Native Method)
05-08 23:11:12.599: E/AndroidRuntime(504):  at java.lang.reflect.Method.invoke(Method.java:507)
05-08 23:11:12.599: E/AndroidRuntime(504):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
05-08 23:11:12.599: E/AndroidRuntime(504):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
05-08 23:11:12.599: E/AndroidRuntime(504):  at dalvik.system.NativeStart.main(Native Method)
05-08 23:11:17.869: I/Process(504): Sending signal. PID: 504 SIG: 9

解决方案

loadArray function returns String[]. You might want to use it like:

String [] arr = loadArray("favorites");  

This array can be used later as you asked in 2nd part. Hope this helps.

Update [Based on your comment]

So, if you want to grab text in TextView and wish to add it in a List/String array:

1) Try to get the String from TextView

TextView display = (TextView)findViewById(R.id.display);
String toSave = display.getText().toString();

2) Get the existing list from SharedPreferences using `loadArray':

String [] arr = loadArray("favorites");  

3) Add the new String to it:

ArrayList<String> arrList = new ArrayList<String>();

for (int i=0; i<arr.length(); i++) {
     arrList.add(arr[i]); //add old values to arraylist
}
// add new string to it: 
arrList.add(toSave);

//Get back your array
String [] array = arrList.toArray(new String[arrList.size()]); 

4) Save it Again.

saveArray(array, "favorites");

这篇关于如何正确使用负载阵列和保存阵列的方法呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆