Autore Topic: Activity crasha quando provo a digitare la prima lettera  (Letto 825 volte)

Offline Carontes

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos u8150
Activity crasha quando provo a digitare la prima lettera
« il: 24 Dicembre 2011, 02:57:40 CET »
0
Salve, sto cercando di fare un app in cui c'è una casella di ricerca, ho scritto il codice, ma quando provo a digitare la prima lettera nell' AutoCompleteTextView, mi da un errore (java.lang.NullPointerException) senza specificare che tipo di errore l'ha causato.

Codice (Java): [Seleziona]
public class Search extends Activity{
AutoCompleteTextView acTV;
ListView lview;

String[] first = { "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",     "Nine", "Ten"};

String[] second = { "Uno", "Due", "Tre", "Quattro", "Cinque", "Sei", "Sette", "Otto",  "Nove", "Dieci"};
int textlength = 0;
ArrayList<String> first_sort = new ArrayList<String>();
ArrayList<String> second_sort = new ArrayList<String>();

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.mains);

acTV = (AutoCompleteTextView) findViewById(R.id.acTV);
lview = (ListView) findViewById(R.id.list);
lview.setAdapter(new MyCustomAdapter(first, second));

lview.setClickable(true);
lview.setOnItemClickListener(new OnItemClickListener() {  
public void onItemClick(AdapterView<?> adapter, View view, int position, long id){  

        Intent intent = new Intent(Search.this,Details.class);
        startActivity(intent);
    }
{
}});

lview.setTextFilterEnabled(true);
acTV.addTextChangedListener(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)
{

textlength = acTV.getText().length();
first_sort.clear();
second_sort.clear();
for (int i = 0; i < first.length; i++)
{
if (textlength <= first[i].length())
{
if (acTV.getText().toString().equalsIgnoreCase((String) first[i].subSequence(0, textlength)))
{
first_sort.add(first[i]);
second_sort.add(first[i]);
}
}
}

lview.setAdapter(new MyCustomAdapter (first_sort, second_sort));

}
});
}

class MyCustomAdapter extends BaseAdapter{

String[] data_first;
String[] data_second;

{

}

MyCustomAdapter(String[] first, String[] second){
data_first = first;
data_second = second;
}

MyCustomAdapter(ArrayList<String> first, ArrayList<String> second)
{
for(int i=0;i<first.size();i++)
{
data_first[i] = first.get(i);
data_second[i] = second.get(i);
}

}

public int getCount()
{
return data_first.length;
}

public String getItem(int position)
{
return null;
}

public long getItemId(int position)
{
return position;
}

public View getView(int position, View convertView, ViewGroup parent)
{

LayoutInflater inflater = getLayoutInflater();
View row;

row = inflater.inflate(R.layout.listitem_row, parent, false);

TextView textview = (TextView) row.findViewById(R.id.textView1);
TextView textview1 = (TextView) row.findViewById(R.id.textView2);

textview.setText(data_first[position]);
textview1.setText(data_second[position]);

return (row);

}
}
}

Questo è l'errore che mi da:

Codice: [Seleziona]
12-24 02:51:28.761: E/AndroidRuntime(15427): FATAL EXCEPTION: main
12-24 02:51:28.761: E/AndroidRuntime(15427): java.lang.NullPointerException
12-24 02:51:28.761: E/AndroidRuntime(15427):         at it.gogle.com.Search$MyCustomAdapter.<init>(Search.java:111)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at it.gogle.com.Search$2.onTextChanged(Search.java:85)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.widget.TextView.sendOnTextChanged(TextView.java:6240)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.widget.TextView.handleTextChanged(TextView.java:6281)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:6456)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.sendTextChange(SpannableStringBuilder.java:889)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:352)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.change(SpannableStringBuilder.java:269)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:432)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:409)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:28)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:583)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:174)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at com.android.internal.widget.EditableInputConnection.commitText(EditableInputConnection.java:120)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at com.android.internal.view.IInputConnectionWrapper.executeMessage(IInputConnectionWrapper.java:247)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at com.android.internal.view.IInputConnectionWrapper$MyHandler.handleMessage(IInputConnectionWrapper.java:73)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.os.Handler.dispatchMessage(Handler.java:99)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.os.Looper.loop(Looper.java:123)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at android.app.ActivityThread.main(ActivityThread.java:4627)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at java.lang.reflect.Method.invokeNative(Native Method)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at java.lang.reflect.Method.invoke(Method.java:521)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
12-24 02:51:28.761: E/AndroidRuntime(15427):         at dalvik.system.NativeStart.main(Native Method)

Qualcuno saprebbe gentilmente aiutarmi? Grazie mille.

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Activity crasha quando provo a digitare la prima lettera
« Risposta #1 il: 24 Dicembre 2011, 10:21:28 CET »
0
C'è qualcosa in onTextChanged che è NULL, presumibilmente alla riga 85.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Carontes

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos u8150
Re:Activity crasha quando provo a digitare la prima lettera
« Risposta #2 il: 24 Dicembre 2011, 13:19:00 CET »
0
Riga 85:
Codice (Java): [Seleziona]
lview.setAdapter(new MyCustomAdapter (first_sort, second_sort));. Che vuol dire che è null? Come si risolve?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Activity crasha quando provo a digitare la prima lettera
« Risposta #3 il: 24 Dicembre 2011, 16:48:31 CET »
0
Riga 85:
Codice (Java): [Seleziona]
lview.setAdapter(new MyCustomAdapter (first_sort, second_sort));. Che vuol dire che è null?

Beh, è un concetto generale dei linguaggi di programmazione quello del NULL. Quando ad esempio dichiari una variabile String, ma attaccato non c'è nessun oggetto string, la variabile è NULL, nel senso che non si riferisce a nessun oggetto esistente in memoria.

In generale quando usi variabili che si riferiscono ad oggetti complessi (escludo cioè int), c'è quasi sempre la possibilità che siano NULL, per cui prima di usarle in qualche espressione, si dovrebbe essere sicuri non siano NULL, per esempio if (mia_stringa!=null) stampa(mia_stringa);

Nel tuo codice in linea di principio potrebbe accadere qua:
Codice (Java): [Seleziona]
for(int i=0;i<first.size();i++)
{
data_first[i] = first.get(i);
data_second[i] = second.get(i);
}

dove nessuno ti assicura che second.get(i) esista, perchè il ciclo lo fai in base a first.size() che potrebbe essere maggiore di second.size().

NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline Carontes

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos u8150
Re:Activity crasha quando provo a digitare la prima lettera
« Risposta #4 il: 24 Dicembre 2011, 17:19:13 CET »
0
Mi daresti una mano a risolvere il problema scrivendo la parte mancante o dicendomi cosa dovrei fare? Non sono molto esperto con il linguaggio di programmazione. Grazie mille.

Offline Carontes

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos u8150
Re:Activity crasha quando provo a digitare la prima lettera
« Risposta #5 il: 26 Dicembre 2011, 23:41:29 CET »
0
Ho preso spunto da questo post http://android-helper.blogspot.com/2011/07/android-search-in-custom-listview.html?showComment=1324684325255#c535218314476375289 ed ho modificato delle parti a seconda delle mie esigenze. Nell'esempio però non ci sono due String[] ma una String[] ed un int[]. Il mio scopo è fare la ricerca nella listview basandomi solo sulla prima String[] la seconda mi serve solo come "abbellimento". Per caso la ricerca non funziona se si hanno due stringhe? Cosa posso mettere al posto della seconda stringa? Cosa sbaglio rispetto all'esempio del post sopra riportato? Grazie mille.