1

Can any one please tell me where to find a simple tutorial that shows how to make an Android application that connects to a external MySQL database, and report back some data?

The tutorials I found on the Internet are not exact - they dont work or the code is not complete.

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import android.widget.Toast;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

public class main extends Activity {
    /** Called when the activity is first created. */
    Button login;
    String name = "", pass = "";
    EditText username, password;
    TextView tv;
    byte[] data;
    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    InputStream inputStream;
    SharedPreferences app_preferences;
    List<NameValuePair> nameValuePairs;
    CheckBox check;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        app_preferences = PreferenceManager.getDefaultSharedPreferences(this);
        username = (EditText) findViewById(R.id.username);
        password = (EditText) findViewById(R.id.password);
        login = (Button) findViewById(R.id.login);
        check = (CheckBox) findViewById(R.id.check);

        String Str_user = app_preferences.getString("username", "0");
        String Str_pass = app_preferences.getString("password", "0");
        String Str_check = app_preferences.getString("checked", "no");
        if (Str_check.equals("yes")) {
            username.setText(Str_user);
            password.setText(Str_pass);
            check.setChecked(true);
        }

        login.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                name = username.getText().toString();
                pass = password.getText().toString();
                String Str_check2 = app_preferences.getString("checked", "no");
                if (Str_check2.equals("yes")) {
                    SharedPreferences.Editor editor = app_preferences.edit();
                    editor.putString("username", name);
                    editor.putString("password", pass);
                    editor.commit();
                }
                if (name.equals("") || pass.equals("")) {
                    Toast.makeText(main.this, "Blank Field..Please Enter",
                            Toast.LENGTH_LONG).show();
                } else {
                    try {
                        httpclient = new DefaultHttpClient();
                        httppost = new HttpPost(
                                "http://www.****.com/android/check.php");

                        // Add your data
                        nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("UserEmail",
                                name.trim()));
                        nameValuePairs.add(new BasicNameValuePair("Password",
                                pass.trim()));
                        httppost.setEntity(new UrlEncodedFormEntity(
                                nameValuePairs));

                        // Execute HTTP Post Request
                        response = httpclient.execute(httppost);
                        inputStream = response.getEntity().getContent();

                        data = new byte[256];

                        buffer = new StringBuffer();
                        int len = 0;
                        while (-1 != (len = inputStream.read(data))) {
                            buffer.append(new String(data, 0, len));
                        }

                        inputStream.close();
                    } catch (Exception e) {
                        Toast.makeText(main.this, "error" + e.toString(),
                                Toast.LENGTH_LONG).show();
                    }

                    if (buffer.charAt(0) == 'Y') {
                        Toast.makeText(main.this, "login successfull",
                                Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(main.this,
                                "Invalid Username or password",
                                Toast.LENGTH_LONG).show();
                    }
                }
            }
        });
        check.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on clicks, depending on whether it's now
                // checked
                SharedPreferences.Editor editor = app_preferences.edit();
                if (((CheckBox) v).isChecked()) {

                    editor.putString("checked", "yes");
                    editor.commit();
                } else {
                    editor.putString("checked", "no");
                    editor.commit();
                }
            }
        });
    }

    public void Move_to_next() {
        // startActivity(new Intent(this, zzz.class));
    }
}
Perception
  • 79,279
  • 19
  • 185
  • 195
MrJoshFisher
  • 1,143
  • 5
  • 21
  • 48
  • 1
    have a look at http://www.helloandroid.com/tutorials/connecting-mysql-database – ryanc1256 Aug 19 '12 at 10:46
  • also look at http://stackoverflow.com/questions/4707656/android-connecting-to-mysql-database – ryanc1256 Aug 19 '12 at 10:49
  • Also you can take a look at my ansewer : http://stackoverflow.com/questions/11955699/need-advice-talk-to-mysql-server-database-from-my-android-app/11962324#11962324 Let me know if you have any question. – Ali Aug 19 '12 at 10:51
  • do you want to connect to an online database? – Anoop Aug 19 '12 at 10:52
  • i have my own database running on my server at home – MrJoshFisher Aug 19 '12 at 11:10
  • Maybe off-topic but it's bad practice for several reasons to connect to an external database directly. Use something like a web service like RESTful or SOAP instead. ;-) – siebz0r Aug 19 '12 at 11:12
  • Also why is this question tagged with `php`? – siebz0r Aug 19 '12 at 11:13
  • true but this isnt for commercial use its just for practise and testing added my code in the main question now but im getting errors not sure why ? – MrJoshFisher Aug 19 '12 at 11:13
  • because i thought it was a good idea – MrJoshFisher Aug 19 '12 at 11:17
  • If this question has nothing to do with php, don't tag it with php. – siebz0r Aug 19 '12 at 11:33
  • maybe i want to tag it as php, does it bother you – MrJoshFisher Aug 19 '12 at 11:59
  • let us [continue this discussion in chat](http://chat.stackoverflow.com/rooms/15531/discussion-between-siebz0r-and-m0n5terbunny) – siebz0r Aug 19 '12 at 12:10
  • i dont wanna god its only a tag its not the end of the world – MrJoshFisher Aug 19 '12 at 12:37
  • also why am i getting these errors; – MrJoshFisher Aug 19 '12 at 13:19
  • 08-19 14:18:04.990: E/AndroidRuntime(19608): at java.lang.reflect.Method.invokeNative(Native Method) 08-19 14:18:04.990: E/AndroidRuntime(19608): at java.lang.reflect.Method.invoke(Method.java:511) 08-19 14:18:04.990: E/AndroidRuntime(19608): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993) 08-19 14:18:04.990: E/AndroidRuntime(19608): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760) 08-19 14:18:04.990: E/AndroidRuntime(19608): at dalvik.system.NativeStart.main(Native Method) – MrJoshFisher Aug 19 '12 at 13:20

1 Answers1

1

I couldn't easily find a fully described example. But heres where i would start.

  1. Look at content providers for managing your app data and accessing it and storing it for local use. The link below gives an extensive explanation of how content providers work. Though you don't have to use one.

http://www.satyakomatineni.com/akc/display?url=DisplayNoteIMPURL&reportId=2882&ownerUserId=satya

The android content provider example also shows this.

  1. On your server at home look at providing a rest full service layer for your app to request the information from. Rather than perhaps trying to directly access the database iteself. Discussed to some extent here on what to do (not specifically how to do it) https://groups.google.com/forum/?fromgroups#!topic/android-developers/rzV9tYpQZ5Y%5B1-25%5D

Afraid i don't have coded examples.

Emile
  • 11,451
  • 5
  • 50
  • 63