2014-11-21 107 views
-2

概述;我需要从List创建一个json以存储在sqlLite数据库中。当我尝试创建json Eclipse时,我得到一个错误,即变量List必须是静态的。如果这个变量变为静态,我的应用程序显示不正确的结果,这不是一件好事。这是我创建JSON的类无法访问静态变量android

public class Soluzione { 
    public String durata; 
    public List<Corsa> corse; 

    public Soluzione() { 
     corse = new ArrayList<Corsa>(); 
    } 

    @Override 
    public String toString() { 
     StringBuilder str = new StringBuilder(); 

     for (Corsa corsa : corse) { 
      if (str.length() > 0) 
       str.append('\n'); 
      str.append(corsa.toString()); 
     } 

     return str.toString(); 
    } 
    public static JSONObject CreateJSon(List<Corsa> corse) 
    { 
     JSONObject jObj = new JSONObject(); 
     try 
     { 

      Corsa prima = Soluzione.corse.get(0); 
      Corsa ultima = Soluzione.corse.get(corse.size()-1); 

      jObj.put("oraPartenza", prima.oraPartenza); 
      jObj.put("oraArrivo", ultima.oraArrivo); 
      jObj.put("partenza", prima.partenza); 
      jObj.put("arrivo", ultima.arrivo); 

     } catch (Exception e) { e.printStackTrace(); } 

     return jObj; 
    } 
} 
+2

我很确定,如果你刚刚删除了'static'并且实际读取了'static'的含义并且意味着:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars,这将有所帮助。 html – EpicPandaForce 2014-11-21 15:03:26

+0

我知道这意味着什么,但大概一周我找不到解决方案!所以我在这里问。 – 2014-11-21 15:18:51

回答

0

它在您的字段corse和您的方法的参数之间不明确创建JSON。

不要让方法静态和删除参数

public JSONObject CreateJSon() 
    { 
     JSONObject jObj = new JSONObject(); 
     try 
     { 

      Corsa prima = Soluzione.corse.get(0); 
      Corsa ultima = Soluzione.corse.get(corse.size()-1); 

      jObj.put("oraPartenza", prima.oraPartenza); 
      jObj.put("oraArrivo", ultima.oraArrivo); 
      jObj.put("partenza", prima.partenza); 
      jObj.put("arrivo", ultima.arrivo); 

     } catch (Exception e) { e.printStackTrace(); } 

     return jObj; 
    } 

编辑:

,所以如果你想保持CreateJSon静,重命名参数名称,以避免歧义,则:

Soluzione soluzione = new Soluzione(); 
Soluzione.CreateJSon (soluzione.corse); 

或者你想删除静态属性,你可以删除参数,你可以这样做:

Soluzione soluzione = new Soluzione(); 
soluzione.CreateJSon(); 
+0

mmmh .... okok,但从sqLite?而且,我不能让静态因为改变我的结果在列表视图。 – 2014-11-21 15:18:22

+0

所以不要让它变成静态的。为什么你的方法需要是静态的?我编辑了我的答案以适合你的情况。 – 2014-11-21 15:19:37

+0

,因为数据库要求我将其设为静态。跟着我,如果我使静态科西嘉,我的结果在列表视图将全部相同。我将用10行相同的列表查看。这不是我想要的。 – 2014-11-21 15:22:04