JSON错误加载

时间:2017-12-26 11:49:15

标签: java android

我正在尝试保存一个简单的名称并加载它 - 只是为了让一切都清楚自己 - 没有错误,但是当它加载时它会加载不同的东西。它与Android本身有关。

这是我保存和加载的类(我不使用任何库):

public class Serializer
{
private Context context;
private String fn;
public Serializer(Context con , String filename){
    this.context = con;
    this.fn = filename;
}
public void save(ArrayList<String> usernames) throws JSONException, IOException {
    JSONArray JsonArray = new JSONArray();
    JSONObject obj = new JSONObject();
    for(String s : usernames){
        obj.put("username" , s);
        JsonArray.put(obj);
    }
    Writer writer = null;
    OutputStream out = context.openFileOutput(fn , 0);
    writer = new OutputStreamWriter(out);
    writer.write(JsonArray.toString());
    if(writer != null){
        writer.close();
    }
}
public  ArrayList<String> load () throws IOException, JSONException {
    ArrayList<String > strings = new ArrayList<>();
    InputStream in = context.openFileInput(fn);
    InputStreamReader reader = new InputStreamReader(in);
    BufferedReader Reader = new BufferedReader(reader);
    StringBuilder builder = new StringBuilder();
    String Line;
    while((Line = Reader.readLine() ) != null){
        builder.append(Line);
    }
    JSONArray array = (JSONArray)new JSONTokener(builder.toString()).nextValue();
    for(int i = 0 ; i < array.length() ; i++){
        String jack = (String) array.getJSONObject(i).get("username");
        strings.add(jack);
    }
    if(reader!=null){
        reader.close();
    }
    return strings;
}
}

这是我的主要活动,其布局是一个带有一个TextEdit的简单布局:

public class MainActivity extends AppCompatActivity {
Serializer serializer;
ArrayList<String> usernames;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    serializer = new Serializer(this,"Jacop");
    TextView txtView = findViewById(R.id.txt);
    usernames = new ArrayList<>();
    usernames.add(txtView.toString());
    try {
        ArrayList<String> username = serializer.load();
        txtView.setText(username.get(0));
    } catch (IOException e) {
        e.printStackTrace();
    } catch (JSONException e) {
        e.printStackTrace();
    }
}
@Override
public void onResume(){
    super.onResume();
    try {
        serializer.save(usernames);
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

输出(例如,我关闭并重新打开应用程序后文本视图显示的内容)。

  

android.support.v7.widget.AppCompatEditText {73d0e9d VFED..CL。 ......一世。 0,0-0,0#7f07007b app:id / txt}

1 个答案:

答案 0 :(得分:1)

您正在添加Object字符串。

usernames.add(txtView.toString());

将其更改为

usernames.add(txtView.getText().toString());

toString() Object 类的方法,因此每个类都有它。 android.support.v7.widget.AppCompatEditText{73d0e9d VFED..CL. ......I. 0,0-0,0 #7f07007b app:id/txt}TextView对象的字符串表示形式。