【问题标题】:saving a string to internal memory then displaying it将字符串保存到内部存储器然后显示它
【发布时间】:2012-03-09 11:58:58
【问题描述】:

嘿,我有这段代码,当您单击第一个按钮时,它应该从 sql server 保存文件,然后在按下第二个按钮时显示它。第一个按钮似乎可以工作,但第二个按钮导致它崩溃这是我的代码

    public class MainActivity extends Activity {
/** Called when the activity is first created. */

String result = "";
InputStream is = null;

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


    Button saveFile = (Button) findViewById(R.id.downloadBtn);
    saveFile.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            returnJson();

        }
    });


    Button showFile = (Button) findViewById(R.id.showBtn);
    showFile.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            TextView showText = (TextView) findViewById(R.id.showView);


        String FILENAME = "Story_One";
        String showStoryNames = "";

        FileInputStream fis = null;
        try {
            fis = openFileInput(FILENAME);
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        try {
            fis.read(showStoryNames.getBytes());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            fis.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }




        }
    });

    //end of onCreate
}

public void returnJson(){


    try{
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://10.0.2.2/textures_story_list.php");

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e) {
        //one.setText("error3");
    }

    try{


        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"), 8);                      
        StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();

    }catch(Exception e) {
        //one.setText("error2");            
        }

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

        String FILENAME = "Story_One";
        String string = storyNames;

        FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
        fos.write(string.getBytes());
        fos.close();
        }
        }
    catch(JSONException e) {
        //one.setText("error1");
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
        return;

//end of returnJson()   
}



//end of method body
}

我需要有人告诉我为保存到内部而编写的代码是否正确,以及按钮 2 崩溃的原因。

好的,这就是我正在运行的代码

    public void returnJson(){

    TextView one = (TextView) findViewById(R.id.textView1);

    try{
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost("http://10.0.2.2/story_one.php");

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();

    }catch(Exception e) {
        one.setText("error3");
    }

    try{


        BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"), 8);                      
        StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            result = sb.toString();

    }catch(Exception e) {
        one.setText("error2");          
        }

    try{
        JSONArray jArray = new JSONArray(result);
        String storyNames = "";
        for(int i = 0;i<jArray.length();i++){
                storyNames += jArray.getJSONObject(i).getString("story_name") + "\n"; 
        }
        one.setText(storyNames);
    }
    catch(JSONException e) {
        one.setText("error1");
    }
        return;


//end of returnJson()   
}

所以谁能告诉我我不需要什么代码,我需要什么,把它放在哪里以便能够保存story_one.php的结果,以及是否可以将它保留为json,因为我稍后会转换它正在使用 story_one 文件

【问题讨论】:

  • 在崩溃时发布您的错误日志
  • 什么是错误/堆栈跟踪??
  • 如何发布错误日志?
  • 如果您只想存储单个字符串,可以使用 SharedPreferences

标签: android json memory save internal


【解决方案1】:

尝试以下代码将字符串写入文件。

try{

String text = "String that goes in the file"
FileOutputStream fOut = openFileOutput("filename.txt",MODE_WORLD_READABLE);
OutputStreamWriter osw = new OutputStreamWriter(fOut);
osw.write(text);
int len = text.length();
osw.flush();
osw.close();
}catch(IOException ioe){
} 

【讨论】:

  • 我有一个 SQL 数据库,其中包含一个以 json 格式输出的故事列表,当他们按下下载时,我希望将新故事保存在他们的手机上,以便可以通过我们的 java 类查看它
  • 所以如果您的代码可以保存,那么我如何显示该保存的文件
  • 可以在您的字符串中使用一些拆分器并将其保存在文件中,稍后您可以拆分字符串以填充列表。希望这对你有帮助
  • rakshi 我添加了用于从 mySQL 获取外部数据的代码
  • 稍后在应用程序中,当他们选择阅读该故事时,需要将 story_one 填充到文本视图中。所以基本上我的应用用户可以从 mySQL DB 中保存故事,选择将其保存到手机或 SD 卡,然后他们可以选择他们想要阅读的故事
【解决方案2】:

尝试使用此代码读取您之前保存的文件。

try{
    FileInputStream fIn = openFileInput("filename.txt");
    InputStreamReader isr = new InputStreamReader(fIn);
    char[] inputBuffer = new char[len];
    //len is the length of that saved string in the file

    isr.read(inputBuffer);

    String readString = new String(inputBuffer);
 }catch(IOException e){

    }

【讨论】:

  • 感谢 rakshi 这也适用于我从 story_one.php 中提取的 json 数据而不进行转换?
  • 所以要将它从 json 中转换出来,我会使用 readString 是我要转换的字符串吗?
  • iv 问了一个新问题,你能看看吗,上次链接是stackoverflow.com/questions/9370701/…
猜你喜欢
  • 2014-06-01
  • 2012-03-10
  • 2013-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 2012-03-16
相关资源
最近更新 更多