窗口类型错误

2024-02-13

我正在创建一个音频刷卡器,但在 Windows 上遇到错误。我无法追踪导致代码中错误的原因。谁能帮我指出导致我的代码错误的原因吗?任何想法都将受到高度赞赏。

这是我的代码:

public class SReaderActivity extends Activity {
    public final String TAG = "SReaderActivity";
    Button swipe, get;// detect, stop
    TextView result_text, mTitle;
    private TimeCount time = null;
    private AudioManager am = null;
    int maxVol;
    private ProgressDialog progressDialog;

    private boolean mHeadsetPlugged = false;
    private BroadcastReceiver mHeadsetReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
                boolean hasHeadset = (intent.getIntExtra("state", 0) == 1);
                boolean hasMicroPhone = (intent.getIntExtra("microphone", 0) == 1);
                if (hasHeadset && hasMicroPhone) {
                    mHeadsetPlugged = true;
                } else {
                    mHeadsetPlugged = false;
                    if (sreader != null)
                        sreader.Stop();
                    handler.post(disable_button);
                }
                handler.post(mHeadsetPluginHandler);

            }

        }
    };

    private Handler handler = new Handler();
    SReaderApi sreader = null;
    private String version = null;
    private String ksn = null;
    private String random = null;
    private String workingkey = null;
    private String encryption_data = null;
    private String decryption_data = null;
    private String T1PAN_data = null;
    private String T1Name_Exd = null;
    private String T2PAN_data = null;
    private String T2Exd_data = null;

    private Runnable mHeadsetPluginHandler = new Runnable() {
        public void run() {
            String plug_str = mHeadsetPlugged ? "plugin" : "unplugin";
            Toast.makeText(SReaderActivity.this, "Headset " + plug_str, Toast.LENGTH_SHORT).show();
            if (sreader != null && mHeadsetPlugged == false) { // Device unplug APP close
                CloseSinWave();
                finish();
            } else {
                onDetect();
            }
        }
    };

    private Runnable disable_button = new Runnable() {
        public void run() {
            swipe.setEnabled(false);
            get.setEnabled(false);
        }
    };

    private Runnable enable_button = new Runnable() {
        public void run() {
            get.setText(R.string.get);
            swipe.setClickable(true);
            swipe.setEnabled(true);
            swipe.setText(R.string.swipe);
        }
    };

    private Runnable enable_get = new Runnable() {
        public void run() {
            get.setEnabled(true);
            get.setClickable(true);
        }
    };

    private Runnable timeout_ack = new Runnable() {
        public void run() {
            Toast.makeText(SReaderActivity.this, "Timeout!!!", Toast.LENGTH_SHORT).show();
        }
    };

    private Runnable unknown_err = new Runnable() {
        public void run() {
            result_text.setText(R.string.unknown_error);
        }
    };


    private Runnable detcet = new Runnable() {
        public void run() {
            String txt = "Detect OK\n";
            result_text.setText(txt);
        }
    };

    private Runnable display_encryptiondata = new Runnable() {
        public void run() {
            String txt = "Encryption data\n";
            txt += encryption_data + "\n\n\n";
            result_text.setText(txt);
        }
    };

    private Runnable display_decryptiondata = new Runnable() {
        public void run() {
            String txt = "Encryption data\n";
            txt += encryption_data + "\n\n\nDecryption data\n";
            txt += decryption_data + "\n";
            result_text.setText(txt);
        }
    };

    private Runnable display_get_data = new Runnable() {
        public void run() {
            String txt = "Decryption data\n";
            txt += decryption_data + "\n\n\n\n";
            txt += "T1PAN:" + T1PAN_data + "\n";
            txt += "T1Name_Exd:" + T1Name_Exd + "\n";
            txt += "T2PAN:" + T2PAN_data + "\n";
            txt += "T2Exd:" + T2Exd_data + "\n";
            result_text.setText(txt);
        }
    };
    private Runnable clear_all = new Runnable() {
        public void run() {
            encryption_data = "";
            decryption_data = "";
            T1PAN_data = "";
            T1Name_Exd = "";
            T2PAN_data = "";
            T2Exd_data = "";
            result_text.setText("");
        }
    };

    private Runnable clear_encryption = new Runnable() {
        public void run() {
            encryption_data = "";
            decryption_data = "";
            T1PAN_data = "";
            T1Name_Exd = "";
            T2PAN_data = "";
            T2Exd_data = "";
            result_text.setText("");
        }
    };
    private Runnable clear_carddata = new Runnable() {
        public void run() {
            encryption_data = "";
            T1PAN_data = "";
            T1Name_Exd = "";
            T2PAN_data = "";
            T2Exd_data = "";
            result_text.setText("");
        }
    };

    private Runnable settext_swpie = new Runnable() {
        public void run() {
            swipe.setClickable(true);
            swipe.setText(R.string.swipe);
        }
    };

    private Runnable begin_get = new Runnable() {
        public void run() {
            myToast = new MyToast(SReaderActivity.this, "get T1&T2 Data...");
            myToast.show();
        }
    };

    private Runnable settext_get = new Runnable() {
        public void run() {
            get.setClickable(true);
            get.setText(R.string.get);
        }
    };

    public class MyToast {
        private Context mContext = null;
        private Toast mToast = null;
        private Handler mHandler = null;
        private Runnable mToastThread = new Runnable() {

            public void run() {
                mToast.show();
                mHandler.postDelayed(mToastThread, 3000);
            }
        };

        public MyToast(Context context, String txt) {
            mContext = context;
            mHandler = new Handler(mContext.getMainLooper());
            mToast = Toast.makeText(mContext, txt, Toast.LENGTH_LONG);
        }

        public void setText(String text) {
            mToast.setText(text);
        }

        public void show() {
            mHandler.post(mToastThread);
        }

        public void cancel() {
            mHandler.removeCallbacks(mToastThread);
            mToast.cancel();
        }
    }

    private MyToast myToast = null;

    class TimeCount extends CountDownTimer {
        int id;

        public TimeCount(int id, long millisInFuture, long countDownInterval) {
            super(millisInFuture, countDownInterval);// ²ÎÊýÒÀ´ÎΪ×Üʱ³¤,ºÍ¼ÆʱµÄʱ¼ä¼ä¸ô
            this.id = id;
        }

        @Override
        public void onFinish() {// ¼ÆʱÍê±Ïʱ´¥·¢
            if (id == R.id.swipe) {
                swipe.setText(R.string.reswipe);
                swipe.setClickable(true);
            }

            else if (id == R.id.get) {
                get.setText(R.string.get);
                get.setClickable(true);
            }
        }

        @Override
        public void onTick(long millisUntilFinished) {// ¼Æʱ¹ý³ÌÏÔʾ
            CharSequence str = getString(R.string.second);
            if (id == R.id.swipe) {
                swipe.setClickable(false);
            }

            else if (id == R.id.get) {
                get.setClickable(false);

            }
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.swipe);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);
        mTitle = (TextView) findViewById(R.id.title_left_text);
        mTitle.setText(R.string.version_name);
        am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(Intent.ACTION_HEADSET_PLUG);
        iFilter.addCategory(Intent.CATEGORY_DEFAULT);
        registerReceiver(mHeadsetReceiver, iFilter);

        swipe = (Button) this.findViewById(R.id.swipe);
        swipe.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                onSwipe();
            }
        });

        get = (Button) this.findViewById(R.id.get);
        get.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                onGet();
            }
        });
        result_text = (TextView) this.findViewById(R.id.result);
        swipe.setEnabled(false);
        get.setEnabled(false);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        maxVol = am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        am.setStreamVolume(AudioManager.STREAM_MUSIC, maxVol, 0);

    }

    public void onDestroy() {
        unregisterReceiver(mHeadsetReceiver);
        super.onDestroy();

    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        case KeyEvent.KEYCODE_MENU: {
            openOptionsDialog();
            return true;
        }
        case KeyEvent.KEYCODE_BACK: { // Log.WritetoFile();
            if (sreader != null) {
                sreader.Stop();
                sreader = null;
                if (myToast != null)
                    myToast.cancel();
                finish();
                System.exit(0);
                return true;
            }
        }
        }
        return super.onKeyDown(keyCode, event);
    }

    public void onUserLeaveHint() { // this only executes when Home is selected.
        // do stuff
        super.onUserLeaveHint();
        if (sreader != null) {
            sreader.Stop();
            sreader = null;
            if (myToast != null)
                myToast.cancel();
            finish();
            System.exit(0);
        }
    }

    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
    }

    private void openOptionsDialog() {
        AlertDialog.Builder dialog = new AlertDialog.Builder(SReaderActivity.this);
        dialog.setTitle("SS505 sReader");
        dialog.setMessage("Magnetic Card Reader APP");

        dialog.setNegativeButton("OK", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

        dialog.show();
    }

    private void onSwipe() {
        if (sreader == null)
            return;
        progressDialog = ProgressDialog.show(this, "Loadding Key", "Please wait swipe card ...", true, false);
        time = new TimeCount(R.id.swipe, 15000, 1000);
        time.start();// ¿ªÊ¼¼Æʱ
        swipe.setEnabled(false);
        get.setEnabled(false);
        new Thread() {
            public void run() {
                String data = null;
                decryption_data = null;
                encryption_data = null;
                handler.post(clear_encryption);
                try {

                    random = sreader.GetRandom(10000);
                    if (random == null) {
                        progressDialog.dismiss();
                        String err = sreader.GetErrorString();
                        if (err.equalsIgnoreCase("cancel all"))
                            return;
                    }
                    workingkey = sreader.GenerateWorkingKey(random, ksn);
                    progressDialog.dismiss();
                    data = sreader.ReadCard(15000);

                } catch (Exception ex) {
                    progressDialog.dismiss();
                    if (ex instanceof TimeoutException) {
                        time.cancel();
                        sreader.Cancel();
                        handler.post(enable_button);
                        handler.post(timeout_ack);
                        return;
                    } else
                        handler.post(unknown_err);
                    CloseSinWave();
                }

                time.cancel();

                if (data == null) {
                    encryption_data = sreader.GetErrorString();
                    if (encryption_data.equalsIgnoreCase("cancel all"))
                        return;
                    handler.post(display_encryptiondata);
                } else {
                    encryption_data = "\n" + data;
                    handler.post(display_encryptiondata);

                    String d_str = sreader.TriDesDecryption(workingkey, data);

                    if (d_str != null) {
                        if (false == d_str.startsWith("A1")) {
                            return;
                        }
                        int index2 = FindSplitCharIndex(d_str, "A2", 2);
                        int index3 = FindSplitCharIndex(d_str, "A3", index2 + 2);
                        if (index2 < 0 || index3 < 0) {
                            return;
                        }
                        String t1 = d_str.substring(2, index2);
                        String t2 = d_str.substring(index2 + 2, index3);
                        String t3 = d_str.substring(index3 + 2);
                        String ex_msg = "";

                        if (t1.equals(""))
                            decryption_data = "\nT1=" + "T1 Empty";
                        else
                            decryption_data = "\nT1=" + changeHexString2CharString(t1);
                        if (t2.equals(""))
                            decryption_data += "\nT2=" + "T2 Empty";
                        else {
                            String e2 = changeHexString2CharString(t2);

                            if (e2.length() < 24 || e2.length() > 40)
                                ex_msg = "\nTrack2 " + getResources().getText(R.string.de_len) + e2.length() + "byte";
                            decryption_data += "\nT2=" + e2;
                        }
                        if (t3.equals(""))
                            decryption_data += "\nT3=" + "T3 Empty";
                        else
                            decryption_data += "\nT3=" + changeHexString2CharString(t3) + ex_msg;
                        handler.post(display_decryptiondata);
                    }

                }
                handler.post(enable_button);
                handler.post(settext_swpie);
                handler.post(enable_get);
            }
        }.start();
    }

    private int FindSplitCharIndex(String str, String split, int start) {
        int i = start;
        while (i < str.length() && i + 1 < str.length()) {
            String e = str.substring(i, i + 2);
            if (e.equals(split)) {
                return i;
            }
            i += 2;
        }
        return -1;
    }

    private String changeHexString2CharString(String e) {
        String char_txt = "";
        for (int i = 0; i < e.length(); i = i + 2) {
            String c = e.substring(i, i + 2);
            char j = (char) Integer.parseInt(c, 16);
            char_txt += j;
        }
        return char_txt;
    }

    private boolean Detect_sReader() {
        mHeadsetPlugged = HeadSetUtils.checkHeadset();
        if (!mHeadsetPlugged) {
            result_text.setText(R.string.nodevice);

        }
        return mHeadsetPlugged;
    }

    private boolean GenerateSinWave() {
        sreader = SReaderApi.getSreaderInstance();
        if (sreader.Init() == true) {
            sreader.Start();
            am.setMode(AudioManager.MODE_NORMAL);
            return true;
        }
        return false;
    }

    private void CloseSinWave() {
        if (sreader != null)
            sreader.Stop();
    }

    private void Initialization() {
        swipe.setEnabled(false);
        progressDialog = ProgressDialog.show(this, "", "Card Reader Detecting...", true, false);
        new Thread() {
            public void run() {
                int i = 0;
                try {

                    int j = 1;
                    boolean s_init = false;
                    while (j < 5) {
                        try {
                            s_init = sreader.Initial(2500);
                            if (s_init)
                                break;
                        } catch (Exception ex) {

                            if (ex instanceof TimeoutException) {
                                if (j == 4) {
                                    handler.post(timeout_ack);
                                } else
                                    sleep(1000);
                            } else {
                                handler.post(unknown_err);
                                break;
                            }
                        }
                        j++;
                    }
                    if (!s_init) {

                        CloseSinWave();
                        progressDialog.dismiss();
                        return;
                    }
                    i++;
                    ksn = sreader.GetKSN(5000);

                    if (ksn == null) {
                        String err = sreader.GetErrorString();
                        if (err.equalsIgnoreCase("cancel all"))
                            return;
                        throw new Exception("ksn is null");
                    }
                    handler.post(enable_button);
                    handler.post(detcet);
                    progressDialog.dismiss();
                } catch (Exception ex) {
                    progressDialog.dismiss();
                    if (ex instanceof TimeoutException) {
                        handler.post(timeout_ack);
                    } else
                        handler.post(unknown_err);
                    CloseSinWave();
                }
            }
        }.start();
    }

    private void onGet() {
        if (sreader == null)
            return;
        time = new TimeCount(R.id.get, 10000, 1000);
        time.start();// ¿ªÊ¼¼Æʱ
        get.setEnabled(false);
        swipe.setEnabled(false);
        handler.post(begin_get);
        new Thread() {
            public void run() {
                String Empty = "Empty";
                int i = 0;

                handler.post(clear_carddata);

                try {

                    T1PAN_data = sreader.GetT1PAN(5000);

                    if (T1PAN_data == null) {
                        T1PAN_data = Empty;
                    } else {
                        T1PAN_data = changeHexString2CharString(T1PAN_data);
                    }

                    i++;

                    T1Name_Exd = sreader.GetT1HolderName_Exd(5000);
                    if (T1Name_Exd == null) {
                        T1Name_Exd = Empty;
                    } else {
                        T1Name_Exd = changeHexString2CharString(T1Name_Exd);
                    }

                    i++;

                    T2PAN_data = sreader.GetT2PAN(5000);
                    if (T2PAN_data == null) {
                        T2PAN_data = Empty;
                    } else {
                        T2PAN_data = changeHexString2CharString(T2PAN_data);
                    }

                    i++;

                    T2Exd_data = sreader.GetT2Exd(5000);

                    if (T2Exd_data == null) {
                        T2Exd_data = Empty;
                    } else {
                        T2Exd_data = changeHexString2CharString(T2Exd_data);
                    }

                    handler.post(display_get_data);
                } catch (Exception ex) {
                    if (ex instanceof TimeoutException) {
                        time.cancel();
                        myToast.cancel();
                        sreader.Cancel();
                        handler.post(enable_button);
                        handler.post(timeout_ack);
                        return;
                    } else
                        handler.post(unknown_err);
                    CloseSinWave();
                }

                myToast.cancel();
                time.cancel();
                handler.post(settext_get);
                handler.post(enable_button);
            }
        }.start();
    }

    private void onDetect() {
        am.setStreamVolume(AudioManager.STREAM_MUSIC, maxVol, 0);
        if (Detect_sReader() == true) {
            handler.post(clear_all);
            if (GenerateSinWave() == true) {
                Initialization();
            }
        }
    }
}

