2013-06-22 5 views
1

Он не обнаружил никаких ошибок. однако, когда я запускаю свое приложение, в моем списке нет результата. Я думаю, ошибка состоит в том, что я не использовал правильный способ выполнения оператора case. вот мой код.Каков правильный способ реализации оператора case case в Android? [SOLVED]

QuickSearch.java

package com.example.awesome; 

    import java.io.IOException; 
    import android.os.Bundle; 
    import android.app.Activity; 
    import android.content.Intent; 
    import android.database.SQLException; 
    import android.util.Log; 
    import android.view.Menu; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.widget.Button; 

    public class QuickSearch extends Activity implements OnClickListener { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

    //------------------------------------------------------------------------- 
      // Initiate database data  
       initiateDb(); 
    //--------------------------------------------------------------------------- 
      // Declaration of view 
       final Button qsfaculty, qscollege;   
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.quick_search); 

    //--------------------------------------------------------------------------- 
      // Get reference 
       qsfaculty = (Button) this.findViewById(R.id.button1); 
       qsfaculty.setOnClickListener(this); 
       qscollege = (Button) this.findViewById(R.id.button2); 
       qscollege.setOnClickListener(this); 
     }   
       public void onClick(View v) { 
        char ch = 0; 
         View qsfaculty = null; 
         View qscollege = null; 
         if(v == qsfaculty){ 
          ch = 'a'; 
         } 
         else if (v == qscollege) 
          {ch = 'b';} 
        Intent i = new Intent(this,SearchLocation.class); 
        i.putExtra("value",ch); 
        startActivity(i); 
        } 
    //--------------------------------------------------------------------------- 
    // Initiate database data 
     public void initiateDb() { 
      DatabaseHandler myDbHandler = new DatabaseHandler(this); 

      try { 
       myDbHandler.createDataBase(); 
      } 
      catch (IOException ioe) { 
       throw new Error("Unable to create database"); 
      } 

      try { 
       myDbHandler.openDataBase(); 
      } 
      catch(SQLException sqle) { 
       throw sqle; 
      } 
      Log.d("Initiate", "UKM Location Count: " + myDbHandler.getUkmLocationCount()); 
      myDbHandler.close(); 
     } 
     //------------------------------------------------------------------------------ 
     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.quick_search, menu); 
      return true; 
     } 

    } 

SearchLocation.java

package com.example.awesome; 

import java.util.ArrayList; 
import java.util.List; 
import android.os.Bundle; 
import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

public class SearchLocation extends ListActivity { 

    //------------------------------------------------------------------ 
     // Declaration 
     public static UkmLocation selectedPOI = null; 
     final DatabaseHandler db = new DatabaseHandler(this); 
     private EditText filterText = null; 
     ArrayAdapter<String> adapter = null; 
     final ArrayList<String> results = new ArrayList<String>(); 
     final ArrayList<String> results_id = new ArrayList<String>(); 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.search_location); 
      final Intent c = new Intent(SearchLocation.this, LocationDetail.class); 

//------------------------------------------------------------------ 
     // Link editText to layout item 
     filterText = (EditText) findViewById(R.id.search_box); 
     filterText.addTextChangedListener(filterTextWatcher); 

