Prof-Mohamed Atef Prof-Mohamed Atef - 3 months ago 15
Android Question

Why starting a second Activity crashes while passing data via Intent in onClick method

Here, in my Custom Adapter class, while i am tracing the error which i have found after pressing on the image, it goes through the onClick method successfully, attain the intent, but it crashes when it attempts to start the second Activity.

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);
}
}
}


Here are my second Activity, which i have to send my data from the first Activity to it :

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);
}
}
}


This is my error result :

E/AndroidRuntime: FATAL EXCEPTION: main
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
at android.app.ContextImpl.startActivity(ContextImpl.java:1278)
at android.app.ContextImpl.startActivity(ContextImpl.java:1265)
at com.example.prof_mohamed.movieapp.ImagesAdapter$1.onClick(ImagesAdapter.java:52)
at android.view.View.performClick(View.java:4432)
at android.view.View$PerformClick.run(View.java:18339)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5283)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)

and after editing these lines inside the onClick method

@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);
}


it gave me a Null pointer Exception of the txtTitle (TextView) in the DetailActivity.java class.

Can anybody help me to solve this problem. your response will be appreciated.

Answer

Try adding the following code after creating the intent

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Comments