gpt4 book ai didi

java - 如何在android中传递字符串而不出错-在附加的堆栈跟踪处获取资源但从未释放-

转载 作者:行者123 更新时间:2023-12-02 05:02:43 24 4
gpt4 key购买 nike

我尝试将 stringBuilder 对象获取到我的主要 Activity 。我检查了我的 json 文件或解析代码,它们运行良好。但是,当我尝试获取 stringbuilder 时,出现错误: 在附加的堆栈跟踪中获取了资源,但从未释放。有关避免资源泄漏的信息,请参阅 java.io.Closeable。 java.lang.Throwable:未调用显式终止方法“close”

Server.java的代码如下

`

public class Server extends Activity {

static StringBuilder stringBuilder = new StringBuilder();
public Server(){
try {
JSONObject obj = new JSONObject(loadJSONFromAsset());
JSONArray project = obj.getJSONArray("project");

for (int i = 0; i < project.length(); i++) {
JSONObject ss = project.getJSONObject(i);
stringBuilder.append(ss.getString("title") + "\n");
JSONArray post = ss.getJSONArray("posts");

for(int j = 0; j < post.length();j++){
JSONObject posts = post.getJSONObject(j);
stringBuilder.append(posts.getString("id") +"\n");
JSONArray tag = posts.getJSONArray("tags");

for(int k = 0; k < tag.length();k++){
stringBuilder.append(tag.getString(k) +"\n");
}
}
}
}
catch (JSONException e) {
stringBuilder.append("error");
e.printStackTrace();
}

}

public String getString(){

return stringBuilder.toString();
}


public String loadJSONFromAsset() {
String json = null;
try {

InputStream is = getAssets().open("cat.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
is.close();
json = new String(buffer, "UTF-8");

} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}}

这是我的 MainActivity.java

public class MainActivity extends Activity  {


TextView jsonDataTextView;


@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

jsonDataTextView = (TextView) findViewById(R.id.textView);

Server s = new Server();
jsonDataTextView.setText(s.stringBuilder.toString());} }

有什么解决办法吗?

最佳答案

InputStream 可能不会在 loadJSONFromAsset 方法的 try block 中关闭,但它应该关闭。

public String loadJSONFromAsset() {
String json = null;
InputStream is = null;
try {
is = getAssets().open("cat.json");
int size = is.available();
byte[] buffer = new byte[size];
is.read(buffer);
json = new String(buffer, "UTF-8");
}
catch (IOException ex) {
ex.printStackTrace();
}
finally {
if (is != null) {
try {
is.close();
}
catch (IOException ex) {
// Do you want to handle this exception?
}
}
}
return json;
}

注意:在您的 Server 构造函数中,有些事情让我烦恼,在 catch block 中,您尝试将“错误”附加到您的 StringBuilder 中。你知道吗,这里的StringBuilder可能不为空。事实上,在 try block 中,在某个时刻出现问题之前,向其附加一些字符串的一次(或多次)尝试可能会起作用。

注释 2:作为非 Activity 的服务器

public class Server {

private Context mContext;
public Server(Context context) {
mContext = context;
...
}
...
public String loadJSONFromAsset() {
...
mContext.getAssets().open("cat.json");
}
}

然后在你的MainActivity中

Server s = new Server(this);

关于java - 如何在android中传递字符串而不出错-在附加的堆栈跟踪处获取资源但从未释放-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28090758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com