//------------------------------------------------------------------ 
     // Reading Poi     
    Log.d("Reading", "Reading all Kategori .."); 
    int value = 0; 
    switch(value) { 
     case 'a' : 
     List<UkmLocation> faculty = db.getCategoryFaculty(); 
     for(UkmLocation k : faculty) { 
        results.add(k.getName()); 
        results_id.add(k.getID()); 
     } 
     break; 
    case 'b' : 
     List<UkmLocation> college = db.getCategoryCollege(); 
     for(UkmLocation k : college) { 
      results.add(k.getName()); 
      results_id.add(k.getID()); 
     } 
     break; 
     } 


    //------------------------------------------------------------------ 
    // Set list arrayAdapter to adapter 
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.textView1,results);  
      setListAdapter(adapter); 

    //------------------------------------------------------------------ 
     // Set ListView from ListActivity 
      ListView lv = getListView(); 
      lv.setTextFilterEnabled(true); 

    //------------------------------------------------------------------ 
     // Set click event from listView 
      lv.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        // When clicked, show a toast with the TextView text 
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
         Toast.LENGTH_SHORT).show(); 

        Log.d("test", "position:" + position); 

        Log.d("test", "actualname:" + db.getUkmLocationByName(adapter.getItem(position)).getName());    

        // String poiID = results_id.get(position); 
        String poiID = db.getUkmLocationByName(adapter.getItem(position)).getID(); 
        setSelectedPoi(poiID); 
        startActivity(c); 
       } 
      });   
    } 

    private TextWatcher filterTextWatcher = new TextWatcher() { 

    public void afterTextChanged(Editable s) { 
      } 

    public void beforeTextChanged(CharSequence s, int start, int count, 
        int after) { 

      } 

      public void onTextChanged(CharSequence s, int start, int before, 
        int count) { 
       adapter.getFilter().filter(s); 
      }  
     }; 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      filterText.removeTextChangedListener(filterTextWatcher); 
     } 

     public UkmLocation getSelectedPoi() { 
      return selectedPOI; 
     } 

     public void setSelectedPoi(String poiID) { 
      selectedPOI = db.getUkmLocation(poiID); 
      Log.d("test2", "_id:" + db.getUkmLocation(poiID).getID()); 
      Log.d("test2", "Name:" + db.getUkmLocation(poiID).getName()); 
      // Closing db 
      db.close(); 
     } 
} 

я думаю, то, если другое заявление в QuickSearch.java уже правильно. проблема в заявлении оператора switch в SearchLocation.java , пожалуйста, помогите мне решить эту проблему.

ответ

0

здесь, я уже решить мою проблему ..

QuickSearch.java

public void onClick(View v) { 
       int ch = 0; 
        /*View qsfaculty = null; 
        View qscollege = null;*/ 
        if(v == qsfaculty){ 
         ch = '1'; 
        } 
        else if (v == qscollege) 
         {ch = '2';} 
       Intent i = new Intent(this,SearchLocation.class); 
       i.putExtra("value",ch); 
       startActivity(i); 
       } 

SearchLocation.java

Bundle extras = getIntent().getExtras(); 
       int value = extras.getInt("value"); 

       switch(value) { 
       case '1' : 
        List<UkmLocation> faculty = db.getCategoryFaculty(); 
        for(UkmLocation k : faculty) { 
         results.add(k.getName()); 
         results_id.add(k.getID()); 
        } 
        break; 
       case '2' : 
        List<UkmLocation> college = db.getCategoryCollege(); 
        for(UkmLocation k : college) { 
         results.add(k.getName()); 

    results_id.add(k.getID()); 
        } 
        break; 
       } 
+2

Почему вы назначаете литералы символов (''1'' и'' 2'') переменной 'int'? Я настоятельно рекомендую вам изменить «1» на «1». Еще лучше создайте ** константы **, которые дают имена и значения этим значениям. –

2
int value = 0; 
switch(value) { 

Вы устанавливаете значение, над которым вы переключитесь на 0, так что эквивалентно делать switch(0) {...

Узнайте, что это value должно быть и инициализирует его правильно.

Также value имеет тип int но ваш switch использует char с ('a', 'b'), так что вы должны либо иметь значение быть char и инициализирует его должным образом или иметь его быть int, отформатируйте ее правильно и изменить ваш switch случаи использования int s.

+0

спасибо за ур ответил. :) Я уже нашел решение. посмотрите на мое новое сообщение ниже – riehime23

0

Сначала вы делаете int value = 0;, поэтому значение равно 0. Таким образом, это не «a», не «b».

+0

спасибо за ваш ответ. :) Я уже нашел решение. посмотрите на мой новый пост здесь – riehime23

0

Вы должны получить значение от намерения, когда вы положите его в дополнение. i.putExtra("value",ch);

что-то вроде

char value; 
Bundle extras = getIntent().getExtras(); 
if (extras != null) { 
    value = extras.getIntgetChar("value"); 
} 
+0

спасибо за ваш ответ. :) Я уже нашел решение. посмотрите на мой новый пост здесь – riehime23