2016-08-13 4 views
0

Здесь, в моем классе Custom Adapter, когда я отслеживаю ошибку, которую я нашел после нажатия на изображение, она успешно проходит метод onClick, достигает намерения, но он падает, когда он пытается запустить второе действие.Зачем начинать второй Сбой активности при передаче данных с помощью Intent в методе 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: FATAL ИСКЛЮЧЕНИЕ : main android.util.AndroidRuntimeException: для вызова функции startActivity() извне контекста действия требуется флаг 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 (собственный метод) at jav a.lang.reflect.Method.invoke (Method.java:511) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1102) at com.android.internal.os.ZygoteInit. основной (ZygoteInit.java:869) на dalvik.system.NativeStart.main (Native Method)

и после редактирования этих строк внутри метода 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.

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

+0

Можете ли вы проверить журналы ошибок и посмотреть, не делает ли что-нибудь действие txtTitle для исключения исключения из-за нулевого указателя? – AmanSinghal

+0

@AmanSinghal Я отредактировал мое сообщение, чтобы включить результаты журналов ошибок, пожалуйста, просмотрите его в приведенном выше сообщении –

+0

, вы передаете объект данных в намерение, а затем getString с другой стороны? это не вызовет проблем? не следует ли вам передавать 'feedItem.getTITLE_STRING()'? – TWL

ответ

0

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

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
+0

после использования этой строки, это первый раз, когда я даю мне java.lang.NullPointerException –

+0

Отлично, вы хотите, чтобы я помог вам в том, почему он дает это исключение, или вы поняли это? – AmanSinghal

-1

Проверьте файл DetailActivity в файле манифеста.

+0

эти мои действия в файле манифеста: <деятельность андроид: "MainActivity "имя => <намеренного фильтр> <действие андроида: имя =" android.intent.action.MAIN" /> < категория андроид: имя = "android.intent.category.LAUNCHER" /> <деятельность андроид: "DetailActivity" имя => Является ли это правда или должен он содержит <намерения -filter> также как .MainActivity? –

+0

все в порядке. Проверка еще ... – Ramit

+0

В конструкторе ImagesAdapter вы передаете контекст активности или нет? – Ramit

0

попробовать это:

Intent intent = new Intent(mContext,DetailActivity.class) 
         .putExtra(Intent.EXTRA_TEXT,feedItem); 
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
mContext.startActivity(intent); 
+0

Он работал со мной с использованием намерения.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK); Спасибо –

0

В классе адаптера вы передаете объект, а во втором упражнении вы пытаетесь getStringExtra()

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

How to send an object from one Android Activity to another using Intents?

+0

@ Рамит, если он работает, пожалуйста, примите ответ, чтобы люди могли получить помощь. – shahid17june

+0

Проф-Мохамед Атеф может принять это, но плюс один с моей стороны :) – Ramit

+0

Спасибо ... :) – shahid17june

-1

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