Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从回收器视图、从单独的活动中删除卡片视图_Java_Android - Fatal编程技术网

Java 如何从回收器视图、从单独的活动中删除卡片视图

Java 如何从回收器视图、从单独的活动中删除卡片视图,java,android,Java,Android,情况如下: 我试图从卡片视图上的ArrayList(通过Firebase数据库填充)中删除用户信息 此卡片视图填充在回收器视图中。当用户在“回收者”视图中单击一张卡时,他们将通过一个意图进入一个详细活动 在intent中,有更多的用户数据以及批准或拒绝用户的选项 我希望能够拒绝用户,然后从“回收者”视图中删除他们的卡 我一直遇到一个空指针错误,我不知道还能去哪里 堆栈跟踪位于末尾 非常感谢您在这件事上的时间和帮助 相关代码如下: 片段: package org.codefordenver.enc

情况如下:

我试图从卡片视图上的ArrayList(通过Firebase数据库填充)中删除用户信息

此卡片视图填充在回收器视图中。当用户在“回收者”视图中单击一张卡时,他们将通过一个意图进入一个详细活动

在intent中,有更多的用户数据以及批准或拒绝用户的选项

我希望能够拒绝用户,然后从“回收者”视图中删除他们的卡

我一直遇到一个空指针错误,我不知道还能去哪里

堆栈跟踪位于末尾

非常感谢您在这件事上的时间和帮助

相关代码如下:

片段:

package org.codefordenver.encorelink;


import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.Objects;

public class OrganizerDashboardPendingTab extends Fragment {


    private String userId;


    //Arraylist to hold our list of volunteer musicians
    public static ArrayList<String> volunteerSmallView = new ArrayList<>();
    public static ArrayList<String>  volunteerDetail = new ArrayList<>();
    public static ArrayList<String> volunteerLink = new ArrayList<>();

    //private String field members to hold temp String data
    private String tempFirst;
    private String tempTalent;
    private String tempLastName;
    private String tempPhoneNumber;
    private String tempStreetAddress;
    private String tempCity;
    private String tempZipcode;
    public static String tempVideoLink;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {


        final RecyclerView musicianInfoRecycler = (RecyclerView) inflater.inflate(R.layout.tab1, container, false);


        //Checking to make sure user is logged in and is not null
        FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            userId = user.getUid();
        }
        //setting DatabaseReference variable so we can search through the correct node in our DB
        DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference().child(CreateMusicianProfile.MUSICIAN_PROFILE);

        //Instantiating and declaring our Adapter object for our Recycler View
        final PendingMusicianInfoAdapter adapter = new PendingMusicianInfoAdapter(volunteerSmallView);

