簡體   English   中英

編寫微調器並將數據切換到Android文本文件

[英]Writing spinner and switch data to text file Android

因此,有了我的微調器,我將能夠選擇不同的服務器並將所選數據寫入文本文件,以供其他應用檢索。 就其本身而言,這很好。

我需要在此添加另一部分,這是一個開關,以確認加密基本為真或為假,其目的是在文件輸出流中存儲稍后要調用的字符串。

我似乎有些困惑,在fos中添加了兩個單獨的字符串,而我嘗試給我的一種方式和關於“字節” +“字節”不允許的錯誤。 我目前使用它的方式運行,但是我在logcats中遇到錯誤

所以我需要一些幫助來找到哪個部分壞了,為什么它不能接受我的琴弦,以及如何修復它

日志

        06-07 03:05:05.508 18344-18344/com.dooves.spinnertest W/ResourcesManager: getTopLevelResources: /data/app/com.dooves.spinnertest-1/base.apk / 1.0 running in com.dooves.spinnertest rsrc of package null
    06-07 03:05:05.528 18344-18344/com.dooves.spinnertest W/System: ClassLoader referenced unknown path: /data/app/com.dooves.spinnertest-1/lib/arm
    06-07 03:05:05.558 18344-18344/com.dooves.spinnertest W/art: Failed to open zip archive '/system/framework/com.qti.location.sdk.jar': I/O Error
    06-07 03:05:06.768 18344-18344/com.dooves.spinnertest W/System: ClassLoader referenced unknown path: /data/app/com.dooves.spinnertest-1/lib/arm
    06-07 03:05:06.918 18344-18344/com.dooves.spinnertest W/ResourcesManager: getTopLevelResources: /data/app/com.dooves.spinnertest-1/base.apk / 1.0 running in com.dooves.spinnertest rsrc of package null
    06-07 03:05:06.918 18344-18344/com.dooves.spinnertest W/ResourcesManager: getTopLevelResources: /data/app/com.dooves.spinnertest-1/base.apk / 1.0 running in com.dooves.spinnertest rsrc of package null
    06-07 03:05:07.068 18344-18344/com.dooves.spinnertest W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
    06-07 03:05:07.208 18344-18344/com.dooves.spinnertest I/Switch: Immediately mode attached=false laidOut=false
    06-07 03:05:07.208 18344-18344/com.dooves.spinnertest I/Switch: Immediately mode attached=false laidOut=false
    06-07 03:05:07.248 18344-18344/com.dooves.spinnertest D/SecWifiDisplayUtil: Metadata value : none
    06-07 03:05:07.248 18344-18344/com.dooves.spinnertest D/ViewRootImpl: #1 mView = com.android.internal.policy.PhoneWindow$DecorView{95a1ffb I.E...... R.....ID 0,0-0,0}
    06-07 03:05:07.248 18344-18547/com.dooves.spinnertest D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
    06-07 03:05:07.318 18344-18547/com.dooves.spinnertest I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build:  (Ia10634f51b)
                                                                        OpenGL ES Shader Compiler Version: E031.29.00.00
                                                                        Build Date: 01/28/16 Thu
                                                                        Local Branch: ss
                                                                        Remote Branch: 
                                                                        Local Patches: 
                                                                        Reconstruct Branch: 
    06-07 03:05:07.328 18344-18547/com.dooves.spinnertest D/libEGL: eglInitialize EGLDisplay = 0x9f28b7c4
    06-07 03:05:07.328 18344-18547/com.dooves.spinnertest I/OpenGLRenderer: Initialized EGL, version 1.4
    06-07 03:05:07.438 18344-18344/com.dooves.spinnertest W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
    06-07 03:05:07.568 18344-18344/com.dooves.spinnertest D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 72 - 0, 0) vi=Rect(0, 72 - 0, 0) or=1
    06-07 03:05:07.598 18344-18344/com.dooves.spinnertest I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@ec4ad8a time:38728975
    06-07 03:05:14.398 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 0
    06-07 03:05:14.528 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 1
    06-07 03:05:14.568 18344-18344/com.dooves.spinnertest D/AbsListView: Get MotionRecognitionManager
    06-07 03:05:14.578 18344-18344/com.dooves.spinnertest E/MotionRecognitionManager: mSContextService = android.hardware.scontext.ISContextService$Stub$Proxy@ebd8dc7
    06-07 03:05:14.578 18344-18344/com.dooves.spinnertest E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@6d22ff4
    06-07 03:05:14.578 18344-18344/com.dooves.spinnertest E/MotionRecognitionManager: motionService = com.samsung.android.motion.IMotionRecognitionService$Stub$Proxy@6d22ff4
    06-07 03:05:14.588 18344-18344/com.dooves.spinnertest D/ViewRootImpl: #1 mView = android.widget.PopupWindow$PopupDecorView{1528992 V.E...... ......I. 0,0-0,0}
    06-07 03:05:14.668 18344-18344/com.dooves.spinnertest W/DisplayListCanvas: DisplayListCanvas is started on unbinded RenderNode (without mOwningView)
    06-07 03:05:14.678 18344-18344/com.dooves.spinnertest D/ViewRootImpl: MSG_RESIZED_REPORT: ci=Rect(0, 0 - 0, 0) vi=Rect(0, 0 - 0, 0) or=1
    06-07 03:05:15.398 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 0
    06-07 03:05:15.518 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 1
    06-07 03:05:15.938 18344-18547/com.dooves.spinnertest D/OpenGLRenderer: endAllActiveAnimators on 0xadcbd280 (ListPopupWindow$DropDownListView) with handle 0x9df14170
    06-07 03:05:15.938 18344-18344/com.dooves.spinnertest D/ViewRootImpl: #3 mView = null
    06-07 03:05:16.378 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 0
    06-07 03:05:16.478 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 1
    06-07 03:05:18.278 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 0
    06-07 03:05:18.388 18344-18344/com.dooves.spinnertest D/ViewRootImpl: ViewPostImeInputStage processPointer 1
    06-07 03:05:18.398 18344-18344/com.dooves.spinnertest W/System.err: java.io.UnsupportedEncodingException: &true
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.nio.charset.Charset.forNameUEE(Charset.java:322)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.lang.String.getBytes(String.java:534)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at com.dooves.spinnertest.MainActivity.saveSettings(MainActivity.java:114)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.view.View.performClick(View.java:5697)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.widget.TextView.performClick(TextView.java:10826)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.view.View$PerformClick.run(View.java:22526)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.os.Handler.handleCallback(Handler.java:739)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:95)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.os.Looper.loop(Looper.java:158)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7224)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err: Caused by: java.nio.charset.IllegalCharsetNameException: &true
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.nio.charset.Charset.checkCharsetName(Charset.java:197)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.nio.charset.Charset.forName(Charset.java:295)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     at java.nio.charset.Charset.forNameUEE(Charset.java:320)
    06-07 03:05:18.408 18344-18344/com.dooves.spinnertest W/System.err:     ... 14 more

