Jishan
Jishan

Reputation: 1684

Save and list contents in android

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 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:onClick="save"
        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:onClick="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>

This is the XML for the second Activity which will be opened when the list button is clicked:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">


    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/show"
        android:scrollbars="horizontal|vertical"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="63dp" />

    <TextView
        android:text="@string/list_of_saved_url_s"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="23dp"
        android:id="@+id/textView"
        android:textColor="@color/colorAccent"
        android:textSize="24sp" />

</RelativeLayout>

This is my main class:

public class MainActivity extends AppCompatActivity {
    private EditText url;
    private Button save;
    ArrayList<String> addArray = new ArrayList<String>();
    private Button list;
    private ListView show1;

    @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);
        list = (Button)findViewById(R.id.btn_list);
        show1 = (ListView)findViewById(R.id.show);
    }

    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) {
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String getInput = url.getText().toString();
                if(addArray.contains(getInput))
                {
                    Toast.makeText(getBaseContext(), "URL already added to the list!", Toast.LENGTH_LONG).show();

                }
                else if(getInput == null || getInput.trim().equals(""))
                {
                    Toast.makeText(getBaseContext(), "Input field is empty!", Toast.LENGTH_LONG).show();
                }
                else{
                    addArray.add(getInput);
                    ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, addArray);
                    show1.setAdapter(adapter);
                    ((EditText)findViewById(R.id.txtbox_website)).setText("");
                }
            }
        });


    }


    public void list(View view) {
        list.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent screen = new Intent(MainActivity.this, Activity2.class);
                startActivity(screen);
            }
        });
    }



    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }http://www.stackoverflow.com

        return super.onOptionsItemSelected(item);
    }
}

My save button and list button is not able to save and list the URLs entered by the user.

What should I add?

Thanks

Upvotes: 0

Views: 37

Answers (1)

Bipin Vayalu
Bipin Vayalu

Reputation: 3145

1) Not Saving:

Currently you are storing data statically inside your addArray object. Which gets cleared when you close app.

I think better to use persist data storage. So you can retrieve already stored websites when app re-launched. (Like browser manages history). Available storage options

2) Not showing list:

You need to pass your current list of urls (i.e. addArray variable) in bundle when starting Activity2 And read that list inside Activity2 onCreate. Find here.

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, addArray);
                    show1.setAdapter(adapter);

You don't need this list adapter inside your main activity, You need to create it inside Activity2 and set this adapter in your listview.

I hope it will help you fix your issues.

Upvotes: 1

Related Questions