        //this clear is a must so we aren't getting duplicated data in the cardview
        volunteerSmallView.clear();
        //Adding child event listener to our database object
        mDatabase.addChildEventListener(new ChildEventListener() {

            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                //iterate through each dataSnapshot inside mDatabase
                for (DataSnapshot dataSnapshot1 : dataSnapshot.getChildren()) {

                    //if we get a first name, add it to temp string
                    if (dataSnapshot1.getKey().equals("firstName")) {
                        tempFirst = Objects.requireNonNull(dataSnapshot1.getValue(String.class));
                    }

                    if (dataSnapshot1.getKey().equals("lastName")) {
                        tempLastName = Objects.requireNonNull(dataSnapshot1.getValue(String.class));
                    }

                    //if we get a musical talent, save it also into a temp string
                    if (dataSnapshot1.getKey().equals("musicalTalent")) {
                        tempTalent = Objects.requireNonNull("\nTalent: " + dataSnapshot1.getValue(String.class));

                        //in order to display all the string data together in one card,
                        //we have to add each temp string to the array list.

                            volunteerSmallView.add(tempFirst + " " + tempLastName + tempTalent);

                    }

                    if (dataSnapshot1.getKey().equals("phoneNumber")) {
                        tempPhoneNumber = Objects.requireNonNull( dataSnapshot1.getValue(String.class));
                    }

                    if (dataSnapshot1.getKey().equals("streetAddress")) {
                        tempStreetAddress = Objects.requireNonNull(dataSnapshot1.getValue(String.class));
                    }

                    if (dataSnapshot1.getKey().equals("city")) {
                        tempCity = Objects.requireNonNull(dataSnapshot1.getValue(String.class));
                    }

                    if (dataSnapshot1.getKey().equals("zipcode")) {
                        tempZipcode = Objects.requireNonNull("Zipcode: " + dataSnapshot1.getValue(String.class));
                    }

                    if (dataSnapshot1.getKey().equals("videoLink")) {
                        tempVideoLink = Objects.requireNonNull(dataSnapshot1.getValue(String.class));
                        volunteerLink.add(tempVideoLink);

                        volunteerDetail.add(tempFirst + " " + tempLastName +
                                "\n" + tempPhoneNumber +
                                "\n" + tempStreetAddress +
                                "\n" + tempCity + ", " + tempZipcode + "\n" + tempTalent + "\n");

                    }

                }
                //set adapater equal to our adapater object
                musicianInfoRecycler.setAdapter(adapter);
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {
                adapter.notifyDataSetChanged();
            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });


        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        musicianInfoRecycler.setLayoutManager(linearLayoutManager);

        adapter.setListener(new PendingMusicianInfoAdapter.Listener() {
            @Override
            public void onClick(int position) {
                Intent intent = new Intent(getActivity(), MusicianDetails.class);
                intent.putExtra(MusicianDetails.EXTRA_NUMBER, position);
                getActivity().startActivity(intent);
            }
        });


        return musicianInfoRecycler;

    }

}
package org.codefordenver.encorelink;
导入android.content.Intent;
导入android.net.Uri;
导入android.os.Bundle;
导入android.support.annotation.Nullable;
导入android.support.v4.app.Fragment;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入com.google.firebase.auth.FirebaseAuth;
导入com.google.firebase.auth.FirebaseUser;
导入com.google.firebase.database.ChildEventListener;
导入com.google.firebase.database.DataSnapshot;
导入com.google.firebase.database.DatabaseError;
导入com.google.firebase.database.DatabaseReference;
导入com.google.firebase.database.FirebaseDatabase;
导入java.util.ArrayList;
导入java.util.Objects;
公共类OrganizerDashboardPendingTab扩展片段{
私有字符串用户标识;
//Arraylist保存我们的志愿音乐家名单
publicstaticarraylist=newarraylist();
public static ArrayList detail=new ArrayList();
publicstaticarraylistlink=newarraylist();
//用于保存临时字符串数据的专用字符串字段成员
私有字符串优先;
私有字符串;
私有字符串模板名;
私有字符串tempPhoneNumber;
私有字符串tempStreetAddress;
私人城市;
私有字符串tempZipcode;
公共静态字符串tempVideoLink;
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、Bundle savedInstanceState){
最终RecyclerView musicianInfoRecycler=(RecyclerView)充气机。充气(R.layout.tab1,容器,假);
//检查以确保用户已登录且不为空
FirebaseAuth FirebaseAuth=FirebaseAuth.getInstance();
FirebaseUser=firebaseAuth.getCurrentUser();
如果(用户!=null){
userId=user.getUid();
}
//设置DatabaseReference变量,以便在数据库中搜索正确的节点
DatabaseReference mDatabase=FirebaseDatabase.getInstance().getReference().child(CreateMusicianProfile.Musitor\u PROFILE);
//为回收器视图实例化和声明适配器对象
最终PendingMusicianInfoAdapter=新PendingMusicianInfoAdapter(视图);
//这是必须的,因此我们不会在cardview中获得重复的数据
使用smallview.clear();
//将子事件侦听器添加到数据库对象
mDatabase.addChildEventListener(新的ChildEventListener(){
@凌驾
公共void onChildAdded(DataSnapshot DataSnapshot,字符串s){
//遍历mDatabase中的每个dataSnapshot
对于(DataSnapshot dataSnapshot1:DataSnapshot.getChildren()){
//如果我们得到一个名字,将它添加到临时字符串中
if(dataSnapshot1.getKey().equals(“firstName”)){
tempFirst=Objects.requirennull(dataSnapshot1.getValue(String.class));
}
if(dataSnapshot1.getKey().equals(“lastName”)){
tempLastName=Objects.requirennull(dataSnapshot1.getValue(String.class));
}
//如果我们有音乐天赋,也可以将其保存到临时字符串中
if(dataSnapshot1.getKey().equals(“musicalTalent”)){
试探=Objects.requirennull(“\n试探:+dataSnapshot1.getValue(String.class));
//为了在一张卡中同时显示所有字符串数据,
//我们必须将每个临时字符串添加到数组列表中。
添加(tempFirst+“”+tempLastName+tempLastName);
}
if(dataSnapshot1.getKey().equals(“phoneNumber”)){
tempPhoneNumber=Objects.requireNonNull(dataSnapshot1.getValue(String.class));
}
if(dataSnapshot1.getKey().equals(“streetAddress”)){
tempStreetAddress=Objects.requirennoull(dataSnapshot1.getValue(String.class));
}
如果(dataSnapshot1.getKey().equals(“城市”)){
tempCity=Objects.requirennull(dataSnapshot1.getValue(String.class));
}
if(dataSnapshot1.getKey().equals(“zipcode”)){
tempZipcode=Objects.requireNonNull(“Zipcode:+dataSnapshot1.getValue(String.class));
}
if(dataSnapshot1.getKey().equals(“视频链接”)){
tempVideoLink=Objects.requirennoull(dataSnapshot1.getValue(String.class));
添加(临时视频链接);
志愿者详细信息。添加(tempFirst+“”+tempLastName)+
“\n”+临时电话号码+
“\n”+临时地址+
“\n”+tempCity+,“+tempZip”
package org.codefordenver.encorelink;

import android.annotation.SuppressLint;
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;

public class PendingMusicianInfoAdapter extends RecyclerView.Adapter<PendingMusicianInfoAdapter.ViewHolder> {

    private ArrayList<String> musicianInfo;
    private Listener listener;


    public interface Listener {
        void onClick(int position);
    }

    public void setListener(Listener listener) {
        this.listener = listener;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        private CardView cardView;
        Button rejectionButton;


        public ViewHolder(CardView view) {
            super(view);
            cardView = view;
            rejectionButton =  view.findViewById(R.id.musician_rejection);


            rejectionButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        try {
                            removeAt(getAdapterPosition());
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });




        }

        void bind(final int position) {

            TextView textView = cardView.findViewById(R.id.pending_musician_info);
            textView.setText(musicianInfo.get(position));
            cardView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (listener != null) {
                        listener.onClick(position);
                    }
                }
            });

        }

        void removeAt(int position) {
            musicianInfo.remove(position);
            notifyItemRemoved(position);
            notifyItemRangeChanged(position, musicianInfo.size());
        }

    }

    public PendingMusicianInfoAdapter(ArrayList<String> musicianInfo) {
        this.musicianInfo = musicianInfo;
    }


    //called when recyclerview instantiates new viewholder instance
    //creates the views
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {


        CardView cv = (CardView) LayoutInflater.from(parent.getContext()).inflate(R.layout.card_musician_info, parent, false);


        return new ViewHolder(cv);
    }

    //called when recycler view wants to populate data from model for the user to see
    //after each view holder is created, recycler view calls onBindViewHolder to populate item
    //with data
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(position);


    }


    //returns number of items in data source
    @Override
    public int getItemCount() {
        return musicianInfo.size();
    }
}
package org.codefordenver.encorelink;

import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.ArrayList;
import java.util.Objects;
import java.util.regex.Matcher;

public class MusicianDetails extends AppCompatActivity {

    public static final String EXTRA_NUMBER = "number";
//
//    public static ArrayList<String> approvedMusicians = new ArrayList<>();
    private TextView closeButton;
    public static int cardNumber;
    private String talentURL;
    private TextView musicalTalentLink;
    private Button approvalButton;

    private FirebaseAuth firebaseAuth;
    private DatabaseReference databaseReference;
    private String userId;
    public static boolean approved;

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

        closeButton = findViewById(R.id.x_button);
        TextView textView = findViewById(R.id.musician_details);
        musicalTalentLink = findViewById(R.id.musical_talent_link);

        approvalButton = findViewById(R.id.musician_approval);


        databaseReference = FirebaseDatabase.getInstance().getReference();

        firebaseAuth = FirebaseAuth.getInstance();
        FirebaseUser user = firebaseAuth.getCurrentUser();
        if (user != null) {
            userId = user.getUid();
        }




        cardNumber = (int) Objects.requireNonNull(getIntent().getExtras()).get(EXTRA_NUMBER);
        String musicianDetails = OrganizerDashboardPendingTab.volunteerDetail.get(cardNumber);

        findURL(OrganizerDashboardPendingTab.volunteerLink);
        musicalTalentLink.setText(talentURL);
        textView.setText(musicianDetails);

        musicalTalentLink.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setData(Uri.parse(talentURL));
                    startActivity(intent);
                } catch (ActivityNotFoundException e){
                    Toast.makeText(MusicianDetails.this, "Bad URL!", Toast.LENGTH_SHORT).show();
                }
            }
        });

        approvalButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
