Я пытаюсь получить объект stringBuilder для моего основного действия. Я проверяю мой json-файл или коды синтаксического анализа, они хорошо работают. Однако, когда я пытаюсь получить stringbuilder, он дал ошибку: Ресурс был получен при подключенной трассировке стека, но не был выпущен. См. Java.io.Closeable для получения информации об избежании утечки ресурсов. java.lang.Throwable: Явный метод прекращения 'закрыть' не называетсяКак передать строку в android без ошибки. Ресурс был получен при прикрепленной трассировке стека, но никогда не был выпущен.
код 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());} }
Есть ли решение?
Я не проверял это сам, но я предполагаю, что вы закрываете поток ввода/вывода в блок 'try'. Если возникает исключение, поток не закрывается. Вы должны попытаться добавить блок 'finally' и внутри него, напишите' is.close(); '. –
Почему ваш серверный класс расширяет Activity? – Gorcyn
getAssets хочет это @Gorcyn –