1

Когда приложение загружает это действие, оно перестает работать. Ниже мой код для основного действия, logcat и требуемого массива. Пожалуйста, помогите мне решить эту проблему. В этом случае, когда пользователь выбирает любой элемент из прядильника, то в соответствии с выбранным пунктом другой элемент списка загружает результаты.Приложение для Android прекращает работу

MainActivity:

Button cropPrice; 

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

     addListenerOnButton(); 
    } 

    public void addListenerOnButton(){ 

     final Context context = this; 

     cropPrice = (Button)findViewById(R.id.button1); 
     cropPrice.setOnClickListener(new OnClickListener(){ 

      public void onClick(View arg0){ 

       Intent intent = new Intent(context, CropPrice.class); 
       startActivity(intent); 
      } 
     }); 
    } 

CropPrice.java

public static String itemsa = "guj"; 

// List view 
private ListView lv; 
// Listview Adapter 
ArrayAdapter<String> adapter; 
// Search EditText 
EditText inputSearch; 
// ArrayList for Listview 
ArrayList<HashMap<String, String>> productList; 

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

    Spinner state = (Spinner) findViewById(R.id.spinner1); 

    String[] courses={"guj","con","raj"}; 
    ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,courses); 
    state.setAdapter(adapter1); 
    state.setOnItemSelectedListener(new OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> av, View v, 
       int position, long itemId) { 
      // TODO Auto-generated method stub 
      itemsa = av.getItemAtPosition(position).toString(); 
     int getRes2 = getResources().getIdentifier(itemsa, "array", getPackageName()); 
     final String products[] = getResources().getStringArray(getRes2); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      // TODO Auto-generated method stub 

     }}); 

    // Listview Data 
    // Intent intent = new Intent(); 
    // ((EditText)(findViewById(R.id.inputSearch))).setText(intent.getStringExtra("selected")); 
    //int id = Context.getResources().getIdentifier(itemsa, "array", 
      // context.getPackageName()); 

    //String products[] = context.getResources().getStringArray(id); 
    //final String products[] = getResources().getStringArray(R.array.guj); 
    //int resourceId = R.array.class.getField(Integer.parseInt(itemsa)); 
    //final String products[] = getResources().getStringArray(resourceId); 
    //int holderint = getResources().getIdentifier(itemsa, "Array", 
     //  this.getPackageName()); 

    // String[] products = getResources().getStringArray(holderint); 
    //String itemName = itemsa; 
    //String getRes = "R.array."+ itemName; 
    //final String products[] = getResources().getStringArray("getRes"); 
    lv = (ListView) findViewById(R.id.listView1); 
    // Adding items to listview 
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products); 
    lv.setAdapter(adapter); 
    lv.setVisibility(View.GONE); 

    inputSearch = (EditText) findViewById(R.id.inputSearch); 
    inputSearch.addTextChangedListener(new TextWatcher() { 
     @Override 
     public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
      // When user changed the Text 
      if(count == 0) 
      { 
       tl.setVisibility(View.GONE); 
      } 
      submitButton.setVisibility(View.GONE); 
      CropPrice.this.adapter.getFilter().filter(cs); 
      if(cs.length()== 0){ 
       lv.setVisibility(View.GONE); 
      }else{ 
      lv.setVisibility(View.VISIBLE); 
      lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
       @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
        inputSearch.setText((String) lv.getAdapter().getItem(position)); 
        cont = inputSearch.getText().toString(); 
        lv.setVisibility(View.GONE); 
        submitButton.setVisibility(View.VISIBLE); 
        tl.setVisibility(View.VISIBLE); 
        } }); 
      } 
     } 
     @Override 
     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
       int arg3) { 
      // TODO Auto-generated method stub 
     } 
     @Override 
     public void afterTextChanged(Editable arg0) { 
      // TODO Auto-generated method stub 
     } 
    }); 
} 

strings.xml

<string-array name="raj"> 
    <item >raja</item> 
    <item >rajb</item>   
</string-array> 
<string-array name="Countreis"> 
    <item >manish</item> 
    <item >India</item>   
