【问题标题】:errors when static and when not static (specific)静态和非静态时的错误(特定)
【发布时间】:2023-04-06 06:20:02
【问题描述】:

我知道标题没有说太多,但我有一个很难描述的非常具体的问题:

我正在使用 Android Studio 制作一个 android 应用程序,对于一个活动,我有一个列表,其中存储在 json 文件中的值将去往。

为了获取这些值,我使用了另一个带有 get() 方法的类,该方法返回数组列表中的值。问题是 IDE 说了两个相反的陈述:在活动类中它说 get() 方法必须是静态的,而在另一个类中它说 get() 方法不能是静态的。

这是代码:

CompanySelector.java(活动)

public class CompanySelector extends AppCompatActivity {
    ArrayList<String> companyList = CompanyStorage.get();
}

==> 这里它在 CompanyStorage.get() 中给出了一个错误,并说 get() 应该是静态的。

CompanyStorage.java(另一个类)

abstract class CompanyStorage extends Context {
    private ArrayList<String> companyList;

    protected CompanyStorage() throws JSONException {
        companyList = get();
    }


    ArrayList<String> get() throws JSONException {
        JSONObject companyData = new JSONObject();
        ArrayList<String> companyList = new ArrayList<>();

        // Open data.json and convert to JSONObject
        String json = OpenFileAsString("data.json");
        try {
            companyData = new JSONObject(json);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        // return json array as ArrayList
        if (companyData.getJSONArray("companies") != null) {
            for (int i=0;i<companyData.getJSONArray("companies").length();i++){
                companyList.add(companyData.getJSONArray("companies").getString(i));
            }
        }
        return companyList;
    }


    public String OpenFileAsString(String filename) {
        try {
            InputStream stream = getAssets().open( filename );
            int size = stream.available();

            byte[] bytes = new byte[size];
            stream.read(bytes);
            stream.close();

            return new String( bytes );

        } catch ( IOException e ) {
            Log.i("GuiFormData", "IOException: " + e.getMessage() );
        }
        return null;
    }

}

==> 这里说如果 get() 是静态的,OpenFileAsString() 也应该是静态的,但是它会报错,因为 getAssets() 不能在静态方法中。

有人知道我应该怎么做吗?我对 Java 和应用程序设计相当陌生。..

【问题讨论】:

标签: java android static static-methods


【解决方案1】:

尝试将 static 放在 get() 和 OpenFileAsString(String filename) 方法的标题中,并使用 context.getAssets() 而不是 getAssets()

【讨论】:

  • 好的,但是我该如何正确地创建一个新的上下文呢?
  • 你不创建它,你把它放到你方法的参数中——get(Context context)OpenFileAsString(Context context, String filename),然后你更新所有对这些方法的调用以传递上下文
  • 我现在已经尝试了很多,也是你所说的,但似乎没有任何效果。它一直告诉我 get() 应该是静态的...
  • 上面写着:Non Static method 'get(android.content.Context)' cannot be referenced from a static context.
  • 尝试将方法定义为静态 - 静态 get(Context context)
猜你喜欢
  • 1970-01-01
  • 2019-07-06
  • 2014-05-18
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2020-12-27
相关资源
最近更新 更多