Мое приложение аварийно завершает работу с целью запуска в детализации / фрагменте основного потока - PullRequest
0 голосов
/ 08 мая 2018

Мое приложение продолжает зависать на линии startActivity. Я использую mastedetail / фрагменты здесь. Я также попытался использовать getactivity() вместо контекста. и getactivity().finish, но это тоже не сработало, оно даже не доходит до следующего класса, в котором происходит сбой startactivity(intent).

Хотя строка намерений указывает на файл reserve.java.

  if (mItem.id.equals("3")) {
            rootView = inflater.inflate(R.layout.reserve, container, false);
            //((WebView)rootView.findViewById(R.id.item_detail)).loadUrl(mItem.item_url);
            context = rootView.getContext(); // Assign your rootView to context
            Button btDate = (Button) rootView.findViewById(R.id.btnDate);
           btDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v)
                {
                    //Pass the context and the Activity class you need to open from the Fragment Class, to the Intent
                    Intent intent = new Intent(context, reserve.class);
                    startActivity(intent);
                   // startActivity(new Intent(context, reserve.class));
                }
            });
        }
        return rootView;

reserve.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">

    <TableRow android:layout_width="wrap_content">

        <View android:layout_height="60dp" />

        <TextView
            android:id="@+id/txtTitle"
            android:layout_width="wrap_content"
            android:background="#b0c4de"
            android:gravity="fill_horizontal"
            android:padding="50dp"
            android:text="@string/txtTitle"
            android:textSize="50sp"
            android:typeface="serif" />
        <TextView />
    </TableRow>
    <TableRow>
        <View android:layout_height="50dp" />
        <Button
            android:id="@+id/btnDate"
            android:layout_width="wrap_content"
            android:gravity="center_horizontal"
            android:padding="20dp"
            android:text="@string/btnBig"
            android:textSize="36sp" />
    </TableRow>
    <TableRow>
        <View android:layout_height="60dp" />
        <TextView
            android:id="@+id/txtReservation"
            android:layout_gravity="center"
            android:padding="20dp"
            android:textSize="36sp" />
    </TableRow>
</TableLayout>
</LinearLayout>

Reserve.java:

public class reserve extends AppCompatActivity {
    TextView reservations = (TextView) findViewById(R.id.txtReservation);
    Button btDate = (Button) findViewById(R.id.btnDate);
    Calendar c = Calendar.getInstance();
    DateFormat fntDate = DateFormat.getDateInstance();
    DatePickerDialog.OnDateSetListener d = new 
DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int 
monthOfYear, int dayOfMonth) {
            c.set(Calendar.YEAR, year);
            c.set(Calendar.MONTH, monthOfYear);
            c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            reservations.setText("Your Reservation is set for" + 
fntDate.format(c.getTime()));
        }
    };
        public View onCreateView(Bundle savedInstanceState) {

            btDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                    new DatePickerDialog(reserve.this, 
d,c.get(Calendar.YEAR), c.get(Calendar.MONTH), 
c.get(Calendar.DAY_OF_MONTH)).show();
                }
            });
            return reservations;
        }
}

Ошибка после срабатывания старта, вылетает в reserve.java на этой строке

TextView reservations = (TextView) findViewById(R.id.txtReservation);

журнал ошибок для этого сбоя:

    FATAL EXCEPTION: main
                  Process: com.example.gg.classicalindianmusictickets, PID:20130
                  java.lang.RuntimeException: Unable to instantiate activity 
    ComponentInfo 
     { 
     com.example.gg.classicalindianmusictickets/
    com.example.gg.classicalindianmusictickets.reserve}:
     java.lang.NullPointerException: Attempt to invoke virtual method 
    'android.view.Window$Callback android.view.Window.getCallback()' on a null 
    object reference
                      at 
    android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2820)
                      at 
    android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3027)
                      at 
    android.app.servertransaction.LaunchActivityItem.execute(
       LaunchActivityItem.java:78)
                      at android.app.servertransaction.
    TransactionExecutor.executeCallbacks(TransactionExecutor.java:101)
                      at android.app.servertransaction.
    TransactionExecutor.execute(TransactionExecutor.java:73)
                      at android.app.ActivityThread$H.handleMessage( 
    ActivityThread.java:1786)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main
   (ActivityThread.java:6656)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at 
    com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run 
    (RuntimeInit.java:438)
                      at 
    com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
                   Caused by: java.lang.NullPointerException: Attempt to invoke 
    virtual method 'android.view.Window$Callback 
    android.view.Window.getCallback()' on a null object reference
                      at android.support.v7.app.AppCompatDelegateImplBase.<init 
     (AppCompatDelegateImplBase.java:117)
                      at android.support.v7.app.AppCompatDelegateImplV9.<init>

