Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何创建json的字符串表示形式_Android_Json - Fatal编程技术网

Android 如何创建json的字符串表示形式

Android 如何创建json的字符串表示形式,android,json,Android,Json,嘿,各位朋友,我有一段代码,它将json保存为字符串表示形式,我在理解实体部分的工作原理方面仍然有点困难,需要知道如何更改代码以使其工作,这是我遇到的错误 Error saving string java.lang.NumberFormatException: unable to parse '[{"story_name":"Story One"},{"story_name":"Story Two"},{"story_name":"Story Three"},{"story_name":"Sto

嘿,各位朋友,我有一段代码,它将json保存为字符串表示形式,我在理解实体部分的工作原理方面仍然有点困难,需要知道如何更改代码以使其工作,这是我遇到的错误

Error saving string java.lang.NumberFormatException: unable to parse '[{"story_name":"Story One"},{"story_name":"Story Two"},{"story_name":"Story Three"},{"story_name":"Story Four"},{"story_name":"Story Five"},{"story_name":"Story Six"}]' as integer
昨晚我从某人那里得到了帮助,这几乎让我达到了目的,但是我仍然需要更多地了解它是如何工作的,我在这里得到的解析错误是我的全部代码

    public class MainActivity extends Activity {
String entityString = null;
String storyObj = "";
Object json = null;
HttpEntity entity = null;
InputStream is = null;
Integer responseInteger = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    //button that saves the file from mySQL
    Button save = (Button) findViewById(R.id.downloadBtn);
    save.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            saveJson();             
        }
    });

    //Button that opens the file from InternalMemory
    Button open = (Button) findViewById(R.id.showBtn);
    open.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            openJson();             
        }
    });


//end of onCreate() 
}


//saveJson pull a JSON file from mySQl server then saves that file in its JSON type eg .json
public void saveJson(){
    TextView test = (TextView) findViewById(R.id.showView);


    try{
        //connects to mySQL
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost("http://10.0.2.2/textures_story_list.php");
        HttpResponse response = client.execute(post);
        //captures the response
        entity = response.getEntity();
        InputStream entityStream = entity.getContent();
        StringBuilder entityStringBuilder = new StringBuilder();
        byte [] buffer = new byte[1024];
        int bytesReadCount;
        while ((bytesReadCount = entityStream.read(buffer)) > 0)  {
            entityStringBuilder.append(new String(buffer, 0, bytesReadCount));
        }
        entityString = entityStringBuilder.toString();
        responseInteger = Integer.valueOf(entityString);
    }catch(Exception e) {
         Log.e("log_tag", "Error in http connection "+e.toString());
    }
    try{
        //is = entity.getContent();
        String FILENAME = "story.json";
        //gives file name
        FileOutputStream output = openFileOutput(FILENAME, MODE_WORLD_READABLE);
        //creates new StreamWriter
        OutputStreamWriter writer = new OutputStreamWriter(output);
        //writes json with file name story.json
        writer.write(entityString);
        writer.flush();
        //closes writer
        writer.close();

    }catch(Exception e) {
         Log.e("log_tag", "Error saving string "+e.toString());
    }

//end of saveJson()
}

public void openJson(){
    TextView test = (TextView) findViewById(R.id.showView);



    try{
        FileInputStream fileInput = openFileInput("story.json");

        BufferedReader inputReader = new BufferedReader(new InputStreamReader(fileInput, "UTF-8"), 8);
        StringBuilder strBuilder = new StringBuilder();
            String line = null;
            while ((line = inputReader.readLine()) != null) {
                strBuilder.append(line + "\n");
            }
            fileInput.close();
            storyObj = strBuilder.toString();

    }catch(IOException e){
         Log.e("log_tag", "Error building string "+e.toString());
    }

    try{
        JSONArray jArray = new JSONArray(storyObj);
        String storyNames = "";
        for(int i = 0;i<jArray.length();i++){
            storyNames += jArray.getJSONObject(i).getString("story_name") +"\n";
        }
        test.setText(storyNames);

    }catch(JSONException e) {
         Log.e("log_tag", "Error returning string "+e.toString());
    }
    return;
//and of openJson() 
}




