【问题标题】:Why starting a second Activity crashes while passing data via Intent in onClick method为什么在 onClick 方法中通过 Intent 传递数据时启动第二个 Activity 会崩溃
【发布时间】:2016-08-13 14:57:58
【问题描述】:

在这里,在我的自定义适配器类中,当我跟踪按下图像后发现的错误时,它成功地通过了 onClick 方法,达到了意图,但是当它尝试启动第二个 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);
        }
    }
}

这是我的第二个 Activity,我必须将我的数据从第一个 Activity 发送给它:

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:从 Activity 上下文外部调用 startActivity() 需要 FLAG_ACTIVITY_NEW_TASK 标志。这真的是你想要的吗? 在 android.app.ContextImpl.startActivity(ContextImpl.java:1278) 在 android.app.ContextImpl.startActivity(ContextImpl.java:1265) 在 com.example.prof_mohamed.movi​​eapp.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(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102) 在 com.android.internal.os.ZygoteInit.main(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);
        }

它给了我一个 DetailActivity.java 类中 txtTitle (TextView) 的空指针异常。

谁能帮我解决这个问题。我们将不胜感激。

【问题讨论】:

  • 你能检查错误日志,看看在 txtTitle 上做某事是否给出空指针异常?
  • @AmanSinghal 我已经编辑了我的帖子以包含错误日志结果,请在上面的帖子中查看它
  • 你将一个数据对象传递给intent,然后在另一边getString?这不会引起问题吗?你不应该通过feedItem.getTITLE_STRING()吗?
  • 我认为传递这个数据对象她的 efeedItem.getTITLE_STRING() 是真的,但它并没有停在这里它停在这一行: mContext.startActivity(intent);为什么!
  • 你可以在添加标志之前开始你的活动,比如 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

标签: android android-intent start-activity


【解决方案1】:

在创建意图后尝试添加以下代码

myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

【讨论】:

  • 使用这行后,第一次给我一个java.lang.NullPointerException
  • 太好了,您希望我帮助您了解为什么会出现该异常,或者您已经弄清楚了吗?
【解决方案2】:

试试这个:

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

【讨论】:

  • 它通过使用 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 与我一起工作谢谢
【解决方案3】:

在您的适配器类中,您正在传递对象,但在第二个活动中,您正在尝试 getStringExtra()

阅读本文会有所帮助

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

【讨论】:

  • @Ramit,如果可行,请采纳答案,以便其他人也能得到帮助
  • Prof-Mohamed Atef 可以接受这一点,但我这边要加一个 :)
  • 我还没解决,找到合适的我会接受的
  • 能否请您发布带有 logcat 错误的更新代码。
【解决方案4】:

请检查您在清单文件中定义的 DetailActivity。

【讨论】:

  • 这些是我在 Manifest 文件中的活动: 这是真的还是应该包含 标签也像 .MainActivity ?
  • 在 ImagesAdapter 构造函数中,您是否正在传递活动上下文?
  • 我认为 shahid17june 分享了正确答案。请尝试。
【解决方案5】:

feedItem 是一个对象。您有意传递它并试图从第二个活动中获取它作为字符串,这就是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2011-11-24
    • 2023-03-14
    相关资源
    最近更新 更多