</string-array> 
<string-array name="guj"> 
    <item >guja</item> 
    <item >gujb</item>   
</string-array> 

Logcat:

01-03 06:11:20.013: E/AndroidRuntime(2883): FATAL EXCEPTION: main 
01-03 06:11:20.013: E/AndroidRuntime(2883): Process: com.finaldbparse.finaldbparse, PID: 2883 
01-03 06:11:20.013: E/AndroidRuntime(2883): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.finaldbparse.finaldbparse/com.finaldbparse.finaldbparse.CropPrice}: java.lang.NullPointerException: storage == null 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread.access$800(ActivityThread.java:144) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.os.Handler.dispatchMessage(Handler.java:102) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.os.Looper.loop(Looper.java:135) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread.main(ActivityThread.java:5221) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at java.lang.reflect.Method.invoke(Native Method) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at java.lang.reflect.Method.invoke(Method.java:372) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
01-03 06:11:20.013: E/AndroidRuntime(2883): Caused by: java.lang.NullPointerException: storage == null 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at java.util.Arrays$ArrayList.<init>(Arrays.java:38) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at java.util.Arrays.asList(Arrays.java:155) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:141) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at com.finaldbparse.finaldbparse.CropPrice.onCreate(CropPrice.java:128) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.Activity.performCreate(Activity.java:5933) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 
01-03 06:11:20.013: E/AndroidRuntime(2883):  ... 10 more 
+1

Проблема в строке 144 (в com.finaldbparse.finaldbparse.CropPrice.onCreate (CropPrice.java:114)) НО ты только дал нам 95 строк кода ... хммм –

+0

еще блок находится в строке 144:} else {lv.setVisibility (View.VISIBLE); lv.setOnItemClickListener (....... –

ответ

0

, которого не инициализировать переменную itemsa изначально. измените строку так: инициализируйте по умолчанию какое-то значение.

public static String itemsa="guj"; 

изменить эти линии также:

String[] courses={"guj","con","raj"}; 

к

String[] courses={"raj","Countreis","guj"}; 

EDIT:

public static String itemsa = "guj"; 

    // List view 
    private ListView lv; 
    // Listview Adapter 
    ArrayAdapter<String> adapter; 
    // Search EditText 
    EditText inputSearch; 
    // ArrayList for Listview 
    ArrayList<HashMap<String, String>> productList; 

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

     Spinner state = (Spinner) findViewById(R.id.spinner1); 

     String[] courses={"guj","Countreis","raj"}; 
     ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,courses); 
     state.setAdapter(adapter1); 
     state.setOnItemSelectedListener(new OnItemSelectedListener() { 
      public void onItemSelected(AdapterView<?> av, View v, 
        int position, long itemId) { 
       // TODO Auto-generated method stub 
       itemsa = av.getItemAtPosition(position).toString(); 
      int getRes2 = getResources().getIdentifier(itemsa, "array", getPackageName()); 
      final String products[] = getResources().getStringArray(getRes2); 
      updateList(products); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       // TODO Auto-generated method stub 

      }}); 

     int getRes2 = getResources().getIdentifier(itemsa, "array", getPackageName()); 
     final String products[] = getResources().getStringArray(getRes2); 

     updateList(products); 
    } 

    private void updateList(String[] products) { 
     lv = (ListView) findViewById(R.id.listView1); 
     // Adding items to listview 
     adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products); 
     lv.setAdapter(adapter); 
     lv.setVisibility(View.GONE); 

     inputSearch = (EditText) findViewById(R.id.inputSearch); 
     inputSearch.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
       // When user changed the Text 
       if(count == 0) 
       { 
        tl.setVisibility(View.GONE); 
       } 
       submitButton.setVisibility(View.GONE); 
       CropPrice.this.adapter.getFilter().filter(cs); 
       if(cs.length()== 0){ 
        lv.setVisibility(View.GONE); 
       }else{ 
       lv.setVisibility(View.VISIBLE); 
       lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         inputSearch.setText((String) lv.getAdapter().getItem(position)); 
         cont = inputSearch.getText().toString(); 
         lv.setVisibility(View.GONE); 
         submitButton.setVisibility(View.VISIBLE); 
         tl.setVisibility(View.VISIBLE); 
         } }); 
       } 
      } 
      @Override 
      public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
        int arg3) { 
       // TODO Auto-generated method stub 
      } 
      @Override 
      public void afterTextChanged(Editable arg0) { 
       // TODO Auto-generated method stub 
      } 
     });  
    } 
