-1

So I am creating an android application which opens the url entered by the user. Now each time an url is entered by the user, it needs to be save using the "save" button and the save list is seen using the "list" button. This is my Interface: enter image description here

This is my xml file:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/content_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.example.application.mota_app.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:text="@string/enter_the_url_below"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/enter_URL"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="26dp"
        android:textSize="19sp"
        android:textColor="@android:color/holo_green_dark" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/txtbox_website"
        android:layout_marginTop="18dp"
        android:width="300dp"
        android:inputType="textUri"
        android:layout_below="@+id/enter_URL"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_save"
        android:textColor="@color/colorAccent"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/visit"
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:id="@+id/btn_visit"
        android:textColor="@android:color/holo_blue_dark"
        android:onClick="open"
        android:layout_marginBottom="50dp"
        android:layout_alignBottom="@+id/btn_save"
        android:layout_centerHorizontal="true" />

    <Button
        android:text="@string/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_list"
        android:textColor="?android:attr/colorPressedHighlight"
        android:layout_below="@+id/btn_save"
        android:layout_alignLeft="@+id/btn_save"
        android:layout_alignStart="@+id/btn_save" />

</RelativeLayout>

So I am stuck in the save and list. I am using shared preferences, but I am not able to save and list the URLS. This is the code I wrote:

public class MainActivity extends AppCompatActivity {
    public static final String MY_EMP_PREFS = "MyPrefs";
    private EditText url;
    private Button save;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        url = (EditText)findViewById(R.id.txtbox_website);
        save = (Button)findViewById(R.id.btn_save);

    }

    public void open(View view){
        if (url.getText().toString().matches("")) {
            Toast.makeText(getApplicationContext(), "Enter a website to open!", Toast.LENGTH_SHORT).show();
            return;
        }
        if (!url.getText().toString().startsWith("http://") && !url.getText().toString().startsWith("https://"))
        {
            url.setText("http://" + url.getText().toString());

        }

        if (!Patterns.WEB_URL.matcher(url.getText().toString()).matches())
        {
            Toast.makeText(getApplicationContext(), "Invalid URL!", Toast.LENGTH_SHORT).show();
            url.setError("Enter a valid URL");
            url.setText("");
            url.setSelection(0);
            return;
        }

        Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url.getText().toString()));
        startActivity(browserIntent);
    }


    public void save(View view) {
        SharedPreferences pref = getSharedPreferences("MyPrefs", Context.MODE_PRIVATE);

        // We need an editor object to make changes
        SharedPreferences.Editor edit = pref.edit();

        // Set/Store data
        edit.putString("save", url.getText().toString());

        // Commit the changes
        edit.commit();
        Toast.makeText(getApplicationContext(), "URL Saved", Toast.LENGTH_SHORT).show();
    }

Where am I going wrong? What should I do?

Thanks

Jishan
  • 1,654
  • 4
  • 28
  • 62

1 Answers1

0

You have to add the method reference in your Widget:

 <Button
    android:text="@string/save"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/btn_save"
    android:onClick="save"   //HERE
    android:textColor="@color/colorAccent"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true" />

Also, when you use a SharedPreferences, you are putting a String value using the key "save". So when you click on save button, you are overriding the old value and put a new value in the place. To solve this issue, I think the best solution is use a Framework to persist the data and list it after.

edit.putString("save", url.getText().toString()); //here you are overriding the vlaue
Luiz Fernando Salvaterra
  • 4,192
  • 2
  • 24
  • 42