他们的代码是android中的问题。变量用户总是返回值NULL Actualy这个类适用于我的主页,它允许连接到用户帐户。
我的问题就像我说的那样是变量用户。 Actualy这个变量有一个空值然后它会改变。 顺便说一句,如果我在使用英语沟通问题方面遇到麻烦,我很抱歉,这不是我的母语:)
package com.medbac.exemple.activity;
import java.util.Calendar;
import java.util.Locale;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.medbac.exemple.download.ServiceHandler;
import com.medbac.exemple.model.User;
public class AcceuilFragment extends Fragment implements OnClickListener {
private ProgressDialog pDialog;
// URL
//private static String url = "http://infraction-routier-json.esy.es/user_eber.php?";
private static String url = "http://mf-json-app-inf.esy.es/user_hber.php?";
private static String url_param = "";
// c
private static final String TAG_TAB = "user";
//private static final String TAG_DTYPE = "DTYPE";
private static final String TAG_CIN = "CIN";
private static final String TAG_DTYPE = "DTYPE";
private static final String TAG_PWD = "PWD";
private static final String TAG_PRENOM = "PRENOM";
private static final String TAG_MAIL = "MAIL";
private static final String TAG_DATE = "DATE";
private static final String TAG_NOM = "NOM";
private static final String TAG_LOGIN = "LOGIN";
private static final String TAG_ADR="ADR";
//private static final String TAG_GRADE = "grade";
public static User user = null;
public static boolean payment;
Button btn_login, btn_sign_up;
EditText edit_login, edit_sign_up;
View rootView;
TextView txt_consult, txt_payment, dateAuj;
// tableau json
JSONArray userJSON = null;
public AcceuilFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_acceuil, container, false);
Calendar newCalendar = Calendar.getInstance();
String date = newCalendar.get(Calendar.DAY_OF_MONTH)+"-" +newCalendar.get(Calendar.MONTH)+"-"+ newCalendar.get(Calendar.YEAR);
//sCalendar = Calendar.getInstance();
String dayLongName = newCalendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
dateAuj = (TextView) rootView.findViewById(R.id.dateJ);
dateAuj.setText(dayLongName+" "+date);
TextView txtAutho = (TextView) rootView.findViewById(R.id.txt_autho);
String chAutho = getResources().getString(R.string.se_connecter);
txtAutho.setText(Html.fromHtml(chAutho));
txt_consult = (TextView) rootView.findViewById(R.id.txt_consultation);
String chCons = getResources().getString(R.string.mes_inf);
txt_consult.setText(Html.fromHtml(chCons));
txt_consult.setOnClickListener(this);
txt_payment = (TextView) rootView.findViewById(R.id.txt_payment);
String chPay = getResources().getString(R.string.mes_amen);
txt_payment.setText(Html.fromHtml(chPay));
txt_payment.setOnClickListener(this);
btn_login = (Button) rootView.findViewById(R.id.btn_log_in);
btn_sign_up = (Button) rootView.findViewById(R.id.btn_sign_up);
btn_login.setOnClickListener(this);
btn_sign_up.setOnClickListener(this);
edit_login = (EditText) rootView.findViewById(R.id.edit_login);
edit_sign_up = (EditText) rootView.findViewById(R.id.edit_mp);
return rootView;
}
private class GetUser extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
/*
* Cette fonction contiendra le code exécuté au préalable, par exemple:
* -Affichage d'une ProgressBar
* =rond qui tourne pour indiquer une attente
* =Barre de progression
* -...
*/
pDialog = new ProgressDialog(getActivity());
pDialog.setMessage("chargement... ");
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
/*
* Ici, le code qui doit être exécuté dans l'AsyncTask, par exemple:
* -Une requête de base de données
* -Un appel à un Web Service
* -...
*/
// service handler : parse
ServiceHandler sh = new ServiceHandler();
// get response
String jsonStr = sh.makeServiceCall(url_param, ServiceHandler.GET);
Log.d("Response: user", "> " + jsonStr);
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// Get JSON Array
userJSON = jsonObj.getJSONArray(TAG_TAB);
for (int i = 0; i < userJSON.length(); i++) {
JSONObject c = userJSON.getJSONObject(i);
String cin = c.getString(TAG_CIN);
String dtype = c.getString(TAG_DTYPE);
String pwd = c.getString(TAG_PWD);
String prenom = c.getString(TAG_PRENOM);
String mail = c.getString(TAG_MAIL);
String date = c.getString(TAG_DATE);
String nom = c.getString(TAG_NOM);
String login = c.getString(TAG_LOGIN);
String adr = c.getString(TAG_ADR);
user = new User(cin, dtype, pwd, prenom, mail, date, nom, login,adr);
getActivity().invalidateOptionsMenu();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
/*
* Ici, le code exécuté une fois le traitement terminé, par exemple:
* -Mise à jour de l'affichage
* -Affichage d'une pop-up indiquant la fin du traitement
* -Désactivation de la ProgressBar
* -...
*/
// Désactivation de la ProgressBar
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
if(user == null){
Toast.makeText(getActivity(), "ereur", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getActivity(), "valide", Toast.LENGTH_SHORT).show();
rootView.findViewById(R.id.identifiant).setVisibility(View.GONE);
}
}
}
@Override
public void onClick(View v) {
if(v.getId() == btn_login.getId()){
url_param = url +"LOGIN="+edit_login.getText().toString()+"&PWD="+edit_sign_up.getText().toString();
edit_login.setText("");
edit_sign_up.setText("");
Log.e("url", url_param);
new GetUser().execute();
}else if (v.getId() == btn_sign_up.getId()){
Intent i = new Intent(getActivity(), Inscription.class);
startActivity(i);
}else if (v.getId() == txt_consult.getId()){
Fragment fragment = new MesInfractionFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
(TabBarMenu.mDrawerList).setItemChecked(1, true);
(TabBarMenu.mDrawerList).setSelection(1);
getActivity().getActionBar().setTitle("Mes Infractions");
payment = false;
//Toast.makeText(getActivity(), "consult cliced", Toast.LENGTH_SHORT).show();
}else if (v.getId() == txt_payment.getId()){
if(user == null){
Toast.makeText(getActivity(), "il faut inscrire d'abaure", Toast.LENGTH_SHORT).show();
}else {
Fragment fragment = new MesInfractionFragment();
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
(TabBarMenu.mDrawerList).setItemChecked(1, true);
(TabBarMenu.mDrawerList).setSelection(1);
getActivity().getActionBar().setTitle("Mes Infractions");
payment = true;
}
}
}
}
package com.medbac.exemple.model;
public class User {
//"cin":"22","login":"rr","password":"rr","nom":"rr","prenom":"rr",
//"grade":"2","matricule_fiscal":"rr","num_carte_sejour":"2","num_tel":"888","dtype":"r"
//public String d_type;
public String cin;
public String dtype;
public String pwd;
public String prenom;
public String mail;
public String date;
public String nom;
public String login;
public String adr;
//public String grade;
public User (String cin, String dtype, String pwd, String prenom, String mail,String date,
String nom, String login, String adr){
this.cin = cin;
this.dtype = dtype;
this.pwd = pwd;
this.prenom = prenom;
this.mail = mail;
this.date = date;
this.nom = nom;
this.login = login;
this.adr=adr;
}
}
05-29 01:01:17.616: I/Timeline(26616): Timeline: Activity_idle id: android.os.BinderProxy@219ada3c time:28441294
05-29 01:01:17.616: V/ActivityThread(26616): updateVisibility : ActivityRecord{5022dc9 token=android.os.BinderProxy@219ada3c {com.medbac.exemple.activity/com.medbac.exemple.activity.TabBarMenu}} show : true
05-29 01:01:18.651: I/Timeline(26616): Timeline: Activity_idle id: android.os.BinderProxy@219ada3c time:28442332
05-29 01:03:18.096: V/ActivityThread(26616): updateVisibility : ActivityRecord{5022dc9 token=android.os.BinderProxy@219ada3c {com.medbac.exemple.activity/com.medbac.exemple.activity.TabBarMenu}} show : true
05-29 01:03:18.231: W/IInputConnectionWrapper(26616): getTextBeforeCursor on inactive InputConnection
05-29 01:03:18.241: W/IInputConnectionWrapper(26616): getCursorCapsMode on inactive InputConnection
05-29 01:03:18.271: W/IInputConnectionWrapper(26616): getCursorCapsMode on inactive InputConnection
05-29 01:03:18.436: W/IInputConnectionWrapper(26616): getTextBeforeCursor on inactive InputConnection
05-29 01:03:18.436: W/IInputConnectionWrapper(26616): getSelectedText on inactive InputConnection
05-29 01:03:18.436: W/IInputConnectionWrapper(26616): getTextAfterCursor on inactive InputConnection
05-29 01:04:35.561: I/Timeline(26616): Timeline: Activity_idle id: android.os.BinderProxy@219ada3c time:28639242
05-29 01:04:36.651: D/ViewRootImpl(26616): ViewPostImeInputStage ACTION_DOWN
05-29 01:04:38.801: D/ViewRootImpl(26616): ViewPostImeInputStage ACTION_DOWN
05-29 01:04:43.561: D/ViewRootImpl(26616): ViewPostImeInputStage ACTION_DOWN
05-29 01:04:43.616: E/url(26616): http://mf-json-app-inf.esy.es/user_hber.php?LOGIN=ss&PWD=ss
05-29 01:04:43.686: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.691: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.691: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.691: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.716: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
05-29 01:04:43.716: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
05-29 01:04:43.721: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.721: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.736: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
05-29 01:04:43.736: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
05-29 01:04:43.741: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.741: E/(26616): [android_ws] Format: 5, Width: 1002, Height: 288
05-29 01:04:43.876: I/System.out(26616): AsyncTask #2 calls detatch()
05-29 01:04:43.881: D/Response: user(26616): > {"utilisateur":[{"CIN":"1234567","DTYPE":"Financier","PWD":"ss","PRENOM":"saif","MAIL":"hhhh","DATE":null,"NOM":"mhamdi","LOGIN":"ss","ADR":null}]}
05-29 01:04:43.881: W/System.err(26616): org.json.JSONException: No value for user
05-29 01:04:43.886: W/System.err(26616): at org.json.JSONObject.get(JSONObject.java:389)
05-29 01:04:43.886: W/System.err(26616): at org.json.JSONObject.getJSONArray(JSONObject.java:584)
05-29 01:04:43.886: W/System.err(26616): at com.medbac.exemple.activity.AcceuilFragment$GetUser.doInBackground(AcceuilFragment.java:147)
05-29 01:04:43.886: W/System.err(26616): at com.medbac.exemple.activity.AcceuilFragment$GetUser.doInBackground(AcceuilFragment.java:1)
05-29 01:04:43.886: W/System.err(26616): at android.os.AsyncTask$2.call(AsyncTask.java:288)
05-29 01:04:43.886: W/System.err(26616): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
05-29 01:04:43.886: W/System.err(26616): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
05-29 01:04:43.886: W/System.err(26616): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-29 01:04:43.886: W/System.err(26616): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-29 01:04:43.886: W/System.err(26616): at java.lang.Thread.run(Thread.java:818)
05-29 01:04:43.921: E/ViewRootImpl(26616): sendUserActionEvent() mView == null
05-29 01:04:43.936: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
05-29 01:04:43.936: E/(26616): [android_ws] Format: 5, Width: 1080, Height: 1920
<?php
$mm=mysqli_connect("...","...","....");
mysqli_select_db($mm,"...");
$l = $_GET['LOGIN'];
$mp = $_GET['PWD'];
$sql = mysqli_query($mm,"SELECT * FROM user WHERE LOGIN = '$l' AND PWD = '$mp'");
$tab = array();
//Retourne le nombre de lignes dans un résultat
$nb_ligne=mysqli_num_rows($sql);
if($nb_ligne >= 1){
while($ligne = mysqli_fetch_array($sql,MYSQL_ASSOC)){
//mysqli_fetch_array
//Retourne une ligne de résultat sous la forme d'un tableau associatif, d'un tableau indexé, ou les deux
//Le second argument optionnel est une constante indiquant quel type de tableau doit être renvoyé à partir de la ligne de données courante.
$tab ["utilisateur"] [] = $ligne;
} }
echo $v = str_replace('\\/','/',json_encode($tab));
//json_decode — Décode une chaîne JSON
//Récupère une chaîne encodée JSON et la convertit en une variable PHP.
mysqli_close($mm);
&GT;
答案 0 :(得分:1)
当你实例化用户时,你甚至可以使用代码的一部分吗?这是我能想到的唯一原因。 你的输出是多少?如果您没有进行一些调试,并且在此处给出它很难尝试并查看错误的来源。我能想到的只是你永远不会达到
user = new User(...)
答案 1 :(得分:1)
您需要向我们介绍一下代码的执行情况。
请向我们提供一些调试行,例如检查点击是否真正有效,以及代码执行是否真正进入doInBackground回调。
祝你好运。
修改强> 您在某个时候获得了JSON异常。这就是为什么我猜。您正在尝试使用与之关联的错误密钥来获取JSON数组。
05-29 01:04:43.881: D/Response: user(26616): > {"utilisateur":[{"CIN":"1234567","DTYPE":"Financier","PWD":"ss","PRENOM":"saif","MAIL":"hhhh","DATE":null,"NOM":"mhamdi","LOGIN":"ss","ADR":null}]}
第一个JSON对象具有键“utilisateur”,并且JSON数组作为其值。然而,在doInBackground回调中,您尝试使用不存在的不同密钥“user”获取完全相同的值(“user”分配给此行中的TAG_TAB):
private static final String TAG_TAB = "user";
尝试将此行更改为“utilisateur”,看看是否仍然获得相同的JSON异常。