简体   繁体   English

我的应用程序中的共享首选项在启动画面中不起作用

[英]Shared Preferences in my app doesn't work in Splash Screen

What I'm trying to do is to bypass every time downloading file for VPN list because it takes too much time to load.我想要做的是绕过每次下载 VPN 列表的文件,因为加载时间太长。 Here is my code这是我的代码

As you can see in code base url download server list from here http://www.vpngate.net/api/iphone/ but every time app open it try to download file again and again I just want call this from local storage not from app.正如您在http://www.vpngate.net/api/iphone/ 的代码库 url 下载服务器列表中看到的那样,但每次打开应用程序时,它都会尝试一次又一次地下载文件,我只想从本地存储而不是从应用程序。

I uses this app source code can you please help me with this.我使用这个应用程序源代码,你能帮我解决这个问题吗?

Update更新

How to bypass downloading file and include into app如何绕过下载文件并包含到应用程序中

my SplashActivity.java我的SplashActivity.java

package com.baztro.ultravpn.activity;

import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Message;
import android.os.Bundle;

import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.TextView;

import com.baztro.ultravpn.util.NetworkState;
import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.common.Priority;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.DownloadListener;
import com.androidnetworking.interfaces.DownloadProgressListener;
import com.daimajia.numberprogressbar.NumberProgressBar;

import com.baztro.ultravpn.R;
import com.baztro.ultravpn.model.Server;
import com.baztro.ultravpn.util.PropertiesService;
import com.baztro.ultravpn.util.Stopwatch;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.security.PrivateKey;
import java.util.concurrent.TimeUnit;

import okhttp3.OkHttpClient;

public class SplashActivity extends BaseActivity {

    private NumberProgressBar progressBar;
    private TextView commentsText;
    private static boolean loadStatus = false;
    private Handler updateHandler;

    private final int LOAD_ERROR = 0;
    private final int DOWNLOAD_PROGRESS = 1;
    private final int PARSE_PROGRESS = 2;
    private final int LOADING_SUCCESS = 3;
    private final int SWITCH_TO_RESULT = 4;
    private final String BASE_URL = "http://www.vpngate.net/api/iphone/";
    private final String BASE_FILE_NAME = "vpngate.csv";
   private SharedPreferences sp;
   private SharedPreferences.Editor editor ;


    private boolean premiumStage = true;

    private int percentDownload = 0;
    private Stopwatch stopwatch;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
        sp = getSharedPreferences("splash-detail", MODE_PRIVATE);
        editor = sp.edit();

//        if(sp.getBoolean("downloadComplete" == true))
//        {
//
//            Intent intent = new Intent(this, MainSplashActivity.class);
//            startActivity(intent);
//        }


