2017-05-17 40 views
0

我有Android Studio中稱爲MainActivity.java這個主要的Java文件:我不能使用類主要

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = MainActivity.class.getSimpleName(); 
    private RecyclerView recyclerView; 
    private LinearLayoutManager linearLayoutManager; 
    private RecyclerViewAdapter recyclerViewAdapter; 
    private EditText addTaskBox; 
    private DatabaseReference databaseReference; 
    private List<Task> allTask; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     allTask = new ArrayList<>(); 
     databaseReference = FirebaseDatabase.getInstance().getReference(); 
     addTaskBox = (EditText)findViewById(R.id.add_task_box); 
     recyclerView = (RecyclerView)findViewById(R.id.task_list); 
     linearLayoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(linearLayoutManager); 
     Button addTaskButton = (Button)findViewById(R.id.add_task_button); 
     assert addTaskButton != null; 
     addTaskButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       String enteredTask = addTaskBox.getText().toString(); 
       if(TextUtils.isEmpty(enteredTask)){ 
        Toast.makeText(MainActivity.this, "You must enter a task  first", Toast.LENGTH_LONG).show(); 
        return; 
       } 
       if(enteredTask.length() < 6){ 
        Toast.makeText(MainActivity.this, "Task count must be more than 6", Toast.LENGTH_LONG).show(); 
        return; 
       }else{ 
        Task taskObject = new Task(enteredTask); 
        databaseReference.push().setValue(taskObject); 
        addTaskBox.setText(""); 
       } 
      } 
     }); 
     databaseReference.addChildEventListener(new ChildEventListener() { 
      @Override 
      public void onChildAdded(DataSnapshot dataSnapshot, String s) { 
       getAllTask(dataSnapshot); 
      } 
      @Override 
      public void onChildChanged(DataSnapshot dataSnapshot, String s) { 
       getAllTask(dataSnapshot); 
      } 
      @Override 
      public void onChildRemoved(DataSnapshot dataSnapshot) { 
       taskDeletion(dataSnapshot); 
      } 
      @Override 
      public void onChildMoved(DataSnapshot dataSnapshot, String s) { 
      } 
      @Override 
      public void onCancelled(DatabaseError databaseError) { 
      } 
     }); 
    } 
    private void getAllTask(DataSnapshot dataSnapshot){ 
     for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){ 
      String taskTitle = singleSnapshot.getValue(String.class); 
      allTask.add(new Task(taskTitle)); 
      recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this, allTask); 
      recyclerView.setAdapter(recyclerViewAdapter); 
     } 
    } 
    private void taskDeletion(DataSnapshot dataSnapshot){ 
     for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()) { 
      String taskTitle = singleSnapshot.getValue(String.class); 
      for(int i = 0; i < allTask.size(); i++){ 
       if(allTask.get(i).getTask().equals(taskTitle)){ 
        allTask.remove(i); 
       } 
      } 
      Log.d(TAG, "Task tile " + taskTitle); 
      recyclerViewAdapter.notifyDataSetChanged(); 
      recyclerViewAdapter = new RecyclerViewAdapter(MainActivity.this, allTask); 
      recyclerView.setAdapter(recyclerViewAdapter); 
     } 
    } 
} 

並號召Task.java另一個類:

public class Task { 
    private String task; 
    public Task() {} 
    public Task(String task) { 
     this.task = task; 
    } 
    public String getTask() { 
     return task; 
    } 
} 

而且我收到這些錯誤:

Error:(53, 35) error: Task is abstract; cannot be instantiated

Error:(82, 25) error: Task is abstract; cannot be instantiated

Error:(91, 34) error: cannot find symbol method getTask()

爲什麼如果我正確使用類Task,會發生這種情況?

我該怎麼辦?

+4

看起來您的導入包含您實施的不同「Task」類型。 –

+0

我需要AppCompatActivity工具,我也不能導入和任務類也..我怎樣才能解決這個問題? –

回答

1

在MainActivity.java的頂部,您有一個import語句,該語句導入不是您編寫的類的Task類。你需要刪除那個import聲明才能使用你自己的類。如果你不這樣做,那麼當編譯器在你的代碼中看到Task時,它假定你是指你導入的那個,而不是與MainActivity.java相同的包中的那個。

+0

我還需要AppCompatActivity工具,我也不能導入和任務類也。我該如何解決這個問題? –

+0

只需導入AppCompatActivity,但不要導入任務。並且不要在您的進口報表中使用星號 - 它們可能會導致未來出現問題。 –