it-swarm.com.de

java.lang.IllegalArgumentException: In der angegebenen Ansicht wurde kein passender Parent gefunden. Bitte geben Sie eine gültige Ansicht an

meine App stürzt ab, wenn versucht wird, die Servermeldung anzuzeigen, und ich denke, das Problem könnte mit meiner getView() sein. Unten ist die registerActivity, wo der Absturz auftritt und mein 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>

unten ist die Logcat-Nachricht

 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)
3
Mani

Ich schlage vor, dass Sie es mit findViewById(Android.R.id.content) versuchen.

Dies hat mir den Trick gebracht:

Snackbar.make(findViewById(Android.R.id.content), resp.getMessage(), Snackbar.LENGTH_LONG).show();

Android.R.id.content gibt Ihnen das Hauptelement der Ansicht (weitere Informationen hierzu finden Sie unter Android: Wozu dient Android.R.id.content? ).

7
Normando

Wickeln Sie Ihr Layout mit CoordinatorLayout

<Android.support.design.widget.CoordinatorLayout
     xmlns:Android="http://schemas.Android.com/apk/res/Android"
     xmlns:app="http://schemas.Android.com/apk/res-auto"
     xmlns:tools="http://schemas.Android.com/tools"
     Android:layout_width="match_parent"
     Android:id="@+id/chat"
     Android:layout_height="match_parent">
     <LinearLayout
          Android:layout_width="match_parent"
          Android:layout_height="match_parent"
          Android:background="@color/bg_register"
          Android:gravity="center"
          Android:orientation="vertical"
          Android:padding="10dp">
               ...
               ...
               ...
    </LinearLayout>
</Android.support.design.widget.CoordinatorLayout>
1
Anu Martin

Ersetzen Sie Ihre Ansicht durch diese

getActivity().getCurrentFocus().

aber nicht in Ihrem Standardfragment

1
Ashutosh Tiwari

Ich habe eine Lösung gefunden, die anderen helfen kann, die nach einer gemeinsamen Lösung suchen.

Ich habe diese Fehlermeldung erhalten, als ich versucht habe, eine Nachricht mit Snackbar anzuzeigen, bevor unsere gesamte XML-Datei geladen wird.

In Fragment habe ich versucht, API in onCreateView(); aufzurufen und Snackbar-Nachricht von Internet connection is off wie folgt anzuzeigen:

@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mBindingObject = DataBindingUtil.inflate(inflater, getLayoutResId(), container, false);

    getData();

    return mBindingObject.getRoot();
}

Ich habe diese Methode nur in onViewCreated() eingefügt.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    getData();
}

Es arbeitet jetzt für mich.

BONUS:

Versuchen Sie immer, view nach dem erfolgreichen Laden zu verwenden. Alles und jeder Position einer Linie ist Sache.

Vielen Dank.

0
Pratik Butani

An Stelle von :

Snackbar.make(getView(),resp.getMessage(), Snackbar.LENGTH_LONG).show();

Ersetzen Sie getView () durch eine vorhandene Ansichtskomponente Ihrer aktuellen Aktivität wie folgt:

Snackbar.make(findViewById(R.id. chat),resp.getMessage(), Snackbar.LENGTH_LONG).show();
0
diegoveloper

Sie übergeben ein invalid view-Argument an die Snackbar. Sie müssen also RegisterActivity BaseLayout darauf verweisen. Sie sollten versuchen, die ID für activity_register.xml Linear/Relative oder was auch immer Sie entwerfen, zu deklarieren. 

  <LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              xmlns:tools="http://schemas.Android.com/tools"
              Android:layout_width="match_parent"
              Android:layout_height="match_parent"
              Android:orientation="vertical"
              Android:background="#a7b6bdd6"
    Android:id="@+id/ll1"  //here 
     >

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="64dp"
        Android:background="@color/colorPrimary"
        Android:minHeight="?attr/actionBarSize" />

        //your design

</LinearLayout>

dann initialisieren Sie dieses Layout an snackbar wie unten

 private void registerProcess(String name,String email,String password){

     final LinearLayout linearLayout = (LinearLayout)findViewById(R.id.ll1);// here change
      //Snackbar.make(linearLayout,"Hello", Snackbar.LENGTH_LONG).show();

    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(linearLayout,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();


        }
    });
}
0
Omi