2016-09-24 2 views
1

Ich bin nur ein Anfänger in der Entwicklung von Android-Anwendungen, ich wollte meine Anwendung mit einem Server verbinden, damit ich Daten von MySQL bekommen konnte. Also habe ich versucht, den Login-Teil zuerst zu machen, aber ich habe ein paar Probleme. Mein Code funktioniert nicht zum Lesen von JSON. meine Codes sind wie folgt: LoginActivity (MainActivity):JSON-Daten aus PHP-Datei in Android-Anwendung lesen

package ir.naserpour.sportclub; 

import android.content.Context; 
import android.graphics.Typeface; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.Button; 
import android.widget.CheckBox; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.UnsupportedEncodingException; 

import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper; 

public class LoginActivity extends AppCompatActivity { 

    String link; 
    String response; 
     //get values 
     String username,password; 
     @Override 
     protected void attachBaseContext (Context newBase){ 
     super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); 
    } 
     @Override 
     protected void onCreate (Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 
      //define things 
      TextView menu = (TextView) findViewById(R.id.menu); 
      final EditText login_username = (EditText) findViewById(R.id.login_username); 
      final EditText login_password = (EditText) findViewById(R.id.login_password); 
      Button login_login = (Button) findViewById(R.id.login_login); 
      Button login_register = (Button)findViewById(R.id.login_register); 
      CheckBox rememberme = (CheckBox)findViewById(R.id.login_remeberme); 


     //set icon type face 
     Typeface fonticon = Typeface.createFromAsset(getAssets(), "fonts/icon.ttf"); 
     menu.setTypeface(fonticon); 

     login_login.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       username = login_username.getText().toString(); 
       password = login_password.getText().toString(); 
       //check values 
       if (username.length() <1 || password.length() < 1) { 
        Toast.makeText(getApplicationContext(), "fields cannot be empty", Toast.LENGTH_SHORT).show(); 
       } else { 
        //generate link 
        link = "http://localhost:8080/login.php?username="+username+"&password="+password; 
        login(); 
        if(response=="true"){ 
         Toast.makeText(getApplicationContext(), "true", Toast.LENGTH_SHORT).show(); 
        }else if(response=="false"){ 
         Toast.makeText(getApplicationContext(), "false", Toast.LENGTH_SHORT).show(); 
        }else{ 
         Toast.makeText(getApplicationContext(), "response", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      } 
     }); 


    } 

     @Override 
     protected void onPause() { 
     super.onPause(); 
     finish(); 
    } 

    public String login() { 

     new JSONParse().execute(); 
     return response; 
    } 

    public class JSONParse extends AsyncTask<String, String, JSONObject> { 


     @Override 
     public void onPreExecute() { 
      super.onPreExecute(); 
      Toast.makeText(getApplicationContext(),"getting data ...",Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public JSONObject doInBackground(String... args) { 
      JSONParser jParser = new JSONParser(); 
      // Getting JSON from URL 
      JSONObject json = jParser.getJSONFromUrl(link); 
      return json; 
     } 

     @Override 
     public void onPostExecute(JSONObject json) { 
      try { 
       JSONArray result = json.getJSONArray("result"); 
       JSONObject c = result.getJSONObject(0); 
       try { 
        String res = new String(c.getString("response").getBytes("ISO-8859-1"), "UTF-8"); 
        response = res; 
       } catch (UnsupportedEncodingException e) { 
        e.printStackTrace(); 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
} 

JSONParser.java:

package ir.naserpour.sportclub; 

import android.util.Log; 

import org.apache.http.HttpEntity; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.UnsupportedEncodingException; 

/** 
* Created by Mohammad Naserpour on 9/22/2016. 
*/ 
public class JSONParser { 
    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 
    // constructor 
    public JSONParser() { 
    } 
    public JSONObject getJSONFromUrl(String url) { 
     // Making HTTP request 
     try { 
      // defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      HttpResponse httpResponse = httpClient.execute(httppost); 
      HttpEntity httpEntity = httpResponse.getEntity(); 
      is = httpEntity.getContent(); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 
     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 
     // return JSON String 
     return jObj; 
    } 
} 

und mein login.php Skript auch:

<?php 
define("HOST","localhost"); 
define("USERNAME","root"); 
define("PASSWORD",""); 
define("NAME","users"); 

$con = mysqli_connect(HOST,USERNAME,PASSWORD,NAME); 

$username = $_GET["username"]; 
$password = $_GET["password"]; 

$sql = "SELECT * FROM userinfo WHERE username ='$username' AND password='$password'"; 

$check = mysqli_fetch_array(mysqli_query($con,$sql)); 


if(isset($check)){ 
echo '{"result":[{"response":"true"}]}'; 
}else{ 
echo '{"result":[{"response":"false"}]}'; 
} 

mysqli_close($con); 

?> 

i wäre so glücklich, wenn ich das Problem finde. Danke.

+0

Was genau funktioniert nicht in Ihrer Lösung? Hast du versucht, deinen Code zu debuggen? – Egor

+0

@Egor wissen Sie, wie ich sagte, ich bin nur ein Basic. ehrlich gesagt, nein, ich habe es nicht getan, aber ich werde das nächste Mal tun, bevor ich frage. –

Antwort

0

Erste Verwendung: Auf Geräteseite, Verwenden Volley, ihren einfache und leicht

Zweitens zu verwenden: Auf Server, was {"result":[{"response":"true"}]} ist

jedes Problem mit {"result":true} ??

Last but not least: Haben Sie JSON schon benutzt oder ist dieser Code ein Versuch und eine Error Copy Paste aus einigen Tutorials?

+0

Ich versuchte die zweite (Ergebnis: True), aber ich habe keine Antworten, ich habe versucht, diese mit einem JSON-Array. last one: es gab keine Notwendigkeit für Json encode, also schreibe ich es einfach selbst. Ich habe etwas falsch gemacht? –

+0

vor allem, verwenden Sie nicht jsonarray für einzelne Antwort. dann wird Ihre Antwort entscheiden, wie Sie es auf Ihrem Gerät erhalten. Wenn Sie JSON als Zeichenfolge übergeben, müssen Sie die Zeichenfolge auf dem Gerät analysieren. Wenn Sie das Objekt als JSON senden, können Sie es direkt auf dem Gerät empfangen. Letzteres wird jedoch vorgeschlagen. –