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

标签 java android

我想做的是绕过每次为 VPN 列表下载文件,因为加载需要太多时间。这是我的代码

正如您在此处的代码库 url 下载服务器列表中看到的那样 http://www.vpngate.net/api/iphone/但每次打开应用程序时,它都会尝试一次又一次地下载文件,我只想从本地存储而不是应用程序调用它。

我使用这个应用程序的源代码,你能帮我解决这个问题吗?

更新

How to bypass downloading file and include into app

我的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);
            }
        }
    }
}

我评论了 if 条件,因为它会使应用程序崩溃

创建了一个文件 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);
    }
}

最佳答案

看来您首先需要修复 onDownloadComplete 方法。

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

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

关于java - 我的应用程序中的共享首选项在启动画面中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59429631/

相关文章:

java - StandardOpenOption 问题 java

java - 如何在另一个图表中找到一个图表的 x,y 位置不同

java - maven-eclipse-plugin 附加源目录不起作用

java - 将 ExoPlayer 添加到 GLSurfaceView 时出现黑屏

android - 跟踪用户/谷歌执行的 Google Play 退款

java - HttpPost - http请求方法的类型

java - Android 应用程序中的 XML 解析

Java BufferedReader ,重置读取器

android ImageButton缩放并保持纵横比

android - 在简单的 Activity 之间导航