            if (NetworkState.isOnline()) {
                if (loadStatus) {
                    Intent myIntent = new Intent(this, UserActivity.class);
                    startActivity(myIntent);
                    finish();
                } else {
                    loadStatus = true;

                }
            } else {
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle(getString(R.string.network_error))
                        .setMessage(getString(R.string.network_error_message))
                        .setNegativeButton(getString(R.string.ok),
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog, int id) {
                                        dialog.cancel();
                                        onBackPressed();
                                    }
                                });
                AlertDialog alert = builder.create();
                alert.show();
            }



            progressBar = (NumberProgressBar)findViewById(R.id.number_progress_bar);
            commentsText = (TextView)findViewById(R.id.commentsText);

            if (getIntent().getBooleanExtra("firstPremiumLoad", false))
                ((TextView)findViewById(R.id.loaderPremiumText)).setVisibility(View.VISIBLE);

            progressBar.setMax(100);

            updateHandler = new Handler(new Handler.Callback() {
                @Override
                public boolean handleMessage(Message msg) {
                    switch (msg.arg1) {
                        case LOAD_ERROR: {
                            commentsText.setText(msg.arg2);
                            progressBar.setProgress(100);
                        } break;
                        case DOWNLOAD_PROGRESS: {
                            commentsText.setText(R.string.downloading_csv_text);
                            progressBar.setProgress(msg.arg2);

                        } break;
                        case PARSE_PROGRESS: {
                            commentsText.setText(R.string.parsing_csv_text);
                            progressBar.setProgress(msg.arg2);
                        } break;
                        case LOADING_SUCCESS: {
                            commentsText.setText(R.string.successfully_loaded);
                            progressBar.setProgress(100);
                            Message end = new Message();
                            end.arg1 = SWITCH_TO_RESULT;
                            updateHandler.sendMessageDelayed(end,500);
                        } break;
                        case SWITCH_TO_RESULT: {

                            if (PropertiesService.getConnectOnStart()) {
                                Server randomServer = getRandomServer();
                                if (randomServer != null) {
                                    newConnecting(randomServer, true, true);
                                } else {
                                    startActivity(new Intent(SplashActivity.this, UserActivity.class));
                                }
                            } else {
                                startActivity(new Intent(SplashActivity.this, UserActivity.class));
                            }
                        }
                    }
                    return true;
                }
            });
            progressBar.setProgress(0);


        }

    @Override
    protected void onResume() {
        super.onResume();
        downloadCSVFile(BASE_URL, BASE_FILE_NAME);
    }

    @Override
    protected boolean useHomeButton() {
        return false;
    }

    @Override
    protected boolean useMenu() {
        return false;
    }

    private void downloadCSVFile(String url, String fileName) {
        stopwatch = new Stopwatch();

        OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
                .connectTimeout(60, TimeUnit.SECONDS)
                .readTimeout(60, TimeUnit.SECONDS)
                .writeTimeout(60, TimeUnit.SECONDS)
                .build();

        AndroidNetworking.download(url, getCacheDir().getPath(), fileName)
                .setTag("downloadCSV")
                .setPriority(Priority.MEDIUM)
                .setOkHttpClient(okHttpClient)
                .build()
                .setDownloadProgressListener(new DownloadProgressListener() {
                    @Override
                    public void onProgress(long bytesDownloaded, long totalBytes) {
                        if(totalBytes <= 0) {
                            // when we dont know the file size, assume it is 1200000 bytes :)
                            totalBytes = 1200000;
                        }


                            percentDownload = (int)((100 * bytesDownloaded) / totalBytes);


                        Message msg = new Message();
                        msg.arg1 = DOWNLOAD_PROGRESS;
                        msg.arg2 = percentDownload;
                        updateHandler.sendMessage(msg);
                    }
                })
                .startDownload(new DownloadListener() {
                    @Override
                    public void onDownloadComplete() {
                        editor.putBoolean("downloadComplete", true);
                        editor.apply();
                        parseCSVFile(BASE_FILE_NAME);


                    }
                    @Override
                    public void onError(ANError error) {
                        editor.putBoolean("downloadCompleteNo", false);
                        editor.apply();
                        Message msg = new Message();
                        msg.arg1 = LOAD_ERROR;
                        msg.arg2 = R.string.network_error;
                        updateHandler.sendMessage(msg);

                    }
                });
    }

    private void parseCSVFile(String fileName) {
        BufferedReader reader = null;
        try {
            reader = new BufferedReader(new FileReader(getCacheDir().getPath().concat("/").concat(fileName)));
        } catch (IOException e) {
            e.printStackTrace();
            Message msg = new Message();
            msg.arg1 = LOAD_ERROR;
            msg.arg2 = R.string.csv_file_error;
            updateHandler.sendMessage(msg);
        }
        if (reader != null) {
            try {
                int startLine = 2;
                int type = 0;


                    dbHelper.clearTable();


                int counter = 0;
                String line = null;
                while ((line = reader.readLine()) != null) {
                    if (counter >= startLine) {
                        dbHelper.putLine(line, type);
                    }
                    counter++;

                }

                    Message end = new Message();
                    end.arg1 = LOADING_SUCCESS;
                    updateHandler.sendMessageDelayed(end,200);


            } catch (Exception e) {
                e.printStackTrace();
                Message msg = new Message();
                msg.arg1 = LOAD_ERROR;
                msg.arg2 = R.string.csv_file_error_parsing;
                updateHandler.sendMessage(msg);
            }
        }
    }
}

I commented if condition because it crashes app我评论了if条件是因为它使应用程序崩溃

Created a file MainSplashActivity创建了一个文件MainSplashActivity

package com.baztro.ultravpn.activity;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.baztro.ultravpn.R;

public class MainSplashActivity extends AppCompatActivity {

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

Looks like firstly you need to fix onDownloadComplete method.看起来首先你需要修复 onDownloadComplete 方法。

public void onDownloadComplete() {
    editor.putBoolean("downloadComplete", false);
    editor.apply();
    parseCSVFile(BASE_FILE_NAME);}

to

public void onDownloadComplete() {
    editor.putBoolean("downloadComplete", true);
    editor.apply();
    parseCSVFile(BASE_FILE_NAME);
}

Your onDownloadComplete() method does not put any value into the shared preference.您的 onDownloadComplete() 方法不会将任何值放入共享首选项中。 Replace your function with the below function:用下面的函数替换你的函数:

public void onDownloadComplete() {
    editor.putBoolean("downloadComplete", true);
    editor.apply();
    parseCSVFile(BASE_FILE_NAME);
}

Also in addition to this as you want to avoid downloading the file multiple time you need to check if the file has already been downloaded by checking if the the key is present in shared preferences.除此之外,因为您想避免多次下载文件,您需要通过检查共享首选项中是否存在密钥来检查文件是否已下载。 Change your onResume() method to below:将您的 onResume() 方法更改为以下内容:

protected void onResume() {
        super.onResume();
        if(!sp.contains("downloadComplete")){

            downloadCSVFile(BASE_URL, BASE_FILE_NAME);
          }
    }

Retrieve the file otherwise if you need.如果需要,请以其他方式检索文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM