2016-08-03 39 views
0

我正在製作一個非常簡單的Android應用程序,但是當我嘗試將它連接到網頁時,它不起作用。我已經在互聯網上嘗試了很多教程,我也已經閱讀了很多主題,但沒有取得任何成功。 所以,現在我將向您解釋我的代碼,希望我們能夠一起找到解決方案。現在謝謝你。Android和MySQL/PHP數據庫連接問題

這是主要的Java頁面,在這裏我就OnClick方法連接:

package com.example.enchan.crazyup; 

import android.database.Cursor; 
import android.os.PersistableBundle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MenuItem; 
import android.widget.Button; 
import android.view.View; 
import android.content.Intent; 
import android.widget.EditText; 
import android.widget.ImageView; 
import android.widget.TextView; 

import java.io.BufferedInputStream; 
import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.io.UnsupportedEncodingException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.net.URLEncoder; 
import java.util.List; 

import android.util.Log; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 

import java.net.URL; 

import android.view.Menu; 
import android.app.Activity; 
import android.widget.Toast; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class FollowUsActivity extends AppCompatActivity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_follow_us); 

     findViewById(R.id.subscribe).setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       EditText email = (EditText) findViewById(R.id.email); 
       String pkg = getPackageName(); 


       URL url_page = null; 

       try { 
        url_page = new URL("http://crazyup.altervista.org/select_email.php?email==" + email.getText().toString()); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } 

       try { 
        HttpURLConnection client = (HttpURLConnection) url_page.openConnection(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       }    Intent OpenNewEmailActivity = new Intent(FollowUsActivity.this, NewEmailActivity.class); 
       Intent intent = OpenNewEmailActivity.putExtra(pkg + "Test", email.getText().toString()); 
       startActivity(OpenNewEmailActivity); 
      } 
     }); 
    } 
} 

這是corrispondent .XML主文件:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    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" 
    android:background="@drawable/bg_follow_us" 
    tools:context="com.example.enchan.crazyup.FollowUsActivity"> 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/subscribe" 
     android:src="@drawable/iscriviti" 
     android:layout_marginBottom="41dp" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

    <EditText 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:inputType="textEmailAddress" 
     android:ems="10" 
     android:id="@+id/email" 
     android:layout_above="@+id/subscribe" 
     android:layout_centerHorizontal="true" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Indirizzo Email" 
     android:id="@+id/email_title" 
     android:layout_above="@+id/email" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

在清單中有這些權限:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

這個php頁面是這樣的(如果我在瀏覽器中打開它,它會起作用):

<?php 

mysql_connect("localhost","crazyup",""); 
mysql_select_db("my_crazyup"); 

$s_email = $_GET['email']; 
$string = "INSERT INTO email (content) VALUES ('".$s_email."')"; 
$q = mysql_query($string); 

if (!$q) { 
    die("Errore nella query: " . mysql_error()); 
} 

/* $q = mysql_query("SELECT * FROM email WHERE email =".$s_email); 
while($e = mysql_fetch_assoc($q)) 
     $output[] = $e; 
print(json_encode($output)); */ 

mysql_close(); 

?> 

我已閱讀,一個可能的問題可能是Android版本(棉花糖或棒棒糖),但我都試過,我有同樣的事情。 在logcat中沒有錯誤,所以我不明白爲什麼該應用程序無法正常工作。

+0

我從您的Java代碼中看到您沒有使用客戶端對象:是 一個原因?另外,指定「不起作用」:是否阻止某處? – ddb

+0

我不使用客戶端對象,因爲我找到的其他解決方案不起作用。當我說應用程序不起作用時,我的意思是沒有任何事情發生。沒有錯誤,但也有任何反應。我如何更改我的代碼以嘗試工作?謝謝。 PS。對不起我的英語不好,我是意大利人。 –

+0

是NewEmailActivity您創建的活動嗎?你的目標是讓用戶發送一封電子郵件,如果他點擊按鈕? – ddb

回答

0

把這個代碼在你onClick方法,我們將用戶Google Volley framework

// Instantiate the RequestQueue. 
RequestQueue queue = Volley.newRequestQueue(this); 
String url_page = "http://crazyup.altervista.org/select_email.php?email==" + email.getText().toString(); 

// Request a string response from the provided URL. 
StringRequest stringRequest = new StringRequest(Request.Method.GET, url_page, 
      new Response.Listener<String>() { 
    @Override 
    public void onResponse(String response) { 
     // Display the first 500 characters of the response string. 
     Log.i("stringRequest", response); 
    } 
}, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) { 
     Log.e("stringRequest", "FAILED" + error.getMessage()); 
    } 
}); 
// Add the request to the RequestQueue. 
queue.add(stringRequest); 

OLD ANSWER,使用一些過時的類

// Create http client object to send GET request to server 
HttpClient client = new DefaultHttpClient(); 

// Create URL string 
String url_page = "http://crazyup.altervista.org/select_email.php?email==" + email.getText().toString(); 

try 
{ 
    String response = ""; 
    // Create Request to server and get response 
    HttpGet httpGet = new HttpGet(url_page); 
    ResponseHandler<String> responseHandler = new BasicResponseHandler(); 

    // Execute request 
    response = Client.execute(httpGet, responseHandler); 

    // Log request's response 
    Log.i("httpGet", response); 
} 
catch(Exception ex) 
{ 
    Log.e("httpGet", "FAILED" + ex.getMessage()); 
    ex.printStackTrace(); 
} 

//starts new Activity 
Intent OpenNewEmailActivity = new Intent(FollowUsActivity.this, NewEmailActivity.class); 
Intent intent = OpenNewEmailActivity.putExtra(pkg + "Test", email.getText().toString()); 
startActivity(OpenNewEmailActivity); 

免責聲明:我使用的代碼在this link爲GET請求代碼

+0

謝謝你的回答。當我插入你的代碼Android Studio告訴我它不能解析HttpGet,但我可以用Alt + Enter導入任何東西。這個類不贊成嗎?因爲當我嘗試使用我在網上找到的其他示例時,這是我的一個問題。 –

+0

當然可用,用Alt + Enter導入所有內容 – ddb

+0

這就是說我可以用Alt + Enter在這種情況下創建一個新類,但是不需要導入任何內容。在其他情況下,例如Button或View等,我可以導入。我讀過HttpGet已被棄用,是嗎? –