0

我正在使用 The Complete Idiots Guide to Android App Development 来帮助我入门。我一直在努力阅读这本书,并且遇到了一个我不明白的问题。我正在创建一个搜索类以向应用程序添加搜索功能。我在 Eclipse 中遇到了多个错误,我最不理解的一个是“语法错误,插入“}”以完成 ClassBody”。我知道 Eclipse 告诉我关闭类主体,但它已关闭。只是没有告诉我关闭它。在它告诉我关闭它的下方,我有另一种输入方法。

这是整个班级的代码。

package com.recipesapp;
import java.util.ArrayList;
import android.app.ListActivity;
import android.app.SearchManager;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.widget.ListView;

public class RecipeSearch extends ListActivity{

    @Override

    public void onCreate(Bundle savedInstanceState){

        //super.onCreate(savedInstanceState);
        setContentView(R.layout.recipe_list);
        Intent intent = getIntent();
        if(Intent.ACTION_VIEW.equals(intent.getAction())){
            //A search suggestion was clicked
            Intent recipeIntent = new Intent(this, RecipeEntry.class);
            recipeIntent.setData( intent.getData() );
            startActivity(recipeIntent);
            finish();
        }
        else if(Intent.ACTION_SEARCH.equals(intent.getAction())){
            //The search was executed
            String query = intent.getStringExtra(SearchManager.QUERY);
            showRecipes(query);
        }
    }


    private static final ArrayList<String> _RecipeSearchResults = new ArrayList<String>();
    private ListView resultsView;

    private void showRecipes(query){
        SharedPreferences recipeNames = getSharedPreferences(MainMenu.RecipeNamesPref, RecipeEntry.MODE_WORLD_READABLE);
        String[] recipeList= recipeNames.getString(MainMenu.RecipeNamesPref, null).split(",");
        for(String recipe: recipeList){
            if(recipe.contains(query))
                ReicpeSearchResults.add(recipe);

            resultsView=(ListView) findViewById(android.R.id.list);
            resultsView.setAdapter(new ListViewAdapter(this));
            resultsView.setTextFilterEnabled(true);
            resultsView.setOnItemClickListener(this);
        }
    }
}   

我知道还有其他错误,但我无法弄清楚这一点。我已经通过并看到我有所有的大括号,打开和关闭。我不明白它为什么要放入第 35 行,即:

private ListView resultsView;

此外,它希望我也删除最后一个大括号。我将不胜感激任何帮助。

4

4 回答 4

2

这不是花括号的问题。您错过了方法参数的类型

方法参数应该有类型

改变这个

showRecipes(query)

showRecipes(String query)
于 2013-04-02T06:16:31.383 回答
0

您的方法 private void showRecipes(query)不包含数据类型,这就是它显示错误的原因。

如果您将其更改为这样的 private void showRecipes(String query)内容,它将停止显示}错误。

于 2013-04-02T06:21:32.063 回答
0

只需在 onCreate 函数之前移动以下行

private ListView resultsView;
于 2013-04-02T06:21:39.517 回答
0
private static final ArrayList<String> _RecipeSearchResults = new ArrayList<String>();
    private ListView resultsView;

上面提到的这两行实际上都应该出现OnCreate 在您实际编写它们的位置之前。在那个地方,每一行都应该在某个方法内。

@Override

    public void onCreate(Bundle savedInstanceState){

        //super.onCreate(savedInstanceState);
        setContentView(R.layout.recipe_list);
        Intent intent = getIntent();
        if(Intent.ACTION_VIEW.equals(intent.getAction())){
            //A search suggestion was clicked
            Intent recipeIntent = new Intent(this, RecipeEntry.class);
            recipeIntent.setData( intent.getData() );
            startActivity(recipeIntent);
            finish();
        }
        else if(Intent.ACTION_SEARCH.equals(intent.getAction())){
            //The search was executed
            String query = intent.getStringExtra(SearchManager.QUERY);
            showRecipes(query);
        }

在这种情况下,您应该在这里定义"query"参数的数据类型String

private void showRecipes(String query){
    SharedPreferences recipeNames = getSharedPreferences(MainMenu.RecipeNamesPref, RecipeEntry.MODE_WORLD_READABLE);
    String[] recipeList= recipeNames.getString(MainMenu.RecipeNamesPref, null).split(",");
    for(String recipe: recipeList){
        if(recipe.contains(query))
            ReicpeSearchResults.add(recipe);

        resultsView=(ListView) findViewById(android.R.id.list);
        resultsView.setAdapter(new ListViewAdapter(this));
        resultsView.setTextFilterEnabled(true);
        resultsView.setOnItemClickListener(this);
    }
}
于 2013-04-02T06:27:29.983 回答