我目前正在尝试从另一个类中的方法向ArrayList
对象添加值。
这是我为ArrayList
对象创建的类:
public class ArrayClass {
public static ArrayList<String> array = new ArrayList<>();
public static void add_val(String s){
array.add(s);
}
public static int get_size(){
return array.size();
}
public static String get_val(int i){
return array.get(i);
}
}
我试图编辑ArrayList
对象的另一个类:
ArrayClass fill = new ArrayClass();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_explore);
Response.Listener<String> responseListener4 = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
try {
JSONObject jsonResponse4 = new JSONObject(response);
boolean success = jsonResponse4.getBoolean("success");
if (success){
int l;
String filled;
int length4 = jsonResponse4.length();
for (l=0;l<length4;l++){
filled = jsonResponse4.getString(l+"");
fill.add_val(filled);
}
}else{
AlertDialog.Builder builder = new AlertDialog.Builder(ExploreActivity.this);
builder.setMessage("Could not retrieve restaurant tables filled")
.setNegativeButton("Retry", null)
.create()
.show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
FilledRequest filledRequest = new FilledRequest(responseListener4);
RequestQueue queue4 = Volley.newRequestQueue(ExploreActivity.this);
queue4.add(filledRequest);
如果您查看onResponse
方法,则可以看到尝试将jsonResponse
中的值添加到ArrayClass
对象中。但是,当我启动我的应用程序时,它不会将值添加到对象中。我习惯了python全局变量而不必处理java的语义,所以如果你能够了解需要做出哪些改变,我将非常感激。
答案 0 :(得分:2)
除了针对您遇到的问题的其他答案/解决方案之外,让我分享一种在Android中实施JSON解析的最佳和优化方式。
我建议您检查提供Java序列化/反序列化的GSON或Jackson库,这些库可以将Java对象转换为JSON并返回。
它确实提供了一些好处,其中一个主要好处是你不需要手动实现解析,并且在实现解析时错误的可能性更小,就像你在提及键&#34;成功&#34时可能会犯一个错误;或者&#34;成功&#34;或任何这样的愚蠢错误!
答案 1 :(得分:0)
首先,由于您的变量是静态的,并且方法也是静态的,因此您不必实例化该对象。你可以这样做:
ArrayClass.add_val("Hello");
但是如果你想实例化,那么你可以这样做:
public class ArrayClass {
private ArrayList<String> array;
public ArrayClass() {
array = new ArrayList<>();
}
public void add_val(String s){
array.add(s);
}
public int get_size(){
return array.size();
}
public String get_val(int i){
return array.get(i);
}
}
要确保填写值,可以像这样检查数组大小:
for (l=0;l<length4;l++){
filled = jsonResponse4.getString(l+"");
fill.add_val(filled);
}
Log.d("TEST", String.valueOf(fill.get_size());
答案 2 :(得分:0)
删除ArrayClass中所有static关键字的情况。静态方法是类级方法,即。在类本身上调用,而不是类的实例。
答案 3 :(得分:0)
您也可以尝试使用ArrayList:
首先在ArrayClass中进行一些更改。使用get and Set方法访问数组。
public class ArrayClass {
private ArrayList<String> array = new ArrayList<>();
public ArrayList<String> getArray() {
return array;
}
public void setArray(ArrayList<String> array) {
this.array = array;
}
}
您尝试编辑ArrayList的另一个类使用getArray和SetArray方法以及ArrayList的一些预定义方法,如下所示:
将数据存储在ArrayList:
中 for (l=0;l<length4;l++){
filled = jsonResponse4.getString(l+"");
fill.getArray().add(filled);
}
获取ArrayList的大小:
fill.getArray().size();
还可以存储另一个像
这样的ArrayListArrayList<String> tempArrayList = new ArrayList<String>();
tempArrayList.add("string 1");
tempArrayList.add("string 2");
tempArrayList.add("string 3");
tempArrayList.add("string 4");
fill.setArray(tempArrayList)