簡體   English   中英

Android:從數組中刪除空值:

[英]Android: Remove null values from an array:

如何從數組中刪除任何空值。

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 Destruction,我將獲得Portal Cake配方方法。

謝謝

這行代碼是一個問題

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

代替使用mRecipesArray[position]使用ret.get(position).steps

並聲明ArrayList<Recipe> ret = new ArrayList<Recipe>(); FetchRecipesRawArray()方法外部,以便可以在onListItemClick()方法內部onListItemClick()進行訪問。

還可以在FetchRecipesRawArray()修改您的代碼

else {
        ret.add(recipes[i]);
     }

希望這個能對您有所幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM