gpt4 book ai didi

android - Activity 已被销毁异常

转载 作者:行者123 更新时间:2023-11-30 04:09:48 25 4
gpt4 key购买 nike

我尝试从我的 fragmentActivity 开始一个新 fragment ,但每次尝试时,它都会出现错误,告诉我:Activity 已被销毁。

我创建的 tabController 的源代码:

package com.crosscommunications.kvodeventer;

import java.io.File;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;

public class TabControllerMeldingen extends FragmentActivity {

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

final File f = new File("/data/data/com.crosscommunications.kvodeventer/files/data.txt");

if (f.exists()) {
System.out.println("File existed");
addFragment(new KVOCards(), false, FragmentTransaction.TRANSIT_NONE);

} else {
System.out.println("File not found!");
addFragment(new KVOMeldingen(), false, FragmentTransaction.TRANSIT_NONE);
}

}

public void addFragment(Fragment fragment, boolean addToBackStack, int transition) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.simple_fragment, fragment);
ft.setTransition(transition);
if (addToBackStack)
ft.addToBackStack(null);
ft.commit();
}

public void finishFragmentOrActivity(View v) {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0)
getSupportFragmentManager().popBackStack();
else
finish();
}

public void launchNewFragment(View v) {
addFragment(new KVOOver(), true, FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
}
}

在大多数情况下,此代码会打开 KVOMeldingen 类。所以 KVOMeldingen 的来源是:

package com.crosscommunications.kvodeventer;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

import org.json.JSONObject;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;


public class KVOMeldingen extends Fragment {

static String Username;
static String Password;
static String LoginResult;
static String LoginOk = "vet";

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.kvomeldingen, container, false);
final EditText etUsername = (EditText) fragmentView.findViewById(R.id.etUsername);
final EditText etPassword = (EditText) fragmentView.findViewById(R.id.etPassword);
Button bLogin = (Button) fragmentView.findViewById(R.id.bLogin);
Button bCreateAccount = (Button) fragmentView.findViewById(R.id.bCreateAccount);
Button bResetPassword = (Button) fragmentView.findViewById(R.id.bResetPassword);

bLogin.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (etUsername.length() <= 0) {
etUsername.setError("Veld mag niet leeg zijn");
} else if (etPassword.length() <= 0) {
etPassword.setError("Veld mag niet leeg zijn");
} else {
Username = etUsername.getText().toString();
Password = etPassword.getText().toString();
}
LoginTask NDLT = new LoginTask();
NDLT.execute();
}
});

bCreateAccount.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if (etUsername.length() <= 0) {
etUsername.setError("Veld mag niet leeg zijn");
} else if (etPassword.length() <= 0) {
etPassword.setError("Veld mag niet leeg zijn");
} else {
Username = etUsername.getText().toString();
Password = etPassword.getText().toString();
}
RegisterTask RegTask = new RegisterTask();
RegTask.execute();
}

});

bResetPassword.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (etUsername.length() <= 0) {
etUsername.setError("Veld mag niet leeg zijn");
} else if (etPassword.length() <= 0) {
etPassword.setError("Veld mag niet leeg zijn");
} else {
Username = etUsername.getText().toString();
Password = etPassword.getText().toString();
}
ForgotTask forgTask = new ForgotTask();
forgTask.execute();

}

});

return fragmentView;
}

class LoginTask extends AsyncTask<Void, Void, JSONObject> {

ProgressDialog waitingDialog;

@Override
protected void onPreExecute() {
waitingDialog = new ProgressDialog(getActivity());
waitingDialog.setMessage("Laden...");
waitingDialog.show();
super.onPreExecute();
}

@Override
protected JSONObject doInBackground(Void... params) {

JSONObject json = JsonFunctions
.getJsonLoginResult("http://api.crossalertdeventer.nl/login.json");
return json;

}

@Override
protected void onPostExecute(JSONObject json) {
super.onPostExecute(json);
if (waitingDialog.isShowing()) {
waitingDialog.dismiss();
}
try {

LoginResult = json.getString("login");

Log.d("LoginResult", LoginResult);

if (LoginResult.equals("success")) {

WriteSettings(getActivity(), Username, Password,
"data.txt");

TabControllerMeldingen newFragment = new TabControllerMeldingen();
newFragment.addFragment(new KVOCards(), false, FragmentTransaction.TRANSIT_NONE);


} else if (LoginResult.equals("failed")) {
final AlertDialog alertDialog = new AlertDialog.Builder(
getActivity()).create();
alertDialog.setTitle("Fout");
alertDialog
.setMessage("Gebruikersnaam of wachtwoord incorrect");
alertDialog.setButton("Ok",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
alertDialog.dismiss();
}

});
alertDialog.show();
}

} catch (Exception e) {
Log.e("KVOMeldingen", "error" + e.getMessage());

}

}
}

这个来源实际上比这个大(我把它切成两半)。

但是您在 AsyncTask 中看到,我尝试调用 TabControllerMeldingen 类中的方法来添加新 fragment 。调用此方法时,应用程序崩溃

我在 stackoverflow 上的另一个线程上读到它必须用 Super Oncreate 方法做一些事情,但我无法弄清楚到底出了什么问题。

有人可以帮我解决这个问题吗?理解这一点对我来说真的很重要,因为我相信 fragment 是如今基本上要走的路。

最佳答案

你不能这样做:

  TabControllerMeldingen newFragment = new TabControllerMeldingen();

所有 Activity 都必须通过框架创建。但是,您已经在其中(您使用 getActivity() 方法),因此在本例中您需要执行相同的操作。获取 Activity 并在其上添加 fragment 。

关于android - Activity 已被销毁异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11035465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com