//                approvedMusicians.add(OrganizerDashboardPendingTab.volunteerDetail.get(cardNumber));
                databaseReference.child(CreateOrganizerProfile.ORGANIZER_PROFILE).child(userId).child("approved_musicians").child(String.valueOf(cardNumber)).
                        setValue(OrganizerDashboardPendingTab.volunteerDetail.get(cardNumber));
                Toast.makeText(MusicianDetails.this, "Musician approved!", Toast.LENGTH_SHORT - 3).show();
                Toast.makeText(MusicianDetails.this, "Moving musician to In Progress...", Toast.LENGTH_SHORT).show();
                approved = true;


            }
        });



        closeButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });

    }

    public void findURL(ArrayList<String> data) {

        Matcher m = Patterns.WEB_URL.matcher(data.get (cardNumber));
        while (m.find()) {
            String url = m.group();
            talentURL = url;
        }
    }




}
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/musician_info_cardview"
    card_view:cardElevation="3.5sp"
    android:layout_margin="8dp"
    card_view:cardCornerRadius="4dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TextView
            android:id="@+id/pending_musician_info"
            android:textSize="25dp"
            android:paddingLeft="8dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />





    </LinearLayout>

</android.support.v7.widget.CardView>
E/AndroidRuntime: FATAL EXCEPTION: main
                  Process: org.codefordenver.encorelink, PID: 12123
                  java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
                      at org.codefordenver.encorelink.PendingMusicianInfoAdapter$ViewHolder.<init>(PendingMusicianInfoAdapter.java:41)
                      at org.codefordenver.encorelink.PendingMusicianInfoAdapter.onCreateViewHolder(PendingMusicianInfoAdapter.java:94)
                      at org.codefordenver.encorelink.PendingMusicianInfoAdapter.onCreateViewHolder(PendingMusicianInfoAdapter.java:16)
                      at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6493)
                      at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5680)
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5563)
                      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5559)
                      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2229)
                      at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1556)
                      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1516)
                      at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:608)
                      at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3693)
                      at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3410)
                      at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3962)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1767)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
                      at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                      at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
                      at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:869)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
                      at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
                      at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
                      at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
                      at com.android.internal.policy.DecorView.onLayout(DecorView.java:761)
                      at android.view.View.layout(View.java:19659)
                      at android.view.ViewGroup.layout(ViewGroup.java:6075)
                      at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2496)
                      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2212)
                      at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1392)
E/AndroidRuntime:     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6752)
                      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
                      at android.view.Choreographer.doCallbacks(Choreographer.java:723)
                      at android.view.Choreographer.doFrame(Choreographer.java:658)
                      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
                      at android.os.Handler.handleCallback(Handler.java:790)
                      at android.os.Handler.dispatchMessage(Handler.java:99)
                      at android.os.Looper.loop(Looper.java:164)
                      at android.app.ActivityThread.main(ActivityThread.java:6494)
                      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:807)