У меня есть ошибка «java.lang.NullPointerException void java.lang.Process.destroy()» в моем приложении VPN для Android, Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 У меня есть ошибка «java.lang.NullPointerException void java.lang.Process.destroy()» в моем приложении VPN для Android,

Сообщение Anonymous »

Я пытаюсь научиться разрабатывать приложения для Android с помощью Java. У меня есть некоторая проблема. когда я нажал кнопку подключения, у меня возникла эта ошибка:

Код: Выделить всё

 OpenVPNThread Got java.lang.NullPointerException: Attempt to invoke virtual method 'void java.lang.Process.destroy()' on a null object reference.
Вот мои коды HomeActivity

Код: Выделить всё

public class HomeActivity extends AppCompatActivity {

private DrawerLayout drawerLayout;
private LinearLayout navView;
private ImageView drawerButton;
private LinearLayout serverButton;
private RecyclerView recyclerView;

ImageView countryFlag;

TextView countryName;
TextView countryIP;

Dialog dialog;

ImageView vpnButton;

TextView statusText, ipText;

boolean isVpnConnected = false;

SharedPreferences sharedPreferences;
private ArrayList serverArrayList = new ArrayList();
HashMap selectedServer = new HashMap();

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

drawerLayout = findViewById(R.id.drawerLayout);
navView = findViewById(R.id.navView);
drawerButton = findViewById(R.id.drawerButton);
serverButton = findViewById(R.id.serverButton);
countryFlag = findViewById(R.id.countryFlag);
countryName = findViewById(R.id.countryName);
countryIP = findViewById(R.id.countryIP);
vpnButton = findViewById(R.id.vpnButton);
statusText = findViewById(R.id.statusText);
ipText = findViewById(R.id.ipText);
sharedPreferences = this.getSharedPreferences("ServerDetails", Activity.MODE_PRIVATE);

setupDrawer();
loadServers();
loadSavedServer();

drawerButton.setOnClickListener(v -> drawerLayout.openDrawer(GravityCompat.START));
serverButton.setOnClickListener(v -> showServerLayout());
vpnButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectedServer != null && selectedServer.size() !=0){

prepareVPN(selectedServer);

}else {

Toast.makeText(HomeActivity.this, "Please Select Server", Toast.LENGTH_SHORT).show();

}
}
});
}

private void loadSavedServer () {

String serverData = sharedPreferences.getString("savedServer", "");
if (serverData.equals("") || serverData.length() < 10){

return;

}
HashMap hashMap = new Gson().fromJson(serverData, new TypeToken(){}.getType());
selectServer(hashMap);

}

private void showServerLayout() {
dialog = new Dialog(this, android.R.style.Theme_Black_NoTitleBar);
View view = getLayoutInflater().inflate(R.layout.server_layout, null);
dialog.setContentView(view);

recyclerView = view.findViewById(R.id.recyclerView);
ImageView backButton = view.findViewById(R.id.backButton);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(new ServerRecyclerAdapter(serverArrayList));

backButton.setOnClickListener(v -> dialog.dismiss());
dialog.show();
}

private void openUrl(String url) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}

private void loadServers() {
Servers servers = new Servers();
servers.loadServers(new Servers.ServerLoadListener() {
@SuppressLint("NotifyDataSetChanged")
@Override
public void onServerLoaded(HashMap hashMap) {
if (!serverArrayList.contains(hashMap)) {
serverArrayList.add(hashMap);
runOnUiThread(() -> {
if (recyclerView != null &&  recyclerView.getAdapter() != null) {
recyclerView.getAdapter().notifyDataSetChanged();
}
if (serverArrayList.size() == 1){

selectServer(hashMap);

}

});
}
}

@Override
public void onServerLoadFailed(String message) {
runOnUiThread(() -> Toast.makeText(HomeActivity.this, "Server not loaded because: " + message, Toast.LENGTH_SHORT).show());
}
});
}

private void selectServer(HashMap hashMap){

selectedServer = hashMap;
countryName.setText(hashMap.get("countryLong").toString());
countryIP.setText(hashMap.get("ipAdress").toString());

Glide.with(HomeActivity.this).load("vpngate.net/images/flags/24/" + hashMap.get("countryShort").toString() + ".png").into(countryFlag);

sharedPreferences.edit().putString("SavedServer", new Gson().toJson(hashMap)).apply();

if (dialog !=null) {
dialog.dismiss();
}

}

private void prepareVPN(HashMap hashMap){

String oConfigData = hashMap.get("oConfigData") != null ? hashMap.get("oConfigData").toString() : null;

if (oConfigData == null || oConfigData.isEmpty()) {
Toast.makeText(HomeActivity.this, "Please Select a Valid Server with Configuration", Toast.LENGTH_SHORT).show();
return;
}

Intent intent = VpnService.prepare(HomeActivity.this);
if (intent != null) {
vpnResult.launch(intent);
} else {
connectVPN(hashMap);
}

}

private void connectVPN(HashMap hashMap) {

try {

OpenVpnApi.startVpn(this, hashMap.get("oConfigData").toString(), hashMap.get("countryShort").toString(), "vpn", "vpn");
ipText.setText("IP : " + hashMap.get("ipAdress").toString());

} catch (RemoteException e) {
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
}

}

