Android:从数组中删除空值:

时间:2012-05-02 04:11:05

标签: java android null arraylist

如何从数组中删除任何空值。

public class RecipeMethodActivity extends ListActivity {

Intent myIntent;
String value;
TextView editvalue;
TextView buttonPressed;
Intent intent;
String result = null;
InputStream is = null;
StringBuilder sb=null;
String result2 = null;



final Recipe[] mRecipesArray = {    new Recipe("PortalCake", new String[]{"GlaDOS' wit","Is a lie"}),
                                    new Recipe("EarthDestruction", new String[]{"Asteroid", "Kinetic energy"})};

public class Recipe{
    public String name;
    public String[] steps;

    Recipe(String name, String[] steps){
        this.name = name;
        this.steps = steps;
    }
}

public ArrayList<String> FetchRecipesRawArray(Recipe[] recipes){
    ArrayList<String> ret = new ArrayList<String>();
    for(int i=0;i<recipes.length;i++){
        if(!recipes[i].name.equals(value)){
            recipes[i].steps = null;
            Recipe[] tmp = new Recipe[recipes.length - 1];
            //int j = 0;
            //for (int k = 0; k < recipes.length; k++) {
            //    if (j != 1) {
            //        tmp[j++] = recipes[i];
            //    }
            //}
            recipes = tmp;
        } else {
            ret.add(recipes[i].name);
        }
    }
    return ret;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);   

    value = getIntent().getStringExtra("searchValue");

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FetchRecipesRawArray(mRecipesArray));
    setListAdapter(adapter); 

    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    try{
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://10.0.2.2/index.php");
                    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    is = entity.getContent();
                }catch(Exception e){
                    Log.e("log_tag", "Error in http connection"+e.toString());
                }
                //convert response to string
                try{
                    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
                    sb = new StringBuilder();
                    sb.append(reader.readLine() + "\n");
                    String line="0";
                    while ((line = reader.readLine()) != null) {
                        sb.append(line + "\n");
                    }
                    is.close();
                    result=sb.toString();
                    //Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
                }catch(Exception e){
                    Log.e("log_tag", "Error converting result "+e.toString());
                }
                //paring data
                String fd_name;
                try{
                    JSONArray jArray = new JSONArray(result);
                    JSONObject json_data=null;
                    for(int i=0;i<jArray.length();i++){
                        json_data = jArray.getJSONObject(i);
                        fd_name=json_data.getString("recipename");
                    }
                }catch(JSONException e1){
                    Toast.makeText(getBaseContext(), "No Food Found", Toast.LENGTH_LONG).show();
                }catch (ParseException e1){
                    e1.printStackTrace();
                }



}

protected void onListItemClick(ListView l, View v, int position, long id){
    Intent intent = new Intent(this, MethodActivity.class);
    intent.putExtra(MethodActivity.EXTRA_RECIPEARRAY, mRecipesArray[position].steps);
    startActivity(intent);

}
}

它会返回一个列表视图,当点击它时会带你到匹配的配方,但如果我要求Earth Detruction,我会得到门户蛋糕配方方法。

由于

1 个答案:

答案 0 :(得分:1)

这行代码是个问题

 intent.putExtra(MethodActivity.EXTRA_RECIPEARRAY, mRecipesArray[position].steps);

而不是使用mRecipesArray[position]使用ret.get(position).steps

并在ArrayList<Recipe> ret = new ArrayList<Recipe>();方法之外声明FetchRecipesRawArray(),以便可以在onListItemClick()方法中访问它。

还要修改FetchRecipesRawArray()

中的代码
else {
        ret.add(recipes[i]);
     }

希望这会对你有帮助..