因此,我不確定該更改以糾正此問題。 如果我從字符串中刪除“&”,則會得到相同的logcat,但會說“ true”,而不是“&true”

這是我的代碼

public class MainActivity extends AppCompatActivity {
    Spinner spinner;
    ArrayAdapter<CharSequence> adapter;
    String SelectedServer;
    Switch passSwitch;
    String PasswordEncryption;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        spinner = (Spinner) findViewById(R.id.spinner);
        adapter = ArrayAdapter.createFromResource(this, R.array.serverUrl, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        passSwitch = (Switch) findViewById(R.id.passencrypt);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                SelectedServer = parent.getItemAtPosition(position).toString();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }

        });

        passSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    PasswordEncryption = "&true";
                } else {
                    PasswordEncryption = "&false";
                }
            }
        });
    }


            public void saveSettings(View view) {

                File txtFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/MyFolder/");
                if (!txtFolder.exists()) {
                    txtFolder.mkdir();
                }
                File file = new File(txtFolder, "setting.txt");
                String.valueOf(SelectedServer.getBytes());
                String.valueOf(PasswordEncryption.getBytes());
                try {
                    FileOutputStream fos = new FileOutputStream(file);
                    fos.write(SelectedServer.getBytes(PasswordEncryption));
                    fos.close();
                    Toast.makeText(getApplicationContext(),"Settings Saved", Toast.LENGTH_LONG).show();
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }

    }

旋轉器是從strings.xml文件中的字符串數組填充的,當前僅包含“ server1,server2,server3,server4”。 最終結果應顯示已保存的setting.txt文件,其中包含server1&false或server3&true。

任何幫助表示贊賞

戴夫

這行引起了問題:

fos.write(SelectedServer.getBytes(PasswordEncryption));

String.getBytes(String charset)需要一個有效的charset參數,例如“ UTF8”。 相反,您傳遞的是等於“ $ true”或“ $ false”的PasswordEncryption 這些都不是有效的字符集。

如果您這樣做fos.write(SelectedServer + PasswordEncryption); 那么輸出應該像server1&false

以防萬一其他人正在嘗試這樣做(我懷疑很多人都和我一樣初學者),但這解決了這個問題。

我創建了另一個字符串來存儲SelectedServer和PasswordEncryption字符串的組合值,並將這些值加在一起,並在我的代碼中調用了新的字符串值,而不是稍后嘗試添加2。 不知道這是否是正確的方法,但是它是否可以滿足我的要求。

String serverSettings;
    serverSettings = selectServer + passwordEncryption;

並在我的fos中使用

File file = new File(txtFolder, "setting.txt");
    String.valueOf(serverSettings.getBytes());
        try {
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(serverSettings.getBytes());
        fos.close();
        Toast.makeText(getApplicationContext(), "Settings Saved", Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM