java.lang.IllegalArgumentException: Pas de parent trouvés à partir de la vue donnée. Veuillez fournir une preuve de la vue
mon application se bloque lorsque vous tentez d'afficher de message serveur et je pense que le problème pourrait être avec mon getView()
. ci-dessous est la registerActivity
ont été l'incident se produit et mon activity_register.xml
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.fastchat.helper.SQLiteHandler;
import com.fastchat.helper.SessionManager;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
public class RegisterActivity extends Activity {
private static final String TAG = RegisterActivity.class.getSimpleName();
private Button btnRegister;
private Button btnLinkToLogin;
private EditText inputFullName;
private EditText inputEmail;
private EditText inputPassword;
private ProgressDialog pDialog;
private SessionManager session;
private SQLiteHandler db;
private ProgressBar progress;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
inputFullName = (EditText) findViewById(R.id.name);
inputEmail = (EditText) findViewById(R.id.email);
inputPassword = (EditText) findViewById(R.id.password);
btnRegister = (Button) findViewById(R.id.btnRegister);
btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLoginScreen);
//Progress dialog
pDialog = new ProgressDialog(this);
pDialog.setCancelable(true);
/*
//Session manager
session = new SessionManager(getApplicationContext());
//SQLite database handler
db = new SQLiteHandler(getApplicationContext());
//Check if user is already logged in or not
if (session.isLoggedIn()) {
//User is already logged in. Take him to main activity
Intent intent = new Intent(RegisterActivity.this,
SearchableActivity.class);
startActivity(intent);
finish();
}
*/
//Register Button Click event
btnRegister.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
String name = inputFullName.getText().toString();
String email = inputEmail.getText().toString();
String password = inputPassword.getText().toString();
if (!name.isEmpty() && !email.isEmpty() && !password.isEmpty()) {
registerProcess(name, email, password);
} else {
Toast.makeText(getApplicationContext(),
"Please enter your details!", Toast.LENGTH_LONG)
.show();
}
}
});
//Link to Login Screen
btnLinkToLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent i = new Intent(getApplicationContext(),
LoginActivity.class);
startActivity(i);
finish();
}
});
}
private void registerProcess(String name,String email,String password){
String tag_string_req = "req_register";
//pDialog = new AlertDialog.Builder(getActivity());
pDialog.setMessage("please wait");
pDialog.show();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(Constants.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface requestInterface = retrofit.create(RequestInterface.class);
User user = new User();
user.setName(name);
user.setEmail(email);
user.setPassword(password);
ServerRequest request = new ServerRequest();
request.setOperation(Constants.REGISTER_OPERATION);
request.setUser(user);
Call<ServerResponse> response = requestInterface.operation(request);
response.enqueue(new Callback<ServerResponse>() {
private View view;
public View getView() {
return view;
}
@Override
public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {
ServerResponse resp = response.body();
if(resp !=null)//tried to check if resp is null but its not
//crash occurs here
Snackbar.make(getView(),resp.getMessage(), Snackbar.LENGTH_LONG).show();
pDialog.dismiss();
}
@Override
public void onFailure(Call<ServerResponse> call, Throwable t) {
//progress.setVisibility(View.INVISIBLE);
Log.d(Constants.TAG, "failed");
Toast.makeText(getApplicationContext(), t.getLocalizedMessage(), Toast.LENGTH_LONG).show();
pDialog.dismiss();
}
});
}
activity_register.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/bg_register"
android:gravity="center"
android:orientation="vertical"
android:padding="10dp"
android:id="@+id/chat">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:paddingLeft="20dp"
android:paddingRight="20dp" >
<ImageView
android:layout_width="389dp"
android:layout_height="72dp"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="24dp"
android:src="@drawable/logo"
tools:ignore="ContentDescription" />
<EditText
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@color/input_register_bg"
android:hint="@string/hint_name"
android:padding="10dp"
android:singleLine="true"
android:inputType="textCapWords"
android:textColor="@color/input_register"
android:textColorHint="@color/input_register_hint" />
<EditText
android:id="@+id/email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@color/input_register_bg"
android:hint="@string/hint_email"
android:inputType="textEmailAddress"
android:padding="10dp"
android:singleLine="true"
android:textColor="@color/input_register"
android:textColorHint="@color/input_register_hint" />
<EditText
android:id="@+id/password"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:background="@color/input_register_bg"
android:hint="@string/hint_password"
android:inputType="textPassword"
android:padding="10dp"
android:singleLine="true"
android:textColor="@color/input_register"
android:textColorHint="@color/input_register_hint" />
<!-- Login Button -->
<Button
android:id="@+id/btnRegister"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dip"
android:background="#ea4c88"
android:text="register"
android:textColor="@color/white" />
<!-- Link to Login Screen -->
<Button
android:id="@+id/btnLinkToLoginScreen"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="40dip"
android:background="@null"
android:text="already a member? login"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="15dp" />
</LinearLayout>
ci-dessous est logcat message
java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view.
at android.support.design.widget.Snackbar.make(Snackbar.java:137)
at com.chat.RegisterActivity$3.onResponse(RegisterActivity.java:143)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
- Vous avez besoin valide d'un point de vue ici: snack-bar.faire(getView(),resp.getMessage(), snack-bar.LENGTH_LONG).show(); , vous pouvez utiliser n'importe quelle vue référencée dans votre activité.
- s'il vous plaît pouvez-vous donner plus de détails
- mettez le code de votre activité
- je n'ai pas encore comprendre
- mise à jour de votre réponse et de mettre le code de votre activité , j'ai besoin de vérifier
- le complet registerActivity ?
- yesssssssssssss
- partager vos registerActivity mise en page fichier xml..
- pourriez-vous mettre à jour votre code sur la réponse avec le commentaire condition?
Vous devez vous connecter pour publier un commentaire.
Je vous suggère d'essayer avec
findViewById(android.R.id.content)
.C'est ce qu'a fait le tour pour moi:
android.R.id.content
vous donnera l'élément racine de la vue (pour plus d'informations, veuillez consulter Android: qu'est-Ce que android.R.id.le contenu est-il utilisé?).Envelopper votre mise en page avec CoordinatorLayout
Vous êtes de passage à
invalid
vue argument de snack-bar. donc, vous avez à donner RegisterActivity BaseLayout référence.vous devriez essayer de déclarer l'id de
activity_register.xml
Linéaire /Relative ou ce que vous conception.puis initialiser passer cette mise en page à la buvette comme ci-dessous
register.xml
codeAu lieu de cela :
Remplacer getView() avec une vue existante composant de votre activité actuelle, comme ceci:
if (resp !=null)
Remplacer votre point de Vue avec cette
getActivity().getCurrentFocus()
.mais pas dans votre Défaut Fragment
J'ai trouvé une solution qui peut aider les autres qui sont à la recherche d'une solution commune.
J'ai eu cette erreur lorsque j'ai essayé d'afficher un message avec Buvette avant le chargement de l'ensemble de notre fichier XML.
Dans le fragment que j'ai essayé d'appeler l'API dans
onCreateView();
et montrantSnackbar
message deInternet connection is off
comme ci-dessous:Je viens de mettre cette méthode en
onViewCreated()
Son travail pour moi maintenant.
BONUS:
Merci.
Pour résoudre cette Exception, vous pouvez le faire.
Où constraintLayout est les parents de mise en page où je veux afficher le message, déclarer la mise en page:
ConstraintLayout constraintLayout;
Et de trouver par Id.
constraintLayout = findViewById(R. id.cl_layout);
La fonction fonctionne pour moi. J'espère qu'elle pourra vous aider.