2016-08-03 37 views
0

Ich mache eine sehr einfache Android-App, aber wenn ich versuche, es mit einer Webseite zu verbinden, funktioniert es nicht. Ich habe bereits viele Tutorials im Internet ausprobiert und auch hier habe ich schon viele Themen gelesen, aber ohne Erfolg. So, jetzt werde ich Ihnen meinen Code erklären, in der Hoffnung, dass wir gemeinsam eine Lösung finden können. Danke für jetzt.Probleme mit Android und MySQL/PHP-Datenbankverbindung

Dies ist die wichtigste Java-Seite, wo ich die Verbindung auf der OnClick Methode machen:

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

Und das ist die corrispondent .xml Hauptdatei:

<?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> 

Im Manifest gibt es diese Berechtigungen:

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

Die pHP-Seite ist dies (und es funktioniert, wenn ich es auf Browser zu öffnen):

<?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(); 

?> 

Ich habe gelesen, dass ein wahrscheinlich Problem die Android-Version (Eibisch oder Lollipop) sein könnte, aber ich habe beide versucht, und ich habe die gleiche Sache. In der Logcat gibt es keine Fehler, so kann ich nicht verstehen, warum die App nicht funktioniert.

+0

Ich sehe aus Ihrem Java-Code, dass Sie das Client-Objekt nicht verwenden: ist da ein Grund? Geben Sie auch "nicht funktioniert" an: Blockiert es irgendwo? – ddb

+0

Ich benutze das Client-Objekt nicht, weil andere Lösungen, die ich gefunden habe, nicht funktionieren. Wenn ich sage, dass die App nicht funktioniert, meine ich, dass nichts passiert. Es gibt keine Fehler, aber auch jede Reaktion. Wie kann ich meinen Code ändern, um zu versuchen, ihn zu bearbeiten? Vielen Dank. Ps. Entschuldigung für mein schlechtes Englisch, ich bin Italiener. –

+0

ist NewEmailActivity eine Aktivität, die von Ihnen erstellt wurde? Ihr Ziel ist es, den Benutzer eine E-Mail senden, wenn er auf die Schaltfläche klicken? – ddb

Antwort

0

setzen diesen Code in Ihre onClick Methode, werden wir Benutzer 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); 

ALTE ANTWORT,

// 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); 

Haftungsausschluss einige veraltete Klassen: habe ich den Code in this link für den get Anfragecode

+0

Vielen Dank für Ihre Antwort. Wenn ich deinen Code Android Studio einfüge sag mir, dass es HttpGet nicht auflösen kann, aber ich kann alles mit Alt + Enter importieren. Ist diese Klasse veraltet? Weil es eines meiner Probleme ist, wenn ich versuche, andere Beispiele zu verwenden, die ich im Internet gefunden habe. –

+0

natürlich sind sie verfügbar, importieren alles mit Alt + Enter – ddb

+0

Es heißt, dass ich in diesem Fall eine neue Klasse mit Alt + Enter erstellen kann, aber ohne etwas importieren. In anderen Fällen, zum Beispiel Button oder View etc. kann ich importieren. Ich habe gelesen, dass HttpGet veraltet ist, ist es richtig? –