//end of class body    
}
公共类MainActivity扩展活动{
String entityString=null;
字符串storyObj=“”;
objectjson=null;
HttpEntity=null;
InputStream=null;
整数responseInteger=null;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//从mySQL保存文件的按钮
按钮保存=(按钮)findViewById(R.id.downloadBtn);
save.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
saveJson();
}
});
//从内存中打开文件的按钮
按钮打开=(按钮)findViewById(R.id.showBtn);
open.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
openJson();
}
});
//onCreate()的结束
}
//saveJson从mySQl服务器中提取一个JSON文件,然后将该文件保存为JSON类型,例如.JSON
公共void saveJson(){
TextView测试=(TextView)findViewById(R.id.showView);
试一试{
//连接到mySQL
HttpClient=new DefaultHttpClient();
HttpPost=新的HttpPost(“http://10.0.2.2/textures_story_list.php");
HttpResponse response=client.execute(post);
//捕获响应
entity=response.getEntity();
InputStream entityStream=entity.getContent();
StringBuilder entityStringBuilder=新建StringBuilder();
字节[]缓冲区=新字节[1024];
int字节读取计数;
而((bytesReadCount=entityStream.read(缓冲区))>0){
追加(新字符串(缓冲区,0,字节读取计数));
}
entityString=entityStringBuilder.toString();
responseInteger=Integer.valueOf(entityString);
}捕获(例外e){
e(“Log_标记”,“http连接错误”+e.toString());
}
试一试{
//is=entity.getContent();
字符串FILENAME=“story.json”;
//提供文件名
FileOutputStream输出=openFileOutput(文件名,模式世界可读);
//创建新的StreamWriter
OutputStreamWriter writer=新的OutputStreamWriter(输出);
//使用文件名story.json写入json
writer.write(entityString);
writer.flush();
//关闭编写器
writer.close();
}捕获(例外e){
Log.e(“Log_标记”,“错误保存字符串”+e.toString());
}
//saveJson()的结尾
}
public void openJson(){
TextView测试=(TextView)findViewById(R.id.showView);
试一试{
FileInputStreamFileInput=openFileInput(“story.json”);
BufferedReader inputReader=新的BufferedReader(新的InputStreamReader(fileInput,“UTF-8”),8);
StringBuilder strBuilder=新StringBuilder();
字符串行=null;
而((line=inputReader.readLine())!=null){
strBuilder.append(第+“\n”行);
}
fileInput.close();
StoryObjJ=strBuilder.toString();
}捕获(IOE异常){
e(“Log_标记”,“错误构建字符串”+e.toString());
}
试一试{
JSONArray jArray=新JSONArray(storyObj);
字符串storyNames=“”;

对于(inti=0;i你的问题是这条线

    responseInteger = Integer.valueOf(entityString);
entityString是

'[{"story_name":"Story One"},{"story_name":"Story Two"},{"story_name":"Story Three"},{"story_name":"Story Four"},{"story_name":"Story Five"},{"story_name":"Story Six"}]'

当Integer.valueOf尝试解析它时,它无法将其解析为整数,因此会抛出NumberFormatException。

我猜您的代码在以下几行失败:

responseInteger = Integer.valueOf(entityString);
经过一点检查,我发现您的JSON是:

[{"story_name":"Story One"},{"story_name":"Story Two"},{"story_name":"Story Three"},{"story_name":"Story Four"},{"story_name":"Story Five"},{"story_name":"Story Six"}]
仔细检查一下,我发现你的结构是这样的:

问题是

我在这个JSON中没有看到任何整数。您可能必须使用和的组合才能正确解析它。

示例JSON字符串:

{
      Stories: 
      [
          {
            "story_name": "Story One"
          },
          {
            "story_name": "Story Two"
          }

      ]
}
创建一个类:

public class Story
{
  public String stort_name;
}

class CollectionOfStories 
{
    public List<Story> Stories;
    public CollectionOfSections()
    {
        Stories= new ArrayList<Story>(); 
    }
}
公共类故事
{
公共字符串stort_name;
}
类别集合
{
公开故事列表;
公共集合部分()
{
故事=新的ArrayList();
}
}
最后:

private CollectionOfStories convertDataFromJSonToObject(String jsonString)
{
    JSONObject jso;     
    CollectionOfStories colStories = new CollectionOfStories();

    try 
    {
        jso = new JSONObject(jsonString);
        JSONArray ja = jso.getJSONArray("Stories");

        for (int i = 0; i < ja.length(); i++) 
        {
            Story s = new Story();
            JSONObject jsonSection = ja.getJSONObject(i);

            s.stort_name = jsonSection.getString("story_name");

           //add it to sections list
           colStories.Stories.add(s);
        }
    } 
    catch (NumberFormatException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (JSONException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return colStories;

}
private CollectionOfStories convertDataFromJSonToObject(字符串jsonString)
{
JSONObject jso;
CollectionOfStories colStories=新的CollectionOfStories();
尝试
{
jso=新的JSONObject(jsonString);
JSONArray ja=jso.getJSONArray(“故事”);
对于(int i=0;i
skaffman您编辑了什么?????查看编辑日志(和编辑差异)消息:edited tagsthanks那么我该如何修复它,以便它将值作为json数组存储到内部内存中,以便我以后可以调用它?最简单的方法可能只是执行新的JSONArray(entityString);,它将把它作为数组进行解析(就是这样的),然后您可以调用它所需的函数(即JavaDoc)。在我的sql中,我有一行story\u id如何更改我的php来添加它这里是我的php查询行$sql=mysql\u query(“从story\u列表中选择story\u name,其中story\u name像'sto%');iv on