java - Android:从数组中删除空值:

标签 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);

}
}

它返回一个 ListView ,单击该 ListView 时应该会带您到匹配的食谱,但如果我要求 Earth Destruction,我会得到门户蛋糕食谱方法。

谢谢

最佳答案

这行代码有问题

 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]);
     }

希望对你有帮助

关于java - Android:从数组中删除空值:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407592/

相关文章:

java - 如何在运行 jar 文件时创建文本文件

java - JRebel 对应用程序(非 IDE)的支持意味着什么?

android - 双 SIM 卡手机的 getLine1Number() 返回什么?

mysql - C 中从 MySQL 获取 Strcpy 空值

java - Android Geocoder getFromLocationName 总是返回 null

android - 如何使用 MOSHI 将 un json 字符串解析为列表

java - 如何在android中的onMapReady()中获取onNavigationItemSelected()值

mysql - 检查 MySQL 中的 JSON 值是否为空?

php - 为什么null可以写成反斜杠?

java - ResultSet getArray 函数不起作用?