1

谁能告诉我在哪里可以找到一个简单的教程,该教程展示了如何制作一个连接到外部 MySQL 数据库的 Android 应用程序,并报告一些数据?

我在 Internet 上找到的教程并不准确 - 它们不起作用或代码不完整。

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));
    }
}
4

1 回答 1

1

我很难找到一个完整描述的例子。但这是我要开始的地方。

  1. 查看内容提供商来管理您的应用程序数据并访问它并将其存储以供本地使用。下面的链接对内容提供商的工作方式进行了广泛的解释。虽然你不必使用一个。

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

android 内容提供程序示例也显示了这一点。

  1. 在您家中的服务器上,为您的应用程序提供一个完整的服务层来请求信息。而不是试图直接访问数据库本身。在某种程度上讨论了该做什么(不是具体如何做)https://groups.google.com/forum/?fromgroups#!topic/android-developers/rzV9tYpQZ5Y%5B1-25%5D

恐怕我没有编码示例。

于 2012-08-19T12:50:32.433 回答