+0

, когда я инициализирую переменную, тогда он загружает только массив guj, либо я выбираю guj или что-то еще из spinner, но только загружает массив guj, пожалуйста, помогите мне, что мне нужно do –

+0

обновить продукты [] также при изменении элемента spinner –

+0

и вызвать этот метод также, adapter.notifyDataSetChanged(); в методе OnItemSelectedListener(). –

3

java.lang.NullPointerException: имя нулевой

Поскольку getResources().getIdentifier выполнения, когда onCreate метод называется, но вы устанавливаете значение в itemsa на onItemSelected фильеры.

Так что вам нужно будет поставить нулевую проверку перед вызовом getResources().getIdentifier или инициализировать itemsa со значением некоторого умолчанию:

0

использовать try-catch блок для контроля ошибок Ли ке этого

try{ 
Spinner state = (Spinner) findViewById(R.id.spinner1); 

String[] courses={"guj","con","raj"}; 
ArrayAdapter<String> adapter1=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,courses); 
state.setAdapter(adapter1); 
state.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> av, View v, 
      int position, long itemId) { 
     // TODO Auto-generated method stub 
     itemsa = av.getItemAtPosition(position).toString(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 
     // TODO Auto-generated method stub 

    }}); 

    // Listview Data 
    // Intent intent = new Intent(); 
// ((EditText)(findViewById(R.id.inputSearch))).setText(intent.getStringExtra("selected")); 
//int id = Context.getResources().getIdentifier(itemsa, "array", 
     // context.getPackageName()); 

//String products[] = context.getResources().getStringArray(id); 
//final String products[] = getResources().getStringArray(R.array.guj); 
int getRes2 = getResources().getIdentifier(itemsa, "array", getPackageName()); 
final String products[] = getResources().getStringArray(getRes2); 
//int resourceId = R.array.class.getField(Integer.parseInt(itemsa)); 
//final String products[] = getResources().getStringArray(resourceId); 
//int holderint = getResources().getIdentifier(itemsa, "Array", 
    //  this.getPackageName()); 

// String[] products = getResources().getStringArray(holderint); 
//String itemName = itemsa; 
//String getRes = "R.array."+ itemName; 
//final String products[] = getResources().getStringArray("getRes"); 
lv = (ListView) findViewById(R.id.listView1); 
// Adding items to listview 
adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products); 
lv.setAdapter(adapter); 
lv.setVisibility(View.GONE); 

inputSearch = (EditText) findViewById(R.id.inputSearch); 
inputSearch.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
     // When user changed the Text 
     if(count == 0) 
     { 
      tl.setVisibility(View.GONE); 
     } 
     submitButton.setVisibility(View.GONE); 
     CropPrice.this.adapter.getFilter().filter(cs); 
     if(cs.length()== 0){ 
      lv.setVisibility(View.GONE); 
     }else{ 
     lv.setVisibility(View.VISIBLE); 
     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       inputSearch.setText((String) lv.getAdapter().getItem(position)); 
       cont = inputSearch.getText().toString(); 
       lv.setVisibility(View.GONE); 
       submitButton.setVisibility(View.VISIBLE); 
       tl.setVisibility(View.VISIBLE); 
       } }); 
     } 
    } 
    @Override 
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, 
      int arg3) { 
     // TODO Auto-generated method stub 
    } 
    @Override 
    public void afterTextChanged(Editable arg0) { 
     // TODO Auto-generated method stub 
    } 
}); 
}catch(Exception e){ 

//display e in toast 
Toast.makeText(context, ""+e, duration).show(); 
} 
Смежные вопросы