2016-12-27 46 views
0

如何從mysql數據庫中的ListView基於用戶登錄獲取數據下面是JSON的我收到:如何在ListView中獲取數據取決於用戶?

{"android":[{"username":"lokesh","company":"ffff","client":"xyz","client_no":"5487968475","callback":"2016-12-29 11:30:00"}, 
    {"username":"Rahul","company":"yyyy","client":"Suresh","client_no":"5789486589","callback":"2016-12-16 15:14:00"}, 
    {"username":"Fayaz","company":"ddddd","client":"Haresh","client_no":"4444889955","callback":"2016-12-28 14:00:00"}, 
    {"username":"Rahul","company":"qqqqq","client":"gore","client_no":"4444889955","callback":"2016-12-28 14:00:00"}]} 

在這裏,我得到上面的Json這是完全存在於數據庫中的數據,我越來越在列表視圖中的所有4個條目,但我真正想要的是,如果我登錄到應用程序的用戶名拉胡爾然後我應該只能看到2條記錄。如果我以Fayaz身份登錄,那麼我應該只能在列表視圖中看到1條記錄。誰能幫我在...下面是我的代碼: 活動:

public class AboutUsActivity extends AppCompatActivity implements LoadJSONTask.Listener, AdapterView.OnItemClickListener { 

private ListView mListView; 


public static final String URL = "http://10.0.2.2/android/get.php"; 
private List<HashMap<String, String>> mAndroidMapList = new ArrayList<>(); 

private static final String KEY_COMPANY = "company"; 
private static final String KEY_CLIENT = "client"; 
private static final String KEY_CLIENT_NO = "client_no"; 
private static final String KEY_CALLBACK = "callback"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_about_us); 

    mListView = (ListView) findViewById(R.id.list_view); 
    mListView.setOnItemClickListener(this); 
    new LoadJSONTask(this).execute(URL); 
} 

@Override 
public void onLoaded(List<AndroidVersion> androidList) { 

    for (AndroidVersion android : androidList) { 

     HashMap<String, String> map = new HashMap<>(); 

     map.put(KEY_COMPANY, android.getCompany()); 
     map.put(KEY_CLIENT, android.getClient()); 
     map.put(KEY_CLIENT_NO, android.getClient_no()); 
     map.put(KEY_CALLBACK, android.getCallback()); 

     mAndroidMapList.add(map); 
    } 

    loadListView(); 
} 

@Override 
public void onError() { 

    Toast.makeText(this, "Error !", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

    Toast.makeText(this, mAndroidMapList.get(i).get(KEY_CLIENT_NO),Toast.LENGTH_LONG).show(); 
} 

private void loadListView() { 

    ListAdapter adapter = new SimpleAdapter(AboutUsActivity.this, mAndroidMapList, R.layout.list_item, 
      new String[] { KEY_COMPANY, KEY_CLIENT, KEY_CLIENT_NO, KEY_CALLBACK }, 
      new int[] { R.id.company,R.id.client, R.id.client_no,R.id.callback }); 

    mListView.setAdapter(adapter); 

} 
} 

LoadJSONTask類:

public class LoadJSONTask extends AsyncTask<String, Void, Response> { 

public LoadJSONTask(Listener listener) { 

    mListener = listener; 
} 

public interface Listener { 

    void onLoaded(List<AndroidVersion> androidList); 

    void onError(); 
} 

private Listener mListener; 

@Override 
protected Response doInBackground(String... strings) { 
    try { 

     String stringResponse = loadJSON(strings[0]); 
     Gson gson = new Gson(); 

     return gson.fromJson(stringResponse, Response.class); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     return null; 
    } catch (JsonSyntaxException e) { 
     e.printStackTrace(); 
     return null; 
    } 
} 

@Override 
protected void onPostExecute(Response response) { 

    if (response != null) { 

     mListener.onLoaded(response.getAndroid()); 

    } else { 

     mListener.onError(); 
    } 
} 

private String loadJSON(String jsonURL) throws IOException { 

    URL url = new URL(jsonURL); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setReadTimeout(10000); 
    conn.setConnectTimeout(15000); 
    conn.setRequestMethod("GET"); 
    conn.setDoInput(true); 
    conn.connect(); 

    BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line; 
    StringBuilder response = new StringBuilder(); 

    while ((line = in.readLine()) != null) { 

     response.append(line); 
    } 

    in.close(); 
    return response.toString(); 
} 
} 

php文件:

<?php 
session_start(); 
$sql = "SELECT * FROM meetdetails"; 
require_once('dbConnect.php'); 
$r = mysqli_query($con,$sql); 
$android = array(); 
while($row = mysqli_fetch_array($r)){ 
array_push($android,array(
    'username'=>$row['username'], 
    'company'=>$row['company_name'], 
    'client'=>$row['client_name'], 
    'client_no'=>$row['client_no'], 
    'callback'=>$row['callback'] 
)); 
} 

echo json_encode(array('android'=>$android)); 
mysqli_close($con); 
?> 

回答

1

您可以發送用戶名到你的服務器,他們會向你提供用戶特定的請求,但是你也必須要求他們像這樣執行。或創建HasmMap>將用戶特定數據存儲在hasmap中,其中hasmap的KEY應該是用戶名或user_id,然後可以使用get方法從hasmap獲取特定用戶數據。

+0

你能舉個例子嗎?這將是大幫助夫人 –

0

將您的SQL結果保存在一個常規變量中,並在創建ListView過濾器之前根據用戶名過濾數據。 對於每個登錄的用戶名,過濾器將僅表示他的數據。

其他選項是過濾適配器內部的dada,再次根據連接的用戶名隱藏不相關的項。

相關問題