The rserve.java starts this blank page

I want it to do this on the same reserve.xml page And display a txtview as such: обновлен Reserve.java

 public class reserve extends AppCompatActivity {


      public View onCreateView(Bundle savedInstanceState) {
        final    TextView reservations = (TextView) findViewById(R.id.txtReservation);
            Button btDate = (Button) findViewById(R.id.btnDate);
          final  Calendar c = Calendar.getInstance();
         final   DateFormat fntDate = DateFormat.getDateInstance();
        final  DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() {
              @Override
              public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
                  c.set(Calendar.YEAR, year);
                  c.set(Calendar.MONTH, monthOfYear);
                  c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                  reservations.setText("Your Reservation is set for" + fntDate.format(c.getTime()));
              }
          };

          btDate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view)
                {
                    new DatePickerDialog(reserve.this, d,c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();
                }
            });
            return reservations;
        }
}

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вот журнал ошибок, и я не объявил класс в manfiest xml. Я не знаю как>

 FATAL EXCEPTION: main
              Process: com.example.gg.classicalindianmusic, PID: 17174
              android.content.ActivityNotFoundException: Unable to find explicit activity class {com.example.gg.classicalindianmusic/com.example.gg.classicalindianmusic.reserve}; have you declared this activity in your AndroidManifest.xml?
                  at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1996)
                  at android.app.Instrumentation.execStartActivity(Instrumentation.java:1664)
                  at android.app.Activity.startActivityForResult(Activity.java:4574)
                  at android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54)
                  at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:68)
                  at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:233)
                  at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:825)
                  at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:939)
                  at android.support.v4.app.Fragment.startActivity(Fragment.java:1002)
                  at android.support.v4.app.Fragment.startActivity(Fragment.java:991)
                  at com.example.gg.classicalindianmusic.ItemDetailFragment$1.onClick(ItemDetailFragment.java:90)
                  at android.view.View.performClick(View.java:6579)
                  at android.view.View.performClickInternal(View.java:6556)
                  at android.view.View.access$3100(View.java:777)
                  at android.view.View$PerformClick.run(View.java:25660)
                  at android.os.Handler.handleCallback(Handler.java:819)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:164)
                  at android.app.ActivityThread.main(ActivityThread.java:6656)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

I / Process: отправка сигнала. PID: 17174 SIG: 9 Отключен от целевой виртуальной машины, адрес: «localhost: 8629», транспорт: «сокет»

AndroidManifest.xlm

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity
        android:name=".ItemListActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".ItemDetailActivity"
        android:label="@string/title_item_detail"
        android:parentActivityName=".ItemListActivity"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.gg.classicalindianmusic.ItemListActivity" />
    </activity>
</application>

reserve - это Java-файл для работы btnDate reserve is a java file for the btnDate to work

0 голосов
/ 08 мая 2018

Основная проблема - получить Context из поля зрения. Что не правильно, чтобы начать намерение. Если вы находитесь в Fragment классе, то просто getContext(), чтобы получить контекст и использовать контекст для начального намерения.

rootView = inflater.inflate(R.layout.reserve, container, false);

  context = getContext();  
  Button btDate = (Button) rootView.findViewById(R.id.btnDate);
  btDate.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v)
            {
                Intent intent = new Intent(context, reserve.class);
                context.startActivity(intent);
            }
        });

Вам необходимо добавить эту строку на AndroidManifest.xml

<activity android:name=".reserve"/>

или, если вы добавите некоторые детали, используйте это

 <activity
        android:name=".reserve"
        android:label="@string/title_reserve" 
        android:parentActivityName=".reserve"
        android:theme="@style/AppTheme.NoActionBar">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.gg.classicalindianmusic.reserve" />
    </activity>

Это должно быть в onCreateView. Не сверху.

TextView reservations = (TextView) findViewById(R.id.txtReservation);
Button btDate = (Button) findViewById(R.id.btnDate);

Надеюсь, это решит вашу проблему.

...