4

notifyDataSetChanged()と私はRecyclerViewに戻るボタンを押したときにエラーが発生しました。nullオブジェクト参照のRecyclerViewAdapter.notifyDataSetChanged()

MainActivity.java

class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    public List<Article> articleList; 
    public RecyclerView recyclerView; 
    public RecyclerViewAdapter adapter; 

    ArrayList<String> my_list = new ArrayList<String>(); 

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

     LinearLayoutManager layoutManager = new LinearLayoutManager(this); 
     recyclerView = (RecyclerView) findViewById(R.id.recyclerView); 

     initData(); 
     adapter = new RecyclerViewAdapter(articleList, MainActivity.this); 
     recyclerView.setAdapter(adapter); 
    } 

     private void initData() { 
     articleList = new ArrayList<>(); 
     queryArticle(); 
    } 

     public void saveArticle(String title, String desc) { 
     //ab is a instance for class Article_Bmob 
     ab.setTitle(title); 
     ab.setDesc(desc); 

     ab.save(new SaveListener<String>() { 
      @Override 
      public void done(String s, BmobException e) { 

       if(e == null) { 
       } else { 
        e.printStackTrace(); 
       } 

      } 
     }); 

    } 
} 

WriteArticle.java(エラーファイル)

public class WriteArticle extends AppCompatActivity { 
    MainActivity mainActivity; 

    private String art_title, art_desc; 
    private EditText edt_title, edt_desc; 

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

     edt_title = (EditText) findViewById(R.id.w_art_title); 
     edt_desc = (EditText) findViewById(R.id.w_art_desc); 
     Button btn_send = (Button) findViewById(R.id.send_article); 

     mainActivity = new MainActivity(); 

     btn_send.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       art_title = edt_title.getText().toString(); 
       art_desc = edt_desc.getText().toString(); 

       if (art_title.isEmpty()) { 
        Snackbar.make(view, "R.String.xxx", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } else if (art_desc.isEmpty()) { 
        Snackbar.make(view, "R.String.xxx", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } else { 
        mainActivity.saveArticle(art_title, art_desc); 
        mainActivity.adapter.notifyDataSetChanged(); 
        finish(); 
       } 

      } 
     }); 

    } 

とエラー:

java.lang.NullPointerException: Attempt to invoke virtual method 
'void com.myapplication.RecyclerViewAdapter.notifyDataSetChanged()' on a null object reference 
at com.myapplication.WriteArticle$1.onClick(WriteArticle.java:52) 

どのように私はこの問題を解決することができますこれは、コードのですか?

+1

としてそれを使用します'mainActivity = new MainActivity();'ここに –

+0

それではどうしたらいいですか? –

+1

mainActivity = new MainActivity();で何を達成したいですか?アクティビティを開きますか? –

答えて

3
あなたMainActivityで

public static MainActivity mactivity; 
public static MainActivity getinstance(){ 
    return mactivity; 
} 
あなたWriteArticleアクティビティで

MainActivity mainActivity; 

そして、あなたがそうであるようにあなたは、単にそのコンストラクタを呼び出すことでアクティビティを作成することはできません

mainActivity.getinstance.saveArticle(art_title, art_desc); 
mainActivity.getinstance.adapter.notifyDataSetChanged(); 
+0

これはうまくいくかもしれませんが、間違いなく推奨されています。アクティビティはOSによって殺される可能性がありますので、例外はまだ発生します。 –

+0

Thread.sleep(500) – user6657161

+0

これで半分の時間アプリがフリーズします。なぜそれが助けになるのですか? –

関連する問題