private ActivityResultLauncher  vpnResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() {
@Override
public void onActivityResult(ActivityResult result) {

if (result.getResultCode() == Activity.RESULT_OK){

connectVPN(selectedServer);

}else {

Toast.makeText(HomeActivity.this, "Permission must be granted", Toast.LENGTH_SHORT).show();

}

}
});

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
statusText.setText("STATUS : " + intent.getStringExtra("state"));
}
});
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};

public class ServerRecyclerAdapter extends RecyclerView.Adapter {

private final ArrayList _data;

public ServerRecyclerAdapter(ArrayList  arrayList) {
this._data = arrayList;
}

@NonNull
@Override
public ServerRecyclerAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.server_adapter, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ServerRecyclerAdapter.ViewHolder _holder, @SuppressLint("RecyclerView") final int _position) {
// Sunucu verisini holder ile doldurun

View view = _holder.itemView;

ImageView countryFlag = view.findViewById(R.id.countryFlag);
TextView countryName = view.findViewById(R.id.countryName);
TextView countryIP = view.findViewById(R.id.countryIP);
TextView speed = view.findViewById(R.id.speed);
LinearLayout serverLayout = view.findViewById(R.id.serverLayout);

countryName.setText(_data.get(_position).get("countryLong").toString());
countryIP.setText(_data.get(_position).get("ipAdress").toString());
speed.setText(_data.get(_position).get("speed").toString());

Glide.with(HomeActivity.this).load("https://www.vpngate.net/images/flags/24/" + _data.get(_position).get("countryShort").toString() + ".png").into(countryFlag);

serverLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

selectServer(_data.get(_position));

}
});

}

@Override
public int getItemCount() {
return _data.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
}
}

@Override
protected void onResume(){
super.onResume();

IntentFilter intentFilter = new IntentFilter("connectionState");

LocalBroadcastManager.getInstance(HomeActivity.this).registerReceiver(broadcastReceiver, intentFilter);

}

}

А вот мои коды Servers.java:

Код: Выделить всё


public class Servers {

private Call mCall;

public Servers() {
// Boş yapıcı metot
}

public void loadServers(ServerLoadListener serverLoadListener) {
Request request = new Request.Builder().url("http://www.vpngate.net/api/iphone/").build();
mCall = new OkHttpClient().newCall(request);
mCall.enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
serverLoadListener.onServerLoadFailed(e.getMessage());
}

@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
if (response.isSuccessful()) {
parseResponse(response, serverLoadListener);
} else {
serverLoadListener.onServerLoadFailed("Server response error: " + response.code());
}
}
});
}

private void parseResponse(Response response, ServerLoadListener serverLoadListener) {
try (InputStream inputStream = response.body().byteStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {

String data;
while ((data = bufferedReader.readLine()) != null) {
if (!data.startsWith("*") && !data.startsWith("#")) {
loadServerData(serverLoadListener, data);
}
}
} catch (IOException e) {
serverLoadListener.onServerLoadFailed(e.getMessage());
}
}

private void loadServerData(ServerLoadListener serverLoadListener, String data) {
HashMap  hashMap = new HashMap();
String[] serverData = data.split(",");

hashMap.put("hostName", serverData[0]);
hashMap.put("ipAdress", serverData[1]);
hashMap.put("score", serverData[2]);
hashMap.put("ping", serverData[3]);
hashMap.put("speed", serverData[4]);
hashMap.put("countryLong", serverData[5]);
hashMap.put("countryShort", serverData[6]);
hashMap.put("sessions", serverData[7]);
hashMap.put("uptime", serverData[8]);
hashMap.put("totalUsers", serverData[9]);
hashMap.put("totalTraffic", serverData[10]);
hashMap.put("logType", serverData[11]);
hashMap.put("operator", serverData[12]);
hashMap.put("message", serverData[13]);
hashMap.put("oConfigData", new String(Base64.decode(serverData[14], Base64.DEFAULT)));

String[] lines = hashMap.get("oConfigData").toString().split("[\\r\\n]+");
hashMap.put("port",  getPort(lines));
hashMap.put("protocol", getProtocol(lines));

// Veriyi dinleyici aracılığıyla gönderiyoruz
serverLoadListener.onServerLoaded(hashMap);
}

public interface ServerLoadListener {
void onServerLoaded(HashMap serverData);
void onServerLoadFailed(String message);
}

public static String getProtocol(String[] lines){

String protocol = "";

for (String line : lines){

if (!line.startsWith("#")){

if (line.startsWith("proto")){

protocol = line.split(" ")[1];

}

}

}

return protocol;

}

public static int getPort(String[] lines) {

int port =0;
for (String line : lines){

if (!line.startsWith("#")) {

if (line.startsWith("remote")){
port = Integer.parseInt(line.split(" ")[2]);
}

}

}
return port;

}
}

Можете ли вы помочь мне решить эту проблему?
Я перепробовал все, используя gpt и другие источники, но ничего не нашел об этой проблеме.
п>

Подробнее здесь: https://stackoverflow.com/questions/791 ... oy-error-o
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • У меня есть ошибка «java.lang.NullPointerException void java.lang.Process.destroy()» в моем приложении VPN для Android,
    Anonymous » » в форуме JAVA
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Разница между VPN устройства (конфигурации VPN) и личной VPN на iOS?
    Anonymous » » в форуме IOS
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Process Process Process с более низким использованием процессора
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Process Process Process с более низким использованием процессора
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Неверное преобразование из «void*» в «void*(*) (void*)’ c ++?
    Anonymous » » в форуме C++
    0 Ответы
    0 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»