Arhn - архитектура программирования

Почему при запуске второго Activity происходит сбой при передаче данных через Intent в методе onClick

Здесь, в моем классе пользовательского адаптера, пока я отслеживаю ошибку, которую я обнаружил после нажатия на изображение, он успешно проходит метод onClick, достигает намерения, но происходит сбой при попытке запустить второе действие.

package com.example.prof_mohamed.movieapp;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Prof-Mohamed on 8/3/2016.
 */

public class ImagesAdapter extends         RecyclerView.Adapter<ImagesAdapter.ViewHOlder> {
    private List<MovieEntity> feedItemList;

    private Context mContext;


    public ImagesAdapter(Context context, ArrayList<MovieEntity>     feedItemList) {
        this.feedItemList=feedItemList;
        this.mContext= context;
    }

    @Override
    public ImagesAdapter.ViewHOlder onCreateViewHolder(ViewGroup parent,     int i) {
        View view =     LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout, null);

        RecyclerView.ViewHolder viewHolder=new ViewHOlder(view);
        return (ViewHOlder) viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHOlder customViewholder, final int     i) {

        final MovieEntity feedItem=feedItemList.get(i);
            Picasso.with(mContext).load(feedItem.getPOSTER_PATH_STRING()).into(customView    holder.one_img);

        customViewholder.one_text.setText(feedItem.getTITLE_STRING());
        customViewholder.one_img.setOnClickListener(new     View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(mContext,DetailActivity.class)
                        .putExtra(Intent.EXTRA_TEXT,feedItem);
                mContext.startActivity(intent);
            }
        });
    }

    @Override
    public int getItemCount() {
        return (null!=feedItemList?feedItemList.size():0);
    }

    public class ViewHOlder extends RecyclerView.ViewHolder {
        protected ImageView one_img;
        protected TextView one_text;

        public ViewHOlder(View converview) {
            super(converview);

            this.one_img = (ImageView)     converview.findViewById(R.id.img_view);
            this.one_text = (TextView)     converview.findViewById(R.id.txt_poster_title);
        }
    }
}

Вот моя вторая активность, в которую я должен отправить свои данные из первой активности:

package com.example.prof_mohamed.movieapp;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class DetailActivity extends AppCompatActivity {

    private static String mMovieStr;

        TextView txtTitle=(TextView) findViewById(R.id.txt_title);

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

        Intent intent = getIntent();

        if(intent != null&&intent.hasExtra(intent.EXTRA_TEXT)){
        mMovieStr=intent.getStringExtra(intent.EXTRA_TEXT);
        txtTitle.setText(mMovieStr);
    }
}
}

Это мой результат ошибки:

E/AndroidRuntime: НЕИСПРАВНОЕ ИСКЛЮЧЕНИЕ: main android.util.AndroidRuntimeException: для вызова startActivity() из-за пределов контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK. Это действительно то, что вы хотите? в android.app.ContextImpl.startActivity(ContextImpl.java:1278) в android.app.ContextImpl.startActivity(ContextImpl.java:1265) в com.example.prof_mohamed.movieapp.ImagesAdapter$1.onClick(ImagesAdapter.java:52) в android.view.View.performClick(View.java:4432) в android.view.View$PerformClick.run(View.java:18339) в android.os.Handler.handleCallback(Handler.java:725) в android. os.Handler.dispatchMessage(Handler.java:92) в android.os.Looper.loop(Looper.java:137) в android.app.ActivityThread.main(ActivityThread.java:5283) в java.lang.reflect.Method .invokeNative(собственный метод) на java.lang.reflect.Method.invoke(Method.java:511) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) на com.androi d.internal.os.ZygoteInit.main(ZygoteInit.java:869) в dalvik.system.NativeStart.main(собственный метод)

и после редактирования этих строк внутри метода onClick

@Override
public void onClick(View view) {
Intent intent = new Intent(mContext,DetailActivity.class)
                    .putExtra(Intent.EXTRA_TEXT,feedItem);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                mContext.startActivity(intent);
        }

это дало мне исключение нулевого указателя txtTitle (TextView) в классе DetailActivity.java.

Может ли кто-нибудь помочь мне решить эту проблему. ваш ответ будет оценен.


  • Можете ли вы проверить журналы ошибок и посмотреть, не приводит ли что-то к txtTitle к исключению нулевого указателя? 13.08.2016
  • @AmanSinghal Я отредактировал свой пост, чтобы включить результаты журналов ошибок, пожалуйста, просмотрите его в сообщении выше. 13.08.2016
  • вы передаете объект данных в намерение, а затем получаете строку с другой стороны? не вызовет ли это проблем? разве ты не должен проходить feedItem.getTITLE_STRING()? 13.08.2016
  • я думаю, что передача этого объекта данных ей efeedItem.getTITLE_STRING() верна, но это не останавливается здесь, а останавливается в этой строке: mContext.startActivity(intent); Зачем ! 13.08.2016
  • вы можете начать свою деятельность перед добавлением флага, например намерения.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 13.08.2016
  • после использования этой строки он впервые дал мне java.lang.NullPointerException .... какое здесь нулевое значение!? 13.08.2016
  • @AmanSinghal Уважаемый, он нашел txtTitle как нулевое значение, как вы и ожидали, что мне делать? 13.08.2016

Ответы:


1

Попробуйте добавить следующий код после создания намерения

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
13.08.2016
  • после использования этой строки я впервые получаю исключение java.lang.NullPointerException 13.08.2016
  • Отлично, вы хотите, чтобы я помог вам с тем, почему это исключение, или вы поняли это? 13.08.2016

  • 2

    попробуй это:

    Intent intent = new Intent(mContext,DetailActivity.class)
                           .putExtra(Intent.EXTRA_TEXT,feedItem);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    mContext.startActivity(intent);
    
    13.08.2016
  • У меня это сработало, используя намерение.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Спасибо 13.08.2016

  • 3

    В вашем классе адаптера вы передаете объект, но во втором действии вы пытаетесь получить StringExtra()

    Прочтите это будет полезно

    Как отправить объект из одну активность Android в другую с помощью намерений?

    13.08.2016
  • @ Рамит, если это сработает, пожалуйста, примите ответ, чтобы другие люди также могли получить помощь 13.08.2016
  • Проф-Мохамед Атеф может это принять, но плюс с моей стороны :) 13.08.2016
  • я еще не решил это, как только я найду подходящий, я приму его 13.08.2016
  • Не могли бы вы опубликовать обновленный код с ошибкой logcat. 13.08.2016

  • 4

    Пожалуйста, проверьте, что вы определили DetailActivity в файле манифеста.

    13.08.2016
  • это мои действия в файле манифеста: ‹activity android:name=.MainActivity› ‹intent-filter› ‹action android:name=android.intent.action.MAIN /› ​​‹category android:name=android.intent.category. LAUNCHER /› ‹/intent-filter› ‹/activity› ‹activity android:name=.DetailActivity›‹/activity› Это правда или он должен содержать теги ‹intent-filter›, такие как .MainActivity? 13.08.2016
  • В конструкторе ImagesAdapter вы передаете контекст действия или нет? 13.08.2016
  • Я думаю, что shahid17june поделился правильным ответом. Пожалуйста попробуйте. 13.08.2016

  • 5

    feedItem — это объект. Вы передаете это с намерением и пытаетесь получить его из второго действия как String, и в этом проблема.

    15.08.2016
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..