这是日志猫:

05-20 16:26:30.638: E/AndroidRuntime(1497): FATAL EXCEPTION: main
05-20 16:26:30.638: E/AndroidRuntime(1497): java.lang.IllegalArgumentException: Window type can not be changed after the window is added.
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.os.Parcel.readException(Parcel.java:1429)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.os.Parcel.readException(Parcel.java:1379)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.IWindowSession$Stub$Proxy.relayout(IWindowSession.java:634)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.ViewRootImpl.relayoutWindow(ViewRootImpl.java:3835)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1384)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:998)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4212)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.Choreographer.doCallbacks(Choreographer.java:555)
05-20 16:26:30.638: E/AndroidRuntime(1497):     at android.view.Choreographer.doFrame(Choreographer.java:525)

问题似乎出在onAttachedToWindow()。更改如下功能并尝试一下。

public void onAttachedToWindow() {
        this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
        super.onAttachedToWindow();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

窗口类型错误 的相关文章

  • 启动画面反应本机后出现白屏

    编辑 似乎是因为 MainActivity 加载太重而生成白屏 我设法首先使用本机启动屏幕来解决 然后在本机被杀死后立即基于下一个插件的 js 实现 我做了一些修改完美匹配两个启动画面https github com crazycodebo
  • GCM 通知的自定义 UI

    In GCM Docs http developer android com google gcm gcm html其给定 它不提供任何内置用户界面或其他处理 消息数据 GCM 只是将收到的原始消息数据直接传递给 Android 应用程序
  • 应用程序启动时立即隐藏导航栏

    基于以下代码片段 我能够隐藏状态栏当应用程序启动时 但不是导航栏 由后退 主页和任务管理器按钮组成的栏 因为它隐藏了稍后在 MainActivity 的线程完成加载后 这是清单
  • Android ACTION_DATE_CHANGED 广播

    我有 Nexus S 当我在手机上手动更改日期时 ACTION DATE CHANGED 并不总是被广播 如果我将日期从 2014 年 2 月 13 日更改为 2014 年 2 月 14 日 我还没有获得 ACTION DATE CHANG
  • 如何以编程方式从 mipmap 文件夹加载图像? [复制]

    这个问题在这里已经有答案了 如何从 加载图像mipmap以编程方式保存文件夹 与可绘制对象一样 img setImageResource imageId 我使用的是Android Studio 1 2 1 In 安卓工作室我们有mipmap
  • 如何防止 Activity 在后退操作时重新加载

    我有连接到互联网以获取数据的应用程序 我可以多层次访问数据 假设我从第 3 级开始 在第 4 级我决定返回 每当我按回之前的活动时 就会从互联网重新加载数据 有可能阻止这种情况吗 我尝试以单顶模式运行该活动 将数据加载代码移至 single
  • Droid 3 上的列表视图背景为灰色

    我有一个带有自定义背景的列表框 它在黑色背景的两侧显示一条细白线 在我所有的测试手机 Galaxy Captivate Vibrant Nexus 1 G Tablet Archos 32 Droid 上运行良好 我刚买了一台 Droid
  • 如何使用RecyclerView.State保存RecyclerView滚动位置?

    我有一个关于 Android 的问题RecyclerView State http developer android com reference android support v7 widget RecyclerView State h
  • 适用于 Droid 手机的数学或 LaTeX 引擎 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Android 手机有可用的数学或 LaTeX 引擎吗 我最喜欢的抽认卡应用程序 AnyMemo 似乎
  • 如何设置上拉刷新SwipeRefreshLayout

    我看到很多 ListView 下拉刷新的库 但是当从上到下拉动时它们是工作的 但是从下到上拉动时我如何刷新 我可以用这个做吗滑动刷新布局 http developer android com reference android suppor
  • 如何在android中的应用程序小部件中找到哪个按钮被点击?

    我想设计一个简单的应用程序小部件 它有两个文本视图和两个用于上一个 下一个的按钮 我很难处理应用程序小部件中的按钮单击 实际上我的愿望是 如果用户单击上一个按钮 我想显示以前的值 如果用户单击下一个按钮 我想显示数据库中的下一个值 如何知道
  • 如何通过代码设置Fragment标签?

    我还没有找到类似的东西setTag String tagName 方法中的Fragment班级 唯一的方法是设置Fragment我发现的标签是通过做FragmentTransaction并传递标签名称作为参数 这是显式设置的唯一方法吗Fra
  • Android 视图上的动态气泡

    任何人都可以如何在Android布局上制作可点击的动态气泡 我的设计师对屏幕的想法如下 我的图像中所有气泡都是分配给用户的一组任务 气泡的标签根据任务而变化 1 1 根据我的项目要求 颜色和半径将根据 api 响应而变化 您能建议任何演示或
  • GCM(Google 云消息传递)是否需要 Google 帐户?

    我需要编写一个简单的应用程序来获取推送通知 我使用 GCM 它使用 Google Play 服务来获取信息 我的问题是 要访问 GCM 是否需要 Google 帐户 我可以使用其他电子邮件帐户来识别设备吗 有没有其他方法可以获取另一个电子邮
  • 在 Android 5 上支持 BLE 外设角色的芯片组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Android 5 0 Lollipop 引入的新 BLE 外设模式将不会在 Nexus 4 5 或 7 上启用 https code
  • Android 如何从我的应用程序使用 SD 卡中的文件路径预览图像

    文件存在于sdcard image jpg我想创建我自己的应用程序 活动 按下按钮时 需要使用内置图像查看器显示存储在 SD 卡中的图像 按图像查看器中的后退按钮后 它应该返回到我正在运行的应用程序 需要一些帮助 您可以为此创建一个具有适当
  • Android EditText 不起作用,android:imeOptions="actionNext" android:inputType="phone"

    我已经尝试过了 只有删除android inputType phone 键盘回车可以跳转到下一个EditText 不知道大家之间是否有过一些冲突android imeOptions actionNext and android inputT
  • Android - 保持用户登录状态

    我正在尝试使用 PHP 和 MySQLi for Android 进行登录 我不明白的是如何保持用户登录状态 我看到一个简单的教程 其中有人使用 SQLite 来保护信息 但我不知道这是否真的安全 如何保存用户信息以保持用户登录状态 谢谢
  • RecyclerView 适配器的 Kotlin 泛型

    我正在尝试编写一个通用的 recyclerview 适配器 我找到了几个例子 然而 仍然无法弄清楚如何实现通用适配器 我写的代码是 open abstract class BaseAdapter
  • Android VideoView 中纵向视频方向错误

    我在 Android 设备上以肖像方向拍摄新视频 如下所示 Intent intent new Intent android provider MediaStore ACTION VIDEO CAPTURE startActivityFor

随机推荐

  • 使用 Express 后端将 create-react-app 部署到 heroku 在浏览器中返回无效的主机标头

    标题说明了一切 我在这里构建了一个最小的工作示例 https github com sehailey proxytest https github com sehailey proxytest 我已经尝试过 所以我可能已经记不清了 尽管它们
  • 在 sed -i (正则表达式?)bash 内部使用变量

    我看过另一个sed这里的页面 我找不到使用的页面 i在正则表达式搜索部分有一个变量 我正在尝试剪切文件中请求的行myresolv conf并获取其行号 我班5个人都卡住了 任何帮助都很棒 line grep n 3 myresolv con
  • std::u16string、std::u32string、std::string、length()、size()、代码点和字符

    我很高兴看到std u16string and std u32string在 C 11 中 但我想知道为什么没有std u8string处理 UTF 8 情况 我的印象是std string是为UTF 8设计的 但似乎做得不太好 我的意思是
  • VSTO Outlook:获取选定的附件

    我正在尝试对 Outlook 2010 中选定的附件执行操作 我在VS2012中创建了一个Outlook VSTO项目 这是用于在附件功能区上添加按钮的 XML
  • 如何在 WPF 应用程序中动态导入 3D 模型

    我已经搜索了很长一段时间但找不到合适的方法 当用户选择模型时 如何在运行时将 3D 模型导入 WPF 应用程序中 它可以在任何一种流行的 3D 建模软件中构建 例如 3DS max Maya Blender 等 但并非全部 需要导入 3DS
  • Java作业-打印三角形图案?

    我正在为一项任务而苦苦挣扎 我知道这完全是我的错 但我在课堂上落后了 而且在完成这项作业时遇到了困难 我的目标是打印以下图案 使用 嵌套 for 循环 有人能给我一些关于如何解决这个问题的提示吗 我已经成功打印了一个方形的星号 但我无法弄清
  • 在 Chrome 上单击时链接不会获得焦点

    我在 Chrome 上遇到了一个非常奇怪的行为 这对我来说似乎是一个错误 当您单击链接时 该链接没有获得焦点 更糟糕的是 身体反而成为焦点 可以在这里观察到这种行为 http jsfiddle net YfbR7 4 http jsfidd
  • Emacs - 取消定义前缀键

    我设法将 M 大写 em 键定义为 sqlplus 模式下的前缀键 这阻止了我输入 M 如何在此模式下取消设置此前缀键 短期修复 M x local set key M self insert command 长期修复 请在 emacs 文
  • Boost 程序选项 bool 始终为 True

    通过程序选项 我正在检查参数的有效组合 但由于某种原因 gpu 参数是一个布尔值 无论我是否在命令行上将其设置为 false 它始终为 true 如果我在命令行上指定 gpu 选项 有没有办法可以为 false 我希望能够创建一个布尔变量来
  • 恢复已被覆盖的内置方法

    假设我们的脚本包含在网页中 并且先前的脚本 已执行 执行了以下操作 String prototype split function return U MAD BRO So the split字符串方法已被覆盖 我们想使用这个方法 所以我们需
  • 如何将 CupertinoApp 包装在 Localizations 小部件中,以便我可以在其中使用 Material 小部件?

    我正在使用 CupertinoApp 小部件来包装我的应用程序 同时尝试在其中使用 Material TextFormField 小部件 例如 当我触发文本选择模式 双击文本字段 时 我收到以下错误 因为它尝试打开需要材质本地化的覆盖小部件
  • 来自其他容器的 Docker mongo 映像“连接被拒绝”

    我是码头工人的新手 我正在尝试创建一个 MongoDB 容器和一个 NodeJS 容器 我的文件看起来 version 2 services backend image node 5 11 onbuild ports 3001 3001 v
  • 代码沙箱内的路由,由于 withRouter 而失败

    当我点击提交按钮时 我需要重定向到此页面 pageOne 所以我用谷歌搜索并找到了一个反应路由器并使用了这一行this props history push anotherPage 但它没有重定向 它抛出一个错误 Invariant fai
  • 如何防止 root 访问我的 docker 容器

    我正在努力强化我们的 docker 镜像 但我对它的理解已经有点薄弱了 话虽如此 我当前要做的步骤是阻止用户以 root 身份运行容器 对我来说 这意味着 当用户运行 docker exec it my container bash 时 他
  • 在 laravel 中设置 phpChart

    环境 亚马逊EC2 Ubuntu x64 已安装GD库 我最近在 laravel 框架中使用 phpChart 进行图表和报告 我被困在开始阶段 这就是我所做的 1 将phpChart Lite中的内容解压到 var www app lib
  • 存储库中的分支是什么?

    根据我对 subversion 的理解 如果您有一个包含多个项目的存储库 那么您可以在该存储库中分支各个项目 请参阅SVN红皮书 使用分支 http svnbook red bean com en 1 1 ch04s02 html 然而 我
  • C++ 错误 C2653“类”不是类或命名空间名称

    下午好 我已经开始学习 C 并且在编译我的项目时遇到问题 如果您发现一些错误代码 如果您告诉我 我会很高兴 我有以下定义 Utils h include stdafx h include
  • 在 emacs org-mode 中导出时如何评估所有代码块

    I have an org mode document with many different R source code blocks Whenever I hit C c C e and export to PDF or HTML I
  • Android 中 KeyStore getKey() 返回 null

    我使用此代码将密钥存储到 Android 应用程序的 KeyStore 中 SecretKeyFactory kf SecretKeyFactory getInstance DES DESKeySpec keySpec new DESKey
  • 窗口类型错误

    我正在创建一个音频刷卡器 但在 Windows 上遇到错误 我无法追踪导致代码中错误的原因 谁能帮我指出导致我的代码错误的原因吗 任何想法都将受到高度赞赏 这是我的代码 